首页 > Python资料 博客日记
【Java】类和对象
2024-06-23 22:00:05Python资料围观98次
本篇文章分享【Java】类和对象,对你有帮助的话记得收藏一下,看Python资料网收获更多编程知识
类和类的实例化
类就是一类对象的统称。对象就是这一类具体化的一个实例。
声明一个类就是创建一个新的数据类型,而类在
Java
中属于
引用类型
,
Java
使用关键字
class
来声明类。我们来 看以下简单的声明一个类。
基本语法:
class < class_name > {field ; // 成员属性method ; // 成员方法}// 实例化对象< class_name > < 对象名 > = new < class_name > ();
- class为定义类的关键字,ClassName为类的名字,{}中为类的主体。
- 类中的元素称为:成员属性。类中的函数称为:成员方法。
代码示例:
class Student{
public String name;
public char sex;
public int age;
public void study(){
System.out.println("学习");
}
public void eat(){
System.out.println("吃饭");
}
}
这里我们创建了一个 Student 类,其中有成员属性:name、sex、age。和成员方法:study、eat。
类的实例化
用类类型创建对象的过程,称为类的实例化
代码示例:
class Student{
public String name;
public char sex;
public int age;
public void study(){
System.out.println("学习");
}
public void eat(){
System.out.println("吃饭");
}
}
public class TeatDemmo{
public static void main(String[] args){
Student stu1 = new Student();
stu1.study();
stu1.eat();
}
}
其中 stu1 就是类 Student 的一个实例,我们创建了实例后才能在另一个类中用到这个类里面的成员方法和成员属性。
- new 关键字用于创建一个对象的实例
- 使用 . 来访问对象中的属性和方法
- 同一个类可以创建多个实例
类的成员
类的成员可以包含以下:字段、方法、代码块、内部类和接口等
字段
在类中
,
但是方法外部定义的变量
.
这样的变量我们称为
"
字段
"
或
"
属性
"
或
"
成员变量
"
- 使用 . 访问对象的字段
- "访问" 既包含读, 也包含写
- 对于一个对象的字段如果没有显式设置初始值, 那么会被设置一个默认的初值
默认值规则
- 对于各种数字类型, 默认值为 0
- 对于 boolean 类型, 默认值为 false
- 对于引用类型(String, Array, 以及自定制类), 默认值为 null
方法
成员方法:用于描述一个对象的行为,就相比于C语言中的函数
构造方法
方法中还有一种特殊的方法称为
构造方法
在实例化对象的时候会被自动调用到的方法,
方法名字和类名相同
,
用于对象的初始化。
我们来举个例子描述构造方法:
class Student{
public String name;
public int age;
public char sex;
public Student(String name,int age,char sex){
this.name = name;
this.age = age;
this.sex = sex;
}
}
public class Data{
public static void main(String[] args) {
Student stu1 = new Student("张三",20,'男');
}
}
此处 Student() 方法就是我们的构造方法,构造方法在实例化对象的时候就会被自动调用,一般用于对象的初始化。
调试结果截图:
这里我们可以看到,我们只使用了实例化对象,但是以经给成员变量赋值了。
构造方法是一种特殊方法
,
使用关键字
new
实例化新对象时会被自动调用
,
用于完成初始化操作。
new
执行过程
- 为对象分配内存空间
- 调用对象的构造方法
语法规则
- 1.方法名称必须与类名称相同
- 2.构造方法没有返回值类型声明
- 3.每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造)
注意事项
- 如果类中没有提供任何的构造函数,那么编译器会默认生成一个不带有参数的构造函数
- 若类中定义了构造方法,则默认的无参构造将不再生成
- 构造方法支持重载. 规则和普通方法的重载一致
this关键字
this
表示当前对象引用,
可以借助
this
来访问对象的字段和方法
我们会发现在构造函数的内部,我们可以使用
this
关键字,构造函数是用来构造对象的,对象还没有构造好, 我们就使用了this。
代码示例:
class Person {
private String name;
private int age;
private String sex;
public Person() {
this("bit", 12, "man");//必须放在第一行进行显示
}
//这两个构造函数之间的关系为重载。
public Person(String name,int age,String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
}
public class Main{
public static void main(String[] args) {
Person person = new Person();//调用不带参数的构造函数
}
}
这里我们使用了构造方法的重载,我们在 main()函数中实例化的时候没有传参,说明我们自动调用了不带参数的构造方法。在不带参数的构造方法中我们又使用了 this() 函数,这个函数的作用是调用其他的构造方法(根据传参来选择调用哪个构造方法)。
注意:this() 方法必须在该构造方法的第一行。
static 关键字
- 1、修饰属性
- 2、修饰方法
- 3、修饰代码块
- 4、修饰类
修饰属性
,
Java
静态属性和类相关
,
和具体的实例无关
.
换句话说
,
同一个类的不同实例共用同一个静态属性。
修饰方法
如果在任何方法上应用
static
关键字,此方法称为静态方法。
- 静态方法属于类,而不属于类的对象。
- 可以直接调用静态方法,而无需创建类的实例。
- 静态方法可以访问静态数据成员,并可以更改静态数据成员的值。
注意事项
:
静态方法和实例无关
,
而是和类相关
.
- 静态方法不能直接使用非静态数据成员或调用非静态方法(非静态数据成员和方法都是和实例相关的)。
- this和super两个关键字不能在静态上下文中使用。
代码示例:
class Student{
public String name;
public int age;
public char sex;
public static String classroom;
public Student(String name,int age,char sex){
this.name = name;
this.age = age;
this.sex = sex;
}
public static void func(){
System.out.println("这是一个静态方法");
System.out.println(classroom);
}
}
public class Data{
public static void main(String[] args) {
Student stu1 = new Student("张三",20,'男');
Student.classroom = "2022308";
Student.func();
}
}
通过上述代码我们可以看出,在我们使用被 static 修饰过的成员变量或方法的时候,并不需要对象实例化,我们只需要通过类来调用。而且在静态方法里面我们可以直接使用静态成员变量。
运行结果图:
上述代码数据属性的内存布局:
因此被 static 关键字修饰的变量并不存在类中,不需要用用实例化来调用。
代码块
字段的初始化方式有:
- 1. 就地初始化
- 2. 使用构造方法初始化
- 3. 使用代码块初始化
前两种方式前面已经学习过了
,
接下来我们介绍第三种方式
,
使用代码块初始化
什么是代码块
使用
{}
定义的一段代码就是代码块
根据代码块定义的位置以及关键字,又可分为以下四种:
- 普通代码块
- 构造块
- 静态块
- 同步代码块
普通代码块:定义在方法中的代码块
构造块:定义在类中的代码块
(
不加修饰符
)
。也叫:
实例代码块
。构造代码块一般用于初始化实例成员变量
静态代码块:使用
static
定义的代码块。
一般用于初始化静态成员属性。
代码示例:
class Student{
public String name;
public String id;
public int age;
public char sex;
public static String classroom;
static{
classroom = "2000123";
System.out.println("这是一个静态代码块");
}
{
this.name = "小明";
this.id = "202258454";
this.age = 20;
this.sex = '男';
System.out.println("这是一个构造代码块");
}
public Student(){
System.out.println("这是一个构造方法");
}
}
public class Data{
public static void main(String[] args) {
Student stu = new Student();
}
}
我们在 Student 类中写了一个静态代码块一个构造代码块和一个构造方法。接下来我们来看当实例化对象的时候,它们三个的执行顺序。
我们可以看到静态代码块优先于构造代码块优先于构造方法。
注意事项
- 静态代码块不管生成多少个对象,其只会执行一次,且是最先执行的。
- 静态代码块执行完毕后, 实例代码块(构造块)执行,再然后是构造函数执行。
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 Data {
public static void main(String[] args) {
Person person = new Person("小明",19);
person.show();
System.out.println(person);
}
}
输出结果:
注意事项
- toString 方法会在 println 的时候被自动调用
- 将对象转成字符串这样的操作我们称为 序列化
- toString 是 Object 类提供的方法, 我们自己创建的 Person 类默认继承自 Object 类, 可以重写 toString 方法实 现我们自己版本的转换字符串方法
- @Override 在 Java 中称为 "注解", 此处的 @Override 表示下面实现的 toString 方法是重写了父类的方法
- IDEA快速生成Object的toString方法快捷键:alt+f12(insert)
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj