JAVASE之类和对象(1)

发布时间:2026/7/26 17:53:51
JAVASE之类和对象(1) 路虽远行则将至事虽难做则必成。主页趋早——Step专栏JAVASE引言这篇文章我们只介绍前半部分下一篇文章会介绍剩下的部分。目录一、面向对象1、什么是面向对象2、面向对象与面向过程二、类定义和使用1、认识类2、类的定义格式3、定义一个学生类三、类的实例化1、什么是实例化注意事项2、类和对象的说明四、this引用1、为什么要有this引用2、什么是this引用3、this引用的特性1this的类型对应类类型引用即哪个对象调用就是哪个对象的引用类型2this只能在“成员方法”中使用3在“成员方法”中this只能引用当前对象不能引用其他对象4this是“成员方法”第一个隐藏的参数编译器会自动传递在成员方法执行时编译器会负责将调用成员方法的引用传递给该成员方法this负责来接收。五、对象的构造和初始化1、如何初始化对象2、默认初始化3、就地初始化4、构造方法1概念2特性1 名字必须与类名相同2 没有返回值类型设置为void也不行3 创建对象时由编译器自动调用并且在对象的生命周期内只调用一次4 构造方法可以重载5 如果用户没有显示定义编译器会生成一份默认的构造方法生成的默认构造方法一定是无参的。6 在构造方法中可以通过this调用其他构造方法来简化代码。7 绝大多数情况下使用public来修饰特殊场景下会被private修饰。一、面向对象1、什么是面向对象面向对象是一种编程范式它将程序组织成对象的集合每个对象都有自己的状态和行为。在面向对象的编程中程序通过定义对象的属性和方法来描述问题的解决方案。对象可以通过与其他对象进行交互来实现特定的功能。面向对象的编程主要包括封装、继承和多态三个特性通过这些特性可以使程序更加模块化、可维护和可复用。我们学习的Java是一门纯面向对象的语言在面向对象的世界里一切皆为对象面向对象是解决问题的一种思想主要依靠对象之间的交互完成一件事情。用面向对象的思想来设计程序更符合人们对事物的认知对于大型程序的设计、扩展及维护都非常友好。2、面向对象与面向过程我们都知道曹冲称象的故事吧我们分别用面向对象和面向过程来讲述一下这个过程1面向过程我们要准备一艘可以装的下大象的船接着我们将大象赶到船上然后乘坐另一艘小船在水位处划一条线再把大象从船上赶下来我们继续在同一条船上搬石头一块两块…直到船的水位下降到到我们之前划的线上然后我们准备一个称将船上的石头卸下来分批放到称上并且记录每一批石头的重量最后将所有数据全部相加这时候就可以计算出大象的重量了。2面向对象把大象赶到船上…在船上放上石头…在称上放石头…得到大象重量。通过这个故事我们知道了面向过程是把事情分成一步一步的然后按照步骤一步一步的做出来而面向对象是给对象相应的方法最后得出结果。以面向对象的方式来处理就不用关心过程了是通过对象之间的交互来完成的。二、类定义和使用1、认识类类是用来对一个实体进行描述的主要关注该实体具有哪些属性哪些功能描述完成以后计算机就可以识别出结果了。2、类的定义格式注意事项1、类名采用大驼峰定义2、成员前写法统一为public。3、定义一个学生类public class Student { // 成员变量 public String name; public int age; // 成员方法 public void Exam(){ } }三、类的实例化1、什么是实例化定义了一个类就相当于在计算机中定义了一种新的类型与int,double类似只不过int和double是Java语言自带的内置类型而类是用户自定义了一个新的类型比如上面定义的Student类。有了这些自定义类型之后就可以使用这些类来定义实例。用类类型创建对象的过程称为类的实例化在Java中采用new关键字配合类名来实例化对象。class Student { public String name; public int age; public void Exam(){ System.out.println(考试......); } } public class Test { public static void main(String[] args) { // 通过 new 实例化对象 Student student new Student(); student.name Tom; student.age 12; } }注意事项1new 关键字用于创建一个对象的实例 2使用 . 来访问对象中的属性和方法 3同一个类可以创建多个实例。2、类和对象的说明1类只是一个模型一样的东西用来对一个实体进行描述限定了有哪些成员2类是一种自定义的类型可以用来定义变量3一个类可以实例化出多个对象实例化出的对象占用实际的物理空间存储类成员变量。四、this引用1、为什么要有this引用在这里我们定义一个Date类来进行演示public class Date { public int year; public int month; public int day; // 设置日期 public void setDate(int y, int m, int d){ year y; month m; day d; } // 打印日期 public void printDate(){ System.out.println(year 年 month 月 day 日); } }这个时候我们该如何打印他们呢看下面代码运行结果如下但是如果我们不想这样一个一个进行赋值而是一次性的赋值该怎么办呢我们在上面的代码中已经定义了setDate所以我们可以调用setDate来进行赋值。代码如下运行结果如下通过以上的两种方法就可以进行赋值和打印了然而这跟this引用有什么关系呢我们继续往下学习。我们想想现在我们的setDate是这样的假如说我们把setDate改成下面这样在这个时候到底是谁给谁赋值到底设置的是哪个对象呢我们运行代码试试这是什么原因呢这是因为局部变量优先是形参自己给自己赋值了没有赋值到成员变量当中。在这个时候我们的this就派上用处了他可以让他赋值到成员变量当中。我们看下一部分2、什么是this引用我们将this加入到我们的setDate中我们将main方法中写成这样代码运行结果如下这个时候我们有问题了成员函数执行的时候他是怎么知到打印的是哪个对象设置的是哪个对象这就是this的作用我们认为this引用指向当前对象通俗来讲谁调用setDate谁就是当前对象。这时候我们就可以知道什么是this引用了this引用指向当前对象在成员方法中所有成员变量的操作都是通过该引用去访问。3、this引用的特性1this的类型对应类类型引用即哪个对象调用就是哪个对象的引用类型2this只能在“成员方法”中使用3在“成员方法”中this只能引用当前对象不能引用其他对象4this是“成员方法”第一个隐藏的参数编译器会自动传递在成员方法执行时编译器会负责将调用成员方法的引用传递给该成员方法this负责来接收。接下来我们把完整代码展示出来public class Date { public int year; public int month; public int day; // 设置日期 public void setDate(int year, int month, int day) { this.year year; this.month month; this.day day; } // 打印日期 public void printDate() { System.out.println(this.year 年 this.month 月 this.day 日); } public static void main(String[] args) { Date date new Date(); // 赋值 date.setDate(2024, 5, 24); // 打印 date.printDate(); Date date1 new Date(); date1.setDate(2023, 5, 24); date1.printDate(); } }五、对象的构造和初始化1、如何初始化对象我们来看下面这个代码运行结果如下这是因为没有初始化报错但是我们来看下面的代码运行一下我们发现每次对象创建好之后要调用setStudent才能设置具体姓名和年龄这是很麻烦的但是我们到底该如何初始化呢我们继续学习2、默认初始化我们同样来看下面的代码在这个代码中我们初始化了吗没有但是他会报错吗我们看运行结果没有这是为什么呢哇好多为什么那就让我们继续回答这一个一个的问题吧在这里就是因为发生了默认初始化所以才不会报错。我们看到的只是程序层面简单的一条语句但是在JVM层面就需要做好多事情下面简单介绍1检测对象对应的类是否加载了如果没有加载则加载2为对象分配内存空间3处理并发问题4初始化所分配的空间就是对象空间被申请好之后对象中包含的成员已经设置好了初始值比如在这里我们暂时知道这是默认初始化就好至于为什么我们可以后期学习。3、就地初始化就地初始化就是在声明成员变量时就直接给出了初始值。我们看代码这样运行会是什么结果呢我们运行试试这就是我们的就地初始化需要注意的是代码编译完成后编译器会将所有给初始化的这些语句添加到各个构造函数中。4、构造方法在我们学习了以上两种初始化方法我们再来学习另一种初始化方法叫做构造方法。1概念构造方法也称构造器是一个特殊的成员方法这个方法没有返回值名字必须与类名相同在创建对象时由编译器自动调用并且在整个对象的声明周期内只调用一次。现在问题来了我们该怎么调用该构造方法呢我们看下面的代码并且运行运行结果如下这是什么原因呢我们将main方法改成如下这样运行结果如下我们再来调用带两个参数的构造方法将main方法写为这样运行结果如下所以我们认为当构造方法调用完成之后对象实际上才产生了。其实我们还需要知道当没有提供任何构造方法的时候编译器会默认提供一个不带参数的构造方法但是当我们有构造方法提供的时候编译器就不会提供了。2特性1 名字必须与类名相同2 没有返回值类型设置为void也不行3 创建对象时由编译器自动调用并且在对象的生命周期内只调用一次4 构造方法可以重载5 如果用户没有显示定义编译器会生成一份默认的构造方法生成的默认构造方法一定是无参的。6 在构造方法中可以通过this调用其他构造方法来简化代码。运行结构如下我们还要注意一点this不能形成环。看下面代码7 绝大多数情况下使用public来修饰特殊场景下会被private修饰。好的JAVASE第一部分到此就结束了让我们期待下一篇吧