当前位置:   article > 正文

【Java】类和对象详解!!!_对象和类怎么区分

对象和类怎么区分

目录

一、对象的定义及区分

1.什么是对象?

2.什么是面向对象?

3.什么是面向过程?

二、类的定义和使用

1.什么是类?

2.类的定义格式

3.类的实例化 

什么是类的实例化?

如何进行类的实例化?

 三、this引用的理解和使用

1.什么是this引用?

2.为什么要this引用?

3.如何this引用?

四、构造方法

1.什么是构造方法?

2.为什么要使用构造方法?

3.如何使用构造方法?

构造方法定义的格式 

与普通方法的区别

构造方法的使用

五、初始化

1.默认初始化

2.就地初始化


一、对象的定义及区分

1.什么是对象?

对象:真实存在的一个实体。在java中,一切事物皆为对象

2.什么是面向对象

面向对象:对象与对象之间相互协作来完成,注重的是对象

例如,用洗衣机洗衣服,人只要放入衣服-->倒入洗衣液-->选择模式,启动洗衣机

这个过程的主要是:人、衣服、洗衣液、洗衣机四个对象相互协作完成就好。注重的是对象之间的相互协作。

3.什么是面向过程

 面向过程:注重的是过程

例如,我们自己洗衣服,

放衣服到盆里,装水-->将衣服浸湿,使用洗衣服,揉搓>放入水中-->拧干-->放入水中-->拧干

这个过程我们注重的是过程

二、类的定义和使用

1.什么是类?

类:对一个对象的描述。描述对象的属性(尺寸,颜色、型号)和功能。

比如:一瓶水

属性:什么颜色、多少毫升,什么品牌......

功能:解渴......

2.类的定义格式

  1. class ClassName{
  2. field;//字段(属性)或成员变量;
  3. method;//行为或成员方法;
  4. }

  class为定义类的关键字,ClassName为类的名字,{}为类的主体

属性是用来描述类的(颜色、尺寸、容量);

方法用来描述功能的;

  1. class Paper{
  2. //属性
  3. public String brand;
  4. public String type;
  5. public double length;
  6. public double width;
  7. public double weight;
  8. public String color;
  9. //方法
  10. public void wipeMouth(){
  11. System.out.println("擦嘴");
  12. }
  13. public void wipeHands(){
  14. System.out.println("擦手");
  15. }
  16. }
  • 成员属性或变量,在方法外 

  • 类的名称采用大驼峰的形式,方法的采用小驼峰的形式;
  • 成员前统一为public,成员方法同样;
  • 一般一个文件定义一个类;
  • public修饰的类要与文件同名,不要修改;

  •  无pubic修饰的类不要放在有public修饰的类当中

错误示范:

正确示范: 

3.类的实例化 

什么是类的实例化?

类的实例化:由类生成对象的过程叫做类的实例化

如何进行类的实例化?
  1. class Dog{
  2. public String color;
  3. public int age;
  4. public String name;
  5. public void barks(){
  6. System.out.println(name+"会汪汪叫~");
  7. }
  8. }
  9. public class Test2 {
  10. public static void main(String[] args) {
  11. Dog dog=new Dog();
  12. dog.age=2;
  13. dog.name="小白";
  14. dog.color="white";
  15. dog.barks();
  16. Dog dog1=new Dog();
  17. dog1.age=3;
  18. dog1.name="小黑";
  19. dog1.color="black";
  20. dog1.barks();
  21. }
  22. }
  • 通过new来创建对象的实例,其格式是:类名 对象名=new 类名();
  •  通过 对象名.属性或方法 来访问对象的属性或者的、方法;
  • 同一个类可以创建多个不同的实例化对象,可以理解为狗这个种类,里面有个各种各样不同的个体。

 三、this引用的理解和使用

1.什么是this引用?

this引用:指当前对象(成员方法运行时,调用该成员方法的对象),在成员中,所有成员的变量操作,都是通过该引用的问题

2.为什么要this引用?

下面我写了一个关于日期的

  1. class Date{
  2. public int year;
  3. public int month;
  4. public int day;
  5. public void setDate(int year,int month,int day){
  6. year=year;
  7. month=month;
  8. day=day;
  9. }
  10. public void printDate(){
  11. System.out.println(year+"."+month+"."+day);
  12. }
  13. }
  14. public class Test3 {
  15. public static void main(String[] args) {
  16. Date d1=new Date();
  17. Date d2=new Date();
  18. Date d3=new Date();
  19. d1.setDate(2024,1,1);
  20. d2.setDate(2024,2,2);
  21. d3.setDate(2024,3,3);
  22. d1.printDate();
  23. d2.printDate();
  24. d3.printDate();
  25. }
  26. }

1.从上面代码中,我们可以发现,在定义成员方法时,有一个成员的方法的形参和实参是一样的

在这种情况下,他是表示形参的值给形参,实参给实参还是我们想要的实参的值给形参?

我们来查看一下结果:

为什么会是以上的结果?

我们可以知道成员变量或方法会有一个默认值

遵循的规则:如果是引用变量类型,默认值为null;

                      如果是基础数据类型,默认值为0;

也就是说他是形参自己赋值给自己的结果,遵守的是局部变量优先的原则 

2.现在我将代码进行局部修改一下

 变成这样,好了,这样好像看起来没有任何的问题

  1. class Date{
  2. public int year;
  3. public int month;
  4. public int day;
  5. public void setDate(int y,int m,int d){
  6. year=y;
  7. month=m;
  8. day=d;
  9. }
  10. public void printDate(){
  11. System.out.println(year+"."+month+"."+day);
  12. }
  13. }
  14. public class Test3 {
  15. public static void main(String[] args) {
  16. Date d1=new Date();
  17. Date d2=new Date();
  18. Date d3=new Date();
  19. d1.setDate(2024,1,1);
  20. d2.setDate(2024,2,2);
  21. d3.setDate(2024,3,3);
  22. d1.printDate();
  23. d2.printDate();
  24. d3.printDate();
  25. }
  26. }

