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

相关文章
|
19天前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
16天前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
39 17
|
8天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
12天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
52 4
|
12天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
29 2
|
17天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
21天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
21天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
21天前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
23 3
|
22天前
|
存储 缓存 NoSQL
一篇搞懂!Java对象序列化与反序列化的底层逻辑
本文介绍了Java中的序列化与反序列化,包括基本概念、应用场景、实现方式及注意事项。序列化是将对象转换为字节流,便于存储和传输;反序列化则是将字节流还原为对象。文中详细讲解了实现序列化的步骤,以及常见的反序列化失败原因和最佳实践。通过实例和代码示例,帮助读者更好地理解和应用这一重要技术。
20 0