本文介绍: Java是一门纯面向对象语言(,简称OOP),在面向对象的世界里,一切皆为对象面向对象解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序设计扩展以及维护都非常友好在java定义类时需要用到class关键字// 创建类field;// 字段(属性) 或者 成员变量method;// 行为 或者 成员方法class定义类的关键字ClassName为类的名字{}中为类的主体类中包含内容称为类的成员

目录

一. 面向对象的初步认知

1.1 什么是面向对象

1.2 面向对象与面向过程

二. 类定义和使用

2.1 简单认识类


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


 一. 面向对象的初步认知


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

面向过程

传统洗衣服过程

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

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

 面向对象:

现代洗衣服过程:

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

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

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

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


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

 例如:

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

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

// 创建class ClassName{ 
  field;    // 字段(属性) 或者 成员变量
  method;    // 行为 或者 成员方法
}

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

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

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 + "摇尾巴");
    }
}

注意事项

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

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

拿上处狗的例子来举例:

 

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

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

 

注意事项

类和对象的说明

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

 习题

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

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

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

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

解析:不行的 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);
  }
}

  

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


引用一个例子就明白了:

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();
    }
}

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


 原来:

 现在:形参名不小心与成员变量名相同

 再来看看打印结果

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

原因是

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

局部变量优先使用

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


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

 

 


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

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


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

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

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

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

 

 所以它们都有默认值

 在声明成员变量时,就直接给出了初始值。


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

 

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

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

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


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

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


假如只写了一个构造方法

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

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

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

明天更新 【Java SE】封装

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

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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注