【Java SE】类和对象(上)

目录

一. 面向对象的初步认知

1.1 什么是面向对象

1.2 面向对象与面向过程

二. 类定义和使用

2.1 简单认识类

 2.2 类的定义格式

三. 类的实例化 

3.1 什么是实例化 

3.2 实例化对象 

四. this引用(重点)

 4.1 为什么要有this引用

 4.2 this的使用

4.3 this引用的特性

五.对象的构造及初始化 

5.1 默认初始化

5.2 就地初始化

​编辑

5.3 构造方法(重点)

总结:  


本篇文章为JavaSE中的重点内容 希望大家好好看看

【Java SE】类和对象(上)_第1张图片


 一. 面向对象的初步认知

1.1 什么是面向对象

  • Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象
  • 面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。
  • 用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好

1.2 面向对象与面向过程

举例说明面向对象与面向过程的区别:

面向过程:

传统洗衣服过程

【Java SE】类和对象(上)_第2张图片

传统的方式:注重的是洗衣服的过程,少了一个环节可能都不行。 这就是面向过程 

C语言就是面向过程的语言

 面向对象:

现代洗衣服过程:

整个洗衣服过程:人把衣服放进洗衣机,倒入洗衣粉到洗衣机,启动洗衣机。衣服便总动洗好

总共分为四步,整个过程都是由这四个对象交互完成,不需要管它如何实现洗衣服这些过程,更注重结果

总共四个对象:人,衣服,洗衣机,洗衣服

面向对象方式来进行处理,就不关注洗衣服的过程,具体洗衣机是怎么来洗衣服,如何来甩干的,用户不用去关心,只需要将衣服放进洗衣机,倒入洗衣粉,启动开关即可,通过对象之间的交互来完成的。
注意:面向过程和面相对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。


二. 类定义和使用

2.1 简单认识类

类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成后计算机就可以识别了。

 例如:

比如:洗衣机,它是一个品牌,在Java中可以将其看成是一个类别。
属性:产品品牌,型号,产品重量,外观尺寸,颜色...
功能:洗衣,烘干、定时....

 2.2 类的定义格式

在java中定义类时需要用到class关键字
 

// 创建类
class ClassName{ 
  field;    // 字段(属性) 或者 成员变量
  method;    // 行为 或者 成员方法
}
  • class为定义类的关键字
  • ClassName为类的名字
  • {}中为类的主体

类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类具有哪些功能,称为类的成员方法。

例如刚才的洗衣机我们可以给它描述:

class WashMachine{
  public String brand;  // 品牌
  public String type;   // 型号
  public double weight;  // 重量
  public double length;  // 长
  public double width;  // 宽
  public double height;  // 高
  public String color;  // 颜色
 
  public void washClothes(){  // 洗衣服
    System.out.println("洗衣功能");
 }
 
  public void dryClothes(){   // 脱水
    System.out.println("脱水功能");
 }
 
  public void setTime(){    // 定时
    System.out.println("定时功能");
 }
}

再定义一个狗类:

class Dog {
    public String name;
    public String color;
    public int age;

    public void eat() {
        System.out.println(name + "吃东西");
    }
    
    public void wag() {
        System.out.println(name + "摇尾巴");
    }
}

注意事项:

  • 类名注意采用大驼峰定义
  • 成员前写法统一为public
  • 此处写的方法不带 static 关键字
  • 一般一个文件当中只定义一个类
  • public修饰的类必须要和文件名相同
  • public修饰的类必须要和文件名相同

三. 类的实例化 

3.1 什么是实例化 

定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似 ,只不过int和double是java语言自带的内置类型,而类是用户自定义了一个新的类型;

用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。

3.2 实例化对象 

拿上处狗的例子来举例:

 【Java SE】类和对象(上)_第3张图片

这样我们就通过new 来创建了一个dog对象,并且对它可以实例化对象

【Java SE】类和对象(上)_第4张图片

通过. 可以通过类对象访问到它里面的对象 ,并且可以对它初始化

 【Java SE】类和对象(上)_第5张图片

注意事项:

  • new 关键字用于创建一个对象的实例.
  • 使用 . 来访问对象中的属性和方法.
  • 同一个类可以创建对个实例

类和对象的说明:

1. 类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员.
2. 类是一种自定义的类型,可以用来定义变量.
3. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
4. 做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间 

 习题:

1.引用可以指向-引用吗?

【Java SE】类和对象(上)_第6张图片

解析:不能。引用只能指向对象

