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

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

前言

本章节为大家总结了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中类与对象的所有注意事项啦,希望老铁们给个三连哟~
(●ˇ∀ˇ●)**

相关文章
|
10天前
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
27 1
|
10天前
|
Java 索引
java基础(13)String类
本文介绍了Java中String类的多种操作方法,包括字符串拼接、获取长度、去除空格、替换、截取、分割、比较和查找字符等。
24 0
java基础(13)String类
|
10天前
|
Java
java基础(4)public class 和class的区别及注意事项
本文讲解了Java中`public class`与`class`的区别和注意事项。一个Java源文件中只能有一个`public class`,并且`public class`的类名必须与文件名相同。此外,可以有多个非`public`类。每个类都可以包含一个`main`方法,作为程序的入口点。文章还强调了编译Java文件生成`.class`文件的过程,以及如何使用`java`命令运行编译后的类。
15 3
java基础(4)public class 和class的区别及注意事项
|
10天前
|
Java
java基础(12)抽象类以及抽象方法abstract以及ArrayList对象使用
本文介绍了Java中抽象类和抽象方法的使用,以及ArrayList的基本操作,包括添加、获取、删除元素和判断列表是否为空。
13 2
java基础(12)抽象类以及抽象方法abstract以及ArrayList对象使用
|
4天前
|
Java API
Java的日期类都是怎么用的
【10月更文挑战第1天】本文介绍了 Java 中处理日期和时间的三个主要类:`java.util.Date`、`java.util.Calendar` 和 `java.time` 包下的新 API。`Date` 类用于表示精确到毫秒的瞬间,可通过时间戳创建或获取当前日期;`Calendar` 抽象类提供丰富的日期操作方法,如获取年月日及时区转换;`java.time` 包中的 `LocalDate`、`LocalTime`、`LocalDateTime` 和 `ZonedDateTime` 等类则提供了更为现代和灵活的日期时间处理方式,支持时区和复杂的时间计算。
26 14
|
11天前
|
存储 Java
Java编程中的对象和类
【8月更文挑战第55天】在Java的世界中,“对象”与“类”是构建一切的基础。就像乐高积木一样,类定义了形状和结构,而对象则是根据这些设计拼装出来的具体作品。本篇文章将通过一个简单的例子,展示如何从零开始创建一个类,并利用它来制作我们的第一个Java对象。准备好让你的编程之旅起飞了吗?让我们一起来探索这个神奇的过程!
25 10
|
8天前
|
安全 Java 编译器
java访问类字段
java访问类字段
|
10天前
|
Java
java的class类
java的class类
18 5
|
11天前
|
Java 数据处理
Java Scanner 类详解
`Scanner` 类是 Java 中 `java.util` 包提供的强大工具,用于从多种输入源(如键盘、文件、字符串)读取数据。本文详细介绍如何创建 `Scanner` 对象并使用其常用方法(如 `next()`, `nextInt()`, `nextLine()` 等)。通过示例代码展示如何从标准输入、字符串及文件中读取数据,并进行输入验证。使用时需注意关闭 `Scanner` 以释放资源,并确保输入类型匹配,避免异常。掌握 `Scanner` 可显著提升程序的数据处理能力。
|
11天前
|
Java 索引
java基础扫盲-String类常用的方法
java基础扫盲-String类常用的方法
下一篇
无影云桌面