前言
本章节为大家总结了JAVA中类与对象中的一些注意事项,包括语法、定义等等。
一、字段/属性/成员变量
1.1 注意事项
1.使用 . 访问对象的字段.
2.“访问” 既包含读, 也包含写.
3.对于一个对象的字段如果没有显式设置初始值, 那么会被设置一个默认的初值.
1.2 默认值规则
1.对于各种数字类型, 默认值为 0.
2.对于 boolean 类型, 默认值为 false.
3.对于引用类型(String, Array, 以及自定制类), 默认值为 null
1.3 认识 null
null 在 Java 中为 “空引用”, 表示不引用任何对象. 类似于 C 语言中的空指针. 如果对 null 进行 . 操作就会引发异常
二、成员方法
注意区别于构造方法,这是对象的方法,有返回值,创建对象后才可调用。
三、static关键字
3.1 静态属性,类属性,类变量
当一个实例变量被static关键字修饰,他就表示类的属性(直接用类.变量名就可以调用),该类的所有对象共享这个属性,所有对象的属性值大家都一样。static修饰的属性在JVM方法区中存储,所有该类对象共享此属性。(顺带一提,new出来的对象存储在堆区,而局部变量和普通方法存储在栈区)
例如:调用new person()
来创建一个对象,必须得先有类才能产生对象。该类会一开始先加载进内存中,随即person类中所有的static变量都会加载到方法区中。
3.1.1 方法区
1.类中的所有方法都在方法区中存储。
2.方法区中存储常量和静态变量。
3.1.2 注意事项
(1)问:在JAVA中能否在方法中定义一个静态变量?
答:不能!方法中定义的都是局部变量,在栈中存取,一旦方法调用结束,弹出栈帧就会销毁,所以不可以。
(2)类中常量的定义:
在类中定义常量,一般都会使用全局常量,static final共同修饰。
常量的命名规则:
所有单词全部大写,多个单词使用下划线分隔。
例如:static final String STUDENT_SCHOOL=“清华大学”
(3)不推荐使用对象来调用类属性,不规范!!!
(4)类的null引用也可以通过类名访问static属性。
3.2 静态方法
静态方法可以访问静态数据成员,并可以更改静态数据成员的值。
3.2.1 注意事项
(1)静态方法不能直接使用非静态数据成员或调用非静态方法(非静态数据成员和方法都是和实例相关的).
(2)this和super两个关键字不能在静态上下文中使用(this 是当前实例的引用, super是当前实例父类实例的引用, 也是和当前实例相关).
(3)main 方法为 static 方法.
(4)static关键字不能直接修饰一个外部类。(private关键字也不可以修饰外部类)
3.2.2 为什么main方法是静态方法?
主方法是一个程序的入口,若主方法是成员方法,必须先new一个对象,但入口都不存在何谈new一个对象呢?(程序从主方法开始执行,所以把它定义为静态方法,直接就可以调用,不需要产生对象)
四、构造方法
构造方法的作用就是产生对象。
4.1 new执行过程
1.为对象在堆中分配空间。
2.调用对象的构造方法为成员变量赋值。
3.构造方法调用结束,则对象初始化完成。
4.2 构造方法的语法规则
(1)方法名称与类名称完全相同。
(2)构造方法没有返回值声明(不是void)。
(3)每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造)。
(4)若类中定义了有参构造方法,则默认的无参构造将不再生成。此时建议再定义一个无参构造器。
(5)构造方法支持重载. 规则和普通方法的重载一致。
五、this关键字
5.1 调用当前对象的成员变量
5.2 调用当前对象的方法
5.3 this表示构造方法之间的互相调用(重点
)
若不同参数的构造方法之间出现了重复的调用,可以使用this(参数)来调用其他方法的构造方法。
更改前:
更改后:
注意:
(1)this调用其他构造方法必须放在当前构造方法的首行!
(2)this调用构造方法不能成“环”。
六、代码块
6.1 普通代码块
定义在方法中的代码块,用{}括起来。
6.2 构造代码块
定义再类中的代码块,也叫构造块。
注意(重点
):
构造块直接定义在类之中,不加任何修饰符的代码块,优先构造于构造方法执行,有几个对象产生就调用几次构造块。
6.3 静态代码块
定义在类中,使用static修饰的代码块,在类加载时执行一次。
注意:静态代码块优先于构造块执行。
主类的静态块优先于主方法执行。JVM要执行主方法,首先得先加载主类,主类一加载,静态块就执行了。
示例:
七、补充说明(重点
)
7.1 toString方法
代码示例:
class Person {
private String name;
private int age;
public Person(String name,int age) {
this.age = age;
this.name = name;
}
public void show() {
System.out.println("name:"+name+" " + "age:"+age);
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person("caocao",19);
person.show();
//我们发现这里打印的是一个地址的哈希值 原因:调用的是Object的toString方法
System.out.println(person);
}
}
// 执行结果
name:caocao age:19
Person@1c168e5
可以使用 toString 这样的方法来将对象自动转成字符串:
class Person {
private String name;
private int age;
public Person(String name,int age) {
this.age = age;
this.name = name;
}
public void show() {
System.out.println("name:"+name+" " + "age:"+age);
}
//重写Object的toString方法
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class Main {
public static void main(String[] args) {
比特科技
Person person = new Person("caocao",19);
person.show();
System.out.println(person);
}
}
// 执行结果
name:caocao age:19
Person{name='caocao', age=19}
注意事项:
(1)toString 方法会在 println 的时候被自动调用.
(2)将对象转成字符串这样的操作我们称为 序列化.
(3)toString 是 Object 类提供的方法, 我们自己创建的 Person 类默认继承自 Object 类, 可以重写 toString 方法实现我们自己版本的转换字符串方法. (关于继承和重写这样的概念, 我们后面会重点介绍).
(4)@Override 在 Java 中称为 “注解”, 此处的 @Override 表示下面实现的 toString 方法是重写了父类的方法.
(5)IDEA快速生成Object的toString方法快捷键:alt+f12(insert)
7.2 匿名对象
匿名只是表示没有名字的对象.
简单来说就是new出来的对象只用一次就销毁了,通常用于测试类中的某些功能,使用一次就被JVM销毁。
示例:
class Person {
private String name;
private int age;
public Person(String name,int age) {
this.age = age;
this.name = name;
}
public void show() {
System.out.println("name:"+name+" " + "age:"+age);
}
}
public class Main {
public static void main(String[] args) {
new Person("caocao",19).show();//通过匿名对象调用方法
}
}
// 执行结果
name:caocao age:19
八、总结
(1)一个类可以产生无数的对象,类就是模板,对象就是具体的实例。
(2)类中定义的属性,大概分为几类:类属性,对象属性。其中被static所修饰的数据属性称为类属性, static修饰的方法称为类方法,特点是不依赖于对象,我们只需要通过类名就可以调用其属性或者方法。
(3)静态代码块优先实例代码块执行,实例代码块优先构造函数执行。
(4)this关键字代表的是当前对象的引用。并不是当前对象。
以上就是JAVA中类与对象的所有注意事项啦,希望老铁们给个三连哟~
(●ˇ∀ˇ●)