只能这样说,dog2指向了dog1所指向的对象

2.一个引用 能不能同时指向 多个对象吗?

【Java SE】类和对象(上)_第7张图片

解析:不行的 dog1这个引用,只能存储一个对象 

3.dog1指向了null对象?

解析:错误 ,dog1不指向任何对象 

实现俩个数字的交换(重点)

class myValue1 {
    public int val;
}
class myValue2 {
    public int val;
}

public class Test {
    public static void swap(myValue1 val1,myValue2 val2) {
        int tmp = val1.val;
        val1.val = val2.val;;
        val2.val = tmp;
    }
    public static void main(String[] args) {
        myValue1 val1 = new myValue1();
        val1.val = 10;
        myValue2 val2 = new myValue2();
        val2.val = 20;
        System.out.println("交换前");
        System.out.println(val1.val);
        System.out.println(val2.val);
        swap(val1,val2);
        System.out.println("交换后");
        System.out.println(val1.val);
        System.out.println(val2.val);
  }
}

【Java SE】类和对象(上)_第8张图片  

注意基本类型一定不能进行交换,一定要通过引用访问它们中的对象,从地址上改变了它们的对象


四. this引用(重点)

 4.1 为什么要有this引用

引用一个例子就明白了:

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 + "日 ");
    }
    public static void main(String[] args) {
        Date date = new Date();
        date.setDate(2023,11,11);
        date.printDate();
    }
}

这里是成功打印出来了,而现在我稍作一点改变 ,就会发生错误


 原来:【Java SE】类和对象(上)_第9张图片

 现在:形参名不小心与成员变量名相同【Java SE】类和对象(上)_第10张图片

 再来看看打印结果

只是修改了变量名字,为什么就打印不出来

原因是

这里都使用了局部变量,并没有赋值到

局部变量优先使用

接下来就可以使用this 这个方法


 4.2 this的使用

 this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

 【Java SE】类和对象(上)_第11张图片

 【Java SE】类和对象(上)_第12张图片


即使写了很多个,系统都可以自动识别出 :

【Java SE】类和对象(上)_第13张图片

this引用的是调用成员方法的对象。


4.3 this引用的特性

  1.  this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
  2.  this只能在"成员方法"中使用
  3.  在"成员方法"中,this只能引用当前对象,不能再引用其他对象
  4.  this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收

五.对象的构造及初始化 

5.1 默认初始化

为什么局部变量在使用时必须要初始化,而成员变量可以不用呢?

在程序层面只是简单的一条语句,在JVM层面需要做好多事情,下面简单介绍下:
1. 检测对象对应的类是否加载了,如果没有加载则加载
2. 为对象分配内存空间
3. 处理并发安全问题
比如:多个线程同时申请对象,JVM要保证给对象分配的空间不冲突

4. 初始化所分配的空间
即:对象空间被申请好之后,对象中包含的成员已经设置好了初始值

 【Java SE】类和对象(上)_第14张图片

【Java SE】类和对象(上)_第15张图片

 所以它们都有默认值

5.2 就地初始化

 在声明成员变量时,就直接给出了初始值。【Java SE】类和对象(上)_第16张图片

【Java SE】类和对象(上)_第17张图片


5.3 构造方法(重点)

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

【Java SE】类和对象(上)_第18张图片

 【Java SE】类和对象(上)_第19张图片

构造方法的调用 是在实例化对象的时候

之前没有构造的方法,也会被执行,只不过是不带任何参数的

构造方法至少有一个,Java会自带一个不带任何参数的


【Java SE】类和对象(上)_第20张图片

【Java SE】类和对象(上)_第21张图片

名字相同,参数列表不同,因此构成了方法重载。 

这里就可以对成员变量进行初始化


假如只写了一个构造方法:

【Java SE】类和对象(上)_第22张图片

假如你创建了一个带参数的构造方法,但这里却调用不带参数的构造方法,就会报错,因为必须使用你创建了那个构造方法,如果没写构造方法,才可以写不带参数的。 

 这里由一个编写构造方法的快捷方法,就不用一个一个输入:

【Java SE】类和对象(上)_第23张图片【Java SE】类和对象(上)_第24张图片

【Java SE】类和对象(上)_第25张图片

或者直接用快捷键alt+insert 想创建几个就可以创建几个

总结:  

明天更新 【Java SE】封装

如有不足之处欢迎补充交流

看到这里的友友们,支持一下博主,来个免费三连,感谢! ! !

你可能感兴趣的:(JavaSE,java,开发语言,类和对象)