成员变量
定义在类里方法外的变量。
成员变量又分为实例变量(全局变量)和类变量
类变量也叫静态变量,变量前加static ;
实例变量也叫对象变量,不加static ;
类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;
而实例变量则为对象私有,某一个对象将其值改变,不影响其他对象;
类变量:访问类变量用对象名. 类变量名 或 类名.类变量名
所有对象的同一个类变量都是共享同一块内存空间的
实例变量:只能通过对象,对象名.实例变量名, 而且所有对象的同一个实例变量是共享不同的内存空间的
成员变量的存储:没有实例化的成员变量放在栈中;实例化后的对象放在堆中,栈中放的是指向堆中对象的引用地址。
成员变量在对象被创建时而存在,当对象被GC回收时消失,生存周期适中。
static修饰的全局变量存放于静态区,类加载时创建,在类中只有一份; 会跟着类的消失而消失,生存时间较长。
static修饰的全局变量,只在该源文件中可用
局部变量:
局部变量就是方法里定义的变量。只在定义它的方法内有效,生命周期短
可分为以下三种:
- 方法参数变量(形参):在整个方法内有效。
- 方法局部变量(方法内定义): 从定义这个变量开始到方法结束这一段时间内有效。
- 代码块局部变量(代码块内定义):从定义这个变量开始到代码块结束这一段时间内有效。
基本数据类型变量放在栈中,引用数据类型放在堆中
局部变量可以先定义再初始化,也可以定义的同时初始化,局部变量没有默认初始值。
成员变量有默认值,局部变量没有默认值,不会自动赋值。局部变量在使用前必须被程序员主动的初始化,和此形成对比,
系统中的成员变量则会被系统提供一个默认的初始值。所以在语法上,类的成员变量能够定义后直接使用,
而局部变量在定义后先要赋初值,然后才能使用。
如果局部变量和成员变量的名称相同,那么成员变量被隐藏,即方法内失效,方法中如需要访问该类中的成员变量,则需要加上关键字this
成员方法和构造方法:
成员方法
声明成员方法可以定义类的行为。成员方法一旦被定义,便可以在程序中多次调用。
[public|private|protected][static]<void|return_type><method_name>([paramList]) {
//方法体
}
[public|private|protected] //访问类型。
<void|return_type> //返回值的数据类型
<method_name> //方法名
([paramList]) //参数表
不能省略的部分:
<void|return_type><method_name>(有参或无参) {
//方法体;
}
其中 retum_type 是方法返回值的数据类型,数据类型可以是原始的数据类型,
即常用的 8 种数据类型,也可以是一个引用数据类型,如一个类、接口和数组等
方法没有返回值时用void
方法名:
第一个单词的第一个字母是小写,第二单词的第一个字母是大写,依此类推。
构造方法
用来初始化类的一个新的对象,在创建对象(new 运算符)之后自动调用。Java 中的
每个类都有一个默认的构造方法,并且可以有一个以上的构造方法。
- 方法名必须与类名相同
- 可以有 0 个、1 个或多个参数
- 没有任何返回值,包括 void
- 默认返回类型就是对象类型本身
- 只能与 new 运算符结合使用
实际上,类的构造方法是有返回值的,当使用 new 关键字来调用构造方法时,
构造方法返回该类的实例,可以把这个类的实例当成构造器的返回值,
因此构造器的返回值类型总是当前类,无须定义返回值类型。但必须注意不要
在构造方法里使用 return 来返回当前类的对象,因为构造方法的返回值是隐式的。
注意:构造方法不能被 static、final、synchronized、abstract 和 native(类似于 abstract)修饰。
构造方法用于初始化一个新对象,所以用 static 修饰没有意义。构造方法不能被子类继承,
所以用 final 和 abstract 修饰没有意义。多个线程不会同时创建内存地址相同的同一个对象,
所以用 synchronized 修饰没有必要。
在一个类中,与类名相同的方法就是构造方法。每个类可以具有多个构造方法,
但要求它们各自包含不同的方法参数。
一个类中定义多个具有不同参数的同名方法,这就是方法的重载。
类的构造方法不是要求必须定义的。如果在类中没有定义任何一个构造方法,
则 Java 会自动为该类生成一个默认的构造方法。默认的构造方法不包含任何参数,
并且方法体为空。如果类中显式地定义了一个或多个构造方法,则 Java 不再提供默认构造方法。
无参数的构造方法也被称为 Nullary 构造方法。只有编译程序自动加入的构造方法,才称为默认构造函数。
如果自行编写无参数、没有内容的构造函数,就不称为默认构造函数了(只是 Nullary 构造函数)。
要在不同的条件下使用不同的初始化行为创建类的对象,这时候就需要在一个类中创建多个构造方法
1. public classWorker {
2. public String; // 姓名 //字符串变量不可变
3. private int age; // 年龄
4. // 定义带有一个参数的构造方法
5. public Worker(String) {
6. this.name = name;
7. }
8. // 定义带有两个参数的构造方法
9. public Worker(String,int age) {
10. this.name = name;
11. this.age = age;
12. }
13. public StringtoString() {
14. return "大家好!我是新来的员工,我叫"+name+",今年"+age+"岁。";
15. }
16. }
toString() 方法,该方法是个特殊的方法,创建的每个类都会继承该方法,它返回一个 String 类型的字符串。
如果一个类中定义了该方法,则在调用该类对象时,将会自动调用该类对象的 toString() 方法返回一个字符串,
然后使用“System.out.println(对象名)”就可以将返回的字符串内容打印出来。