Java基础1

2018-11-08  本文已影响0人  MononokeHime

1.JRE和JVM的区别

简而言之:使用JDK开发完成java程序,交给JRE去运行

2.第一个java程序,HelloWorld.java

class HelloWorld{
    public static void main(String[] args) {
        System.out.println("HelloWorld");
    }
}

1.文件名最好必须要与类名相同
2.java的入口是执行main函数

执行

javac HelloWorld.java # 编译,生成class字节码文件
java HelloWorld      # 执行class文件

3.数据类型

整数默认:int,小数默认:double

long i = 10000000000 // 10000000000默认是int,所以不能赋给long
long i = 10000000000L

float j = 12.345 //12.245默认是double,赋值给float会损失精度
float j = 12.345F

4.变量作用域

类型转换

byte a = 10
int b = 20
int c = a+b // a会提升为int类型
byte i = 10000;  //错误,损失精度
byte i = (byte)(10000); //强制转换
System.out.println(i); // 16

注意:

float f1 = (float)12.245 //f1其实是通过一个double类型转换过来的
float f1 = 12.245F // f2本身就是一个float
  1. 在定义Long或者Float类型变量的时候,要加L或者F
    整数默认是int类型,浮点数默认是double
    byte,short在定义的时候,他们接收的其实是int类型的值,这个是自己做了一个数据检测的,如果不再它们的范围内,就报错

float和double的存储结构

易错知识

s+=1等价于 s = (s的数据类型)(s+1)

例如:

short s = 10
s = s + 2; // 报错
s+=2; // 正确

键盘录入程序

import java.util.Scanner;
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("请输入数字");
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        System.out.println("你输入的数字是"+x);
    }
}

Java中的内存分配

Java程序为了提高程序的效率,就对数据进行了不同空间的分配,具体划分为五个内存划分

局部变量:在方法定义中或者方法声明上的变量
堆内存的特点:
A:每一个new出来的东西都有地址值
B:每个变量都有默认值
C:使用完毕后就变成垃圾,但是并没有立即回收。会在垃圾回收器空闲的时候回收
栈内存的数据用完就释放

成员变量和局部变量的区别

class Student{
    int age; // 成员变量
    public static void study(){
        int num = 10; //局部变量
    }
}

成员变量和局部变量的区别?

匿名对象

没有名字的对象
new Student
匿名对象的应用场景

构造方法

类的组成

1.成员变量
2.构造方法
3.成员方法

类的初始化过程

Student s = new Student();在内存中做了哪些事情?

静态成员的注意点(难点)

创建工具类的小技巧

我们提供一个工具类,让其他类去调用该类的方法,但是我们不希望别人去实例化对象来调用类方法,可以对构造方法private,从而阻止类的实例化。

代码块

局部代码块,局部位置,限定变量的生命周期

public class HelloWorld {
    public static void main(String[] args) {
        {
            int x = 3;// 局部代码块
        }
        System.out.println(x); //无法访问

    }
}

构造代码块,在类中成员位置,用{}括起来的代码。执行过程:每次调用构造方法执行前,都会执行构造代码块。作用:可以把多个构造方法中共同代码放到一起。

class Student{
    {
        System.out.println("第一个构造代码块");
    }
    public Student(){ System.out.println("我是构造方法"); }
    {
        System.out.println("第二个构造代码块");
    }
}

public class HelloWorld {
    public static void main(String[] args) {
        Student s = new Student();
    }
}

输出:

第一个构造代码块
第二个构造代码块
我是构造方法

静态代码块,在类中成员位置,用{}括起来,用static修饰。作用:一般是对类的初始化。

class Student{
    static {
        System.out.println("我是静态代码块");
    }
    {
        System.out.println("我是构造代码块");
    }
    public Student(){ System.out.println("我是构造方法"); }
}

public class HelloWorld {
    public static void main(String[] args) {
        Student s1 = new Student();
        System.out.println("===========");
        Student s2 = new Student();
    }
}

输出:

我是静态代码块
我是构造代码块
我是构造方法
===========
我是构造代码块
我是构造方法

注意:各个代码块的执行顺序:静态代码块-》构造代码块-》构造方法;其中静态代码块只执行一次(只要一加载到内存时就执行),构造代码块在每次创建对象的时候都会执行。

class HelloWorld{
    static {
        System.out.println("我是静态代码块");
    }
    {
        System.out.println("我是构造代码块");
    }
    public HelloWorld(){ System.out.println("我是构造方法"); }
    public static void main(String[] args) {
        System.out.println("我是主函数");
    }
}

输出

我是静态代码块
我是主函数
上一篇下一篇

猜你喜欢

热点阅读