《JAVA SE》类与对象的注意事项

导读:本篇文章讲解 《JAVA SE》类与对象的注意事项,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

前言

本章节为大家总结了JAVA中类与对象中的一些注意事项,包括语法、定义等等。

类就是一类对象的统称。对象就是这一类具体化的一个实例。
简单的例子:我们做月饼的模子就是一个类,而通过这个模子可以做出月饼,那么在这个例子当中,类就是那个模子,而月饼就是那个对象,所以月饼就是一个实体。一个模子可以实例化无数个对象。
总的来说:类相当于一个模板,对象是由模板产生的样本。一个类,可以产生无数的对象。 声明一个类就是创建一个新的数据类型,而类在 Java中属于引用类型, Java 使用关键字 class 来声明类。


一、字段/属性/成员变量

在类中, 但是方法外部定义的变量. 这样的变量我们称为 “字段” 或 “属性” 或 “成员变量”(三种称呼都可以, 一般不会严格区分).

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关键字修饰,他就表示的属性(直接用类.变量名就可以调用),该类的所有对象共享这个属性,所有对象的属性值大家都一样。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 静态方法

如果在任何方法上应用 static 关键字,此方法称为静态方法。 静态方法属于类,而不属于类的对象。
可以直接调用静态方法,而无需创建类的实例。

静态方法可以访问静态数据成员,并可以更改静态数据成员的值。

3.2.1 注意事项

静态方法和实例无关, 而是和类相关. 因此这导致了两个情况:

(1)静态方法不能直接使用非静态数据成员或调用非静态方法(非静态数据成员和方法都是和实例相关的).

(2)this和super两个关键字不能在静态上下文中使用(this 是当前实例的引用, super是当前实例父类实例的引用, 也是和当前实例相关).

(3)main 方法为 static 方法.

(4)static关键字不能直接修饰一个外部类。(private关键字也不可以修饰外部类)

3.2.2 为什么main方法是静态方法?

主方法是一个程序的入口,若主方法是成员方法,必须先new一个对象,但入口都不存在何谈new一个对象呢?(程序从主方法开始执行,所以把它定义为静态方法,直接就可以调用,不需要产生对象)

四、构造方法

构造方法是类中非常特殊的一类方法,使用关键字new实例化对象时实际上调用的是该类的构造方法。

构造方法的作用就是产生对象。

4.1 new执行过程

1.为对象在堆中分配空间。
2.调用对象的构造方法为成员变量赋值。
3.构造方法调用结束,则对象初始化完成。
在这里插入图片描述

4.2 构造方法的语法规则

(1)方法名称与类名称完全相同。

(2)构造方法没有返回值声明(不是void)。

(3)每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造)。

(4)若类中定义了有参构造方法,则默认的无参构造将不再生成。此时建议再定义一个无参构造器。

(5)构造方法支持重载. 规则和普通方法的重载一致。

五、this关键字

this表示当前对象引用(注意不是当前对象). 可以借助 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 匿名对象

匿名只是表示没有名字的对象.

1.没有引用的对象称为匿名对象.
2.匿名对象只能在创建对象时使用.
3.如果一个对象只是用一次, 后面不需要用了, 可以考虑使用匿名对象.

简单来说就是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中类与对象的所有注意事项啦,希望老铁们给个三连哟~
(●ˇ∀ˇ●)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/81798.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!