目录
概述:Java中的成员包含五部分
第一部分:变量
(1)Java中的变量分类
(2)成员变量和局部变量的位置区别
(3)Java中成员变量作用域/Java权限修饰符
(4)Java中成员变量和成员属性的区别
(5)成员变量初始化方式
(6)成员变量初始化顺序
概述:Java中的成员包含五部分
Java的基本单位是类,类中包含五个部分。
(1)变量
(2)方法
(3)构造器
(4)初始化块
(5)内部类
第一部分:变量
(1)Java中的变量分类
①Java中的变量根据数据类型分为几类?
两类:Java中的变量根据数据类型分为两类:基本数据类型变量和引用数据类型变量。
②Java中的变量定义位置?
两类:变量根据定义位置的不同分为成员变量和局部变量。成员变量直接定义在类中局部变量定义在方法体中或者语句块中。
③Java成员变量分为哪两种?Java成员变量和类变量的区别是什么?
Java成员变量根据修饰符不同又分为实例变量和类变量(静态变量)。Java成员变量和类变量的区别是成员变量包含类变量。
(2)成员变量和局部变量的位置区别
①成员变量直接定义在类中,整个类可以使用。
class Ver_1
{
//成员变量,定义在类里
int a = 10;
}
②局部变量定义在方法块中,必须赋一个初始值,只有在方法中才可以使用,出了方法就不可以使用。
public void test(){
//局部变量
int a = 100;
}
③内存位置不一样。成员变量位于堆当中。局部变量位于栈当中。
④生命周期不同。成员变量随着对象创建而诞生,随着对象被回收消失。局部变量随着方法进栈诞生,随着方法出栈消失。
(3)Java中成员变量作用域/Java权限修饰符
对于类的成员(包括成员变量和成员方法)而言,其能否被其他类所访问,取决于该成员的修饰词。
①其中public成员变量可以被任何类访问和使用。可以通过类名.成员变量名的方式来访问public成员变量。
②protected成员变量只能在类内部和子类中使用。在子类中,可以通过super关键字来访问父类的protected成员变量。
③(如图)
④private成员变量只能在类内部使用,要访问private成员变量必须通过类提供的公共方法来访问。
(4)Java中成员变量和成员属性的区别
①属性的官方定义:属性是指get或者set方法名,去掉get或者set后,把剩余的部分首字母改为小写后,即为这个类的属性。
②图中紫色P为类的属性,黄色f为成员变量。从图中可以看出age是成员变量,size和name为类的属性,不是类的成员变量。
(5)成员变量初始化方式
①直接无值初始化,会给一个默认值
class Ver_1
{
//成员变量初始化时不赋值会有默认值
private boolean flag; // false
private int _int; // 0
private char _char; //'0000'
private float _float; //Default value: 0.0
private long _long; //Default value: 0
private double _double; //Default value: 0.0
//引用类型默认值是 null
}
②直接赋值初始化
class Ver_1
{
//成员变量,定义在类里
int a = 10;
}
③构造方法初始化,在进入构造函数之前,默认初始化num为0,进入构造函数后赋值为20。
public class Ver_1{
int num ;
public Ver_1(){
num = 20;
}
}
(6)成员变量初始化顺序
①非静态成员变量,在构造函数之前初始化,并且按定义顺序初始化。
②静态代码块和静态成员变量执行顺序和代码中出现的顺序有关。
③静态成员变量优先于非静态成员变量,静态初始化只在Class对象第一次创建时发生一次。下面搬运了一段代码举例:
public class StaticInitialization {
public static void main(String[] args) {
System.out.println("Creating new Cupboard() in main");
new Cupboard();
System.out.println("Creating new Cupboard() in main");
new Cupboard();
t2.f2(1);
t3.f3(1);
}
static Table t2 = new Table();
static Cupboard t3 = new Cupboard();
}
class Bowl{
Bowl(int i){
System.out.println("Bowl"+i);
}
void f(int i){
System.out.println("f"+i);
}
}
class Table{
static Bowl b1 = new Bowl(1);
Table(){
System.out.println("Table()");
b2.f(1);
}
void f2(int i){
System.out.println("f2("+i+")");
}
static Bowl b2 = new Bowl(2);
}
class Cupboard{
Bowl b3 = new Bowl(3);
static Bowl b4 = new Bowl(4);
Cupboard(){
System.out.println("Cupboard()");
b4.f(2);
}
void f3(int i){
System.out.println("f3("+i+")");
}
static Bowl b5 = new Bowl(5);
}
输出结果如下:
Bowl1
Bowl2
Table()
f1
Bowl4
Bowl5
Bowl3
Cupboard()
f2
Creating new Cupboard() in main
Bowl3
Cupboard()
f2
Creating new Cupboard() in main
Bowl3
Cupboard()
f2
f2(1)
f3(1)