按被声明的位置划分,可分为成员变量和局部变量:
1、定义在类当中,和方法同级 2、作用域为整个对象,类当中都可以使用的变量 3、定义时可以没有初始值,有默认值是0,使用时可以赋值 4、内存空间和值都存储在堆内存中
1、定义在方法体内,且只能在定义它的方法中使用 2、定义时可以没有初始值,使用时必须赋值 3、该方法中不能出现两个名称相同的局部变量 4、内存空间和值都存储在栈内存当中
按所属的数据类型划分,可分为基本数据类型和引用数据类型:
1、修饰类,不能被继承,所以final类的成员方法没有机会被覆盖, 默认都是final的 2、修饰变量(常量),如果该变量是基本数据类型,则它的值不能被修改; 如果是引用数据类型,地址不可改变,它的值可以被修改。 3、修饰方法,不能被重写 4、防止指令重排序,保证线程间可见性(并发)
为什么String不可变?
请看源码:
由源码我们可以知晓:
1、String用来存储数据的char数组被final修饰,意味着一个String对象里的char数组不可能再指向一个新的数组。
2、String内部没有修改char数组的方法。
3、String类用final修饰,不可以被继承,从而不能通过子类修改。
因此,String不可变!!!
static作用:在没有创建对象的时候方便对方法和变量进行调用 static修饰符
一、修饰变量:static修饰的变量属于类变量,被所有对象共享
二、修饰方法:
1、属于类方法
2、this关键字不能在static方法当中使用(this代指当前对象,static 修饰的方法是类方法)
3、静态方法当中不能使用非静态的方法,非静态的方法能够使用静态方法 4、static修饰的代码块,在main方法之前执行,以便于优化程序