这里写目录标题
- 第一章、Java中的变量分类
- 1.1)变量分类
- 1.2)成员变量分类
- 1.3)成员变量和局部变量的区别
- 第二章、成员变量详解
- 2.1)成员变量作用域/权限修饰符
- 2.2)成员变量和成员属性的区别
- 2.3)成员变量初始化方式
- 2.4)成员变量初始化顺序
第一章、Java中的变量分类
概述:Java类的五个成员之一:变量
Java的基本单位是类,类中包含五个部分:变量、方法、构造器、初始化块、内部类
1.1)变量分类
①变量根据数据类型分类
两类:Java中的变量根据数据类型分为两类:基本数据类型变量和引用数据类型变量。
1、基本数据类型变量:基本数据类型是Java语言内置的数据类型,用于存储简单的数值。基本数据类型包括整型、浮点型、字符型和布尔型。
public class PrimitiveExample {public static void main(String[] args) {int num = 10; // 整型变量double salary = 1000.50; // 浮点型变量char grade = 'A'; // 字符型变量boolean isStudent = true; // 布尔型变量System.out.println("Number: " + num);System.out.println("Salary: " + salary);System.out.println("Grade: " + grade);System.out.println("Is student: " + isStudent);}
}
2、引用数据类型变量:引用数据类型是指存储对象引用的变量,而不是对象本身。引用数据类型包括类、接口、数组等。
public class ReferenceExample {public static void main(String[] args) {String str = "Hello, Java!"; // 字符串对象引用int[] numbers = {1, 2, 3, 4, 5}; // 整型数组对象引用System.out.println("String: " + str);System.out.print("Numbers: ");for (int num : numbers) {System.out.print(num + " ");}}
}
②变量根据变量定义位置分类
两类:变量根据定义位置的不同分为全局变量(成员变量)和局部变量。
1、全局变量(也称为成员变量)是在类中声明的变量,其作用域为整个类。全局变量可以是实例变量(非静态变量)或类变量(静态变量)。
2、局部变量:在方法、构造函数或代码块内部声明的变量,其作用域仅限于声明它的方法、构造函数或代码块。局部变量在方法、构造函数或代码块执行时创建,执行结束时销毁。
public class Example {// 全局变量(实例变量)String globalVar = "This is a global variable";public void exampleMethod() {// 局部变量int localVar = 10;System.out.println("Local variable: " + localVar);System.out.println("Global variable: " + globalVar);}public static void main(String[] args) {Example obj = new Example();obj.exampleMethod();System.out.println(obj.globalVar);}
}
1.2)成员变量分类
两类:成员变量分为类变量和实例变量。
Java成员变量和类变量的区别:
实例变量(非静态变量):只能通过对象名调用(通过对象实例访问)。实例变量是属于类的每个对象实例的变量,存储在堆内存。 每个对象都有自己的一组实例变量副本,它们在对象创建时被初始化。实例变量可以。
public class Person {String name; // 实例变量int age; // 实例变量public static void main(String[] args) {Person person1 = new Person();person1.name = "Alice";person1.age = 25;Person person2 = new Person();person2.name = "Bob";person2.age = 30;}
}
类变量(静态变量):静态变量也称为类变量,可以直接通过类名调用。也可以通过对象名调用,这个变量属于类,存储在方法区栈中的静态区。静态变量只有一个副本,会被所有类的实例共享。可以直接通过类名访问静态变量,而不需要创建对象。
static int staticVar; // 静态变量,只会初始化一次
1.3)成员变量和局部变量的区别
①成员变量直接定义在类中,整个类可以使用。
②局部变量定义在方法块中,必须赋一个初始值,只有在方法中才可以使
③内存位置不一样。成员变量位于堆当中。局部变量位于栈当中。
④生命周期不同。成员变量随着对象创建而诞生,随着对象被回收消失。局部变量随着方法进栈诞生,随着方法出栈消失。
第二章、成员变量详解
2.1)成员变量作用域/权限修饰符
对于类的成员(包括成员变量和成员方法)而言,其能否被其他类所访问,取决于该成员的修饰词。
①其中public成员变量可以被任何类访问和使用。可以通过类名.成员变量名的方式来访问public成员变量。
②protected成员变量只能在类内部和子类中使用。在子类中,可以通过super关键字来访问父类的protected成员变量。
③空着不写:同类中,同包中
④private成员变量只能在类内部使用,要访问private成员变量必须通过类提供的公共方法来访问。
2.2)成员变量和成员属性的区别
①属性的官方定义:属性是指get或者set方法名,去掉get或者set后,把剩余的部分首字母改为小写后,即为这个类的属性。
②图中紫色P为类的属性,黄色f为成员变量。从图中可以看出age是成员变量,size和name为类的属性,不是类的成员变量。
2.3)成员变量初始化方式
①直接无值初始化,会给一个默认值
class Ver_1
{//成员变量初始化时不赋值会有默认值private boolean flag; // falseprivate int _int; // 0private char _char; //'0000'private float _float; //Default value: 0.0private long _long; //Default value: 0private 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;}
}
2.4)成员变量初始化顺序
①非静态成员变量,在构造函数之前初始化,并且按定义顺序初始化。
②静态代码块和静态成员变量执行顺序和代码中出现的顺序有关。
③静态成员变量优先于非静态成员变量,静态初始化只在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)