我们查看结果,结果好像也并没有毛病: 

咦,但是仔细想想发现,setDate如何知道自己要设置哪个对象和printDate是如何知道自己要打印哪个对象的呢,他们到底是如何判断自己的当前对象的呢?

那么我们接下来可以使用this引用来解决这些问题

3.如何this引用?

this引用成员方法中的成员对象

现在通过this引用将代码修改一下

  1. class Date{
  2. public int year;
  3. public int month;
  4. public int day;
  5. public void setDate(int year,int month,int day){
  6. this.year=year;
  7. this.month=month;
  8. this.day=day;
  9. }
  10. public void printDate(){
  11. System.out.println(this.year+"."+this.month+"."+this.day);
  12. }
  13. }
  14. public class Test3 {
  15. public static void main(String[] args) {
  16. Date d1=new Date();
  17. Date d2=new Date();
  18. Date d3=new Date();
  19. d1.setDate(2024,1,1);
  20. d2.setDate(2024,2,2);
  21. d3.setDate(2024,3,3);
  22. d1.printDate();
  23. d2.printDate();
  24. d3.printDate();
  25. }
  26. }

其结果如下:

 我们通过调试可以发现,this引用可以更好的指向当前的对象

  • this引用的是成员方法成员的对象 ,所以this引用只能在成员方法中;
  • this的类型:this调用那个对象,他的类型就与他当前所调用的对象类型相对应;
  • this只能引用当前对象,不能在引用其他对象;
  • 方法中形参与实参使用的变量不一样,其结果与使用this引用相同,也可以不使用this引用,但建议使用this引用。
  • this的用法有三种:

1.可以通过this访问当前对象的成员方法中的成员变量

2.可以通过this访问当前对象的非静态成员方法,不可以访问非静态成员方法。

如何区分静态和非静态成员方法?

看有无static,如果有static,那么就是静态成员方法;无static,就是非静态成员方法

3.可以通过this访问当前对象的其他构造方法。

那么什么是构造方法?接下来会解释。 

四、构造方法

1.什么是构造方法?

构造方法:也称为构造器,是一种特殊的成员方法 。名字与类名必须相同,在创建对象时,由编译器自动调用,并且整个对象的生命周期只有一次。

2.为什么要使用构造方法?

我们知道在java类内部定义一个局部变量,要进行初始化。

而成员变量变量或方法会有自己的默认值。那我每实例化一个对象,就要进行初始化,我们应该怎么进行初始化?

所以我们就要用到构造方法,构造方法的作用就是初始化对象当中的成员 

3.如何使用构造方法?

构造方法定义的格式 

修饰符 方法名称(参数类型形参){

           方法体代码;

}

与普通方法的区别

普通方法的定义格式

修饰符 返回值类型 方法名称(参数类型形参){

            方法体代码;

            return 返回值(如果是void的类型,不用return);

 区别

  • 构造方法他是不用返回值类型的,void也是不行的;
  • 构造方法的方法名称要与他的类的名称相同;
构造方法的使用
  1. class Date{
  2. public int year;
  3. public int month;
  4. public int day;
  5. public Date(int year, int month, int day){
  6. this.year=year;
  7. this.month=month;
  8. this.day=day;
  9. System.out.println("调用三个参数");
  10. }
  11. public void setDate(int year, int month, int day){
  12. this.year=year;
  13. this.month=month;
  14. this.day=day;
  15. }
  16. public void printDate(){
  17. System.out.println(this.year+"."+this.month+"."+this.day);
  18. }
  19. }
  20. public class Test_0715 {
  21. public static void main1(String[] args) {
  22. int a=1;
  23. System.out.println(a);
  24. }
  25. public static void main(String[] args) {
  26. Date d1=new Date(2024,3,4);
  27. d1.setDate(2024,1,1);
  28. d1.printDate();
  29. }
  30. }

  •  他的修饰符使用public,而如果是普通方法的话,我们现阶段使用的是public static;
  • 创建对象是由编译器自动调动,并且对象的生命周期只有一次;

 由图中可以发现:

  • 构造方法是可以重载的,使用那个构造方法,与实例化对象的参数有关,他会选择合适的构造方法;
  • 当你没有构造方法时,系统会给你一个默认不带参数的构造方法,如果你有了构造方法,他将不会给你默认不带参数的构造方法;

  • 可以通过this()调用其他构造方法,当不要形成环,两个构造方法相互调用;  
  • this调用当前对象的其他构造方法的时候一定要放在第一排。 

除了默认初始化,我们还可以就地初始化;

五、初始化

1.默认初始化

默认初始化:在声明成员变量中,没有赋值的时候,编译器会默认给成员变量一个值。

  • 默认初始化化,只有在类中的成员变量有,成员方法中的成员变量中也没有默认初始化 

2.就地初始化

就地初始化:在成员变量声明或成员方法中,直接初始化 。

  1. class Cat{
  2. public String name="小白";
  3. public int age=1;
  4. public void mew(){
  5. System.out.println(name+"喵喵叫~");
  6. }
  7. }
  8. public class Test2 {
  9. public static void main(String[] args) {
  10. Cat cat=new Cat();
  11. cat.mew();
  12. }
  13. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/1011132
推荐阅读
相关标签
  

闽ICP备14008679号