【JavaSE】类和对象详解(上)

欢迎关注个人主页:逸狼

创造不易,可以点点赞吗~

如有错误,欢迎指出~

目录

类和对象

类的组成

对类的理解

成员变量的访问和类方法的调用

this

抛出一个问题

this的作用

初始化成员变量

未初始化的成员变量

代码举例

就地初始化

构造方法初始化成员变量

认识构造方法

注意

快速生成构造方法

快速生成构造方法步骤图解

通过this简化构造方法

代码执行步骤图解

执行结果



类和对象

在Java中,一切皆是对象,类(类型)是描述一个对象的(在C语言中是结构体),对象是一个真正的实体。

目的是:面向对象编程(重点在对象)

类的组成

class为定义类的关键字,ClassName为类的名字(用大驼峰形式),{}中为类的主体。

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

注意:

  • 一般一个文件当中只定义一个类
  • main方法所在的类一般要使用public修饰(注意:Eclipse默认会在public修饰的类中找main方法)
  • public修饰的类必须要和文件名相同
  • 不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改

例如定义一个类

class Student{
    //成员变量
    public String name;
    public String sex;
    public int age;

    //方法
    public void doClass(){
        System.out.println("学java!");
    }
}

对类的理解

通过new关键字可以实例化多个对象,在 堆 上产生对象

  • 类只是一个模型一样的东西,用来对一个实体进行描述
  • 类是一种自定义的类型,可以用来定义变量.
  • 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量

类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东 西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间

成员变量的访问和类方法的调用

  • 利用.访问对象中的成员变量和调用类方法
  • 可以new多个实例化对象

如下创建一个洗衣机类,并访问成员变量和调用相关方法

class WashMachine{
    public String brand;
    public String color;
    public double weight;

    public void washClothes(){
        System.out.println("洗衣服!");
    }
    public void dryClothes(){
        System.out.println("脱水!");
    }
}

public class j3_30 {
    public static void main(String[] args) {
        WashMachine washMachine1=new WashMachine();//new一个实例化对象washMachine1
        washMachine1.brand="海尔";//利用.访问对象中的成员变量
        washMachine1.dryClothes();//利用.调用类方法
        System.out.println(washMachine1.brand);
        System.out.println("_________");
        WashMachine washMachine2=new WashMachine();//可以new多个实例化对象
        washMachine2.brand="美的";
        System.out.println(washMachine2.brand);
        washMachine2.dryClothes();
    }

结果

this

抛出一个问题

如下代码运行结果都是0,这是为什么呢?

public class Date {
    //这些变量属于对象
    public int year;
    public int month;
    public int day;
    //设置日期
    public void setDate(int year,int month,int day){
        year=year;//局部变量优先使用
        month=month;//在括号里面自己调用自己,修改的是局部变量,出了括号后,又变为了0
        day=day;
    }
    //打印日期
    public void printDate(){
        System.out.println(year+" 年 "+month+" 月 "+day+" 日 ");
    }

    public static void main(String[] args) {
        Date date=new Date();//new一个对象date
        date.setDate(2024,3,31);
        date.printDate();
        System.out.println("**********");
        Date date2=new Date();//new一个对象date
        date2.setDate(2024,3,30);
        date2.printDate();
    }
}

这里我们就要考虑变量在内存的存储了~

我们可以看到开头我们定义了3个变量(year,month,day),这里的3个变量是属于成员变量,存储在上; 上面代码设置日期的方法里的 定义了3个变量(year,month,day),是局部变量(形参),存储在方法栈上;出现上面的这种情况是因为:对象和局部变量同名时,优先使用局部。

上面局部变量的自我修改(自己修改自己),出了作用域后就又变为了0。

那应该怎样解决该问题呢?我们可以使用this解决

this的作用

我们可以在设置日期的方法里的局部变量前面加上this,用于表示当前对象的引用

public void setDate(int year,int month,int day){
        this.year=year;
        this.month=month;
        this.day=day;
    }

成功打印结果

this使用注意

  1. 在代码里面我们要习惯使用this,当出现可加可不加时,都加上
  2. this的类型:对应被调用的对象引用类型
  3. this只能在 成员方法中使用,只能引用当前对象

初始化成员变量

未初始化的成员变量

对于一个类的成员变量,在没有初始化前,每个成员变量都有一个默认值(引用类型是null,其余基本变量是对应的0值,boolean类型是false)

代码举例

就地初始化

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

public int year=2000;
public int month=1;
public int day=1;

构造方法初始化成员变量

认识构造方法

首先它是一个方法(返回值,方法名,参数列表{}),但又有区别,只有 方法名、参数列表{}、没有返回值 且 方法名和类名相同

 例如

public Date(int year, int month, int day){
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("学Java!");
   }

注意

  • 当我们没有写任何构造方法时,会默认存在一个(无参数的)
  • 只要存在任何一个构造方法,编译器就不会再提供了
  • 构造方法可以重载(参数不一样)

快速生成构造方法

通过编译器快速产生多个不同的构造方法,构成方法的重载

    public Date(int year, int month) {
        this.year = year;
        this.month = month;
    }

    public Date(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public Date(int month) {
        this.month = month;
    }

快速生成构造方法步骤图解

通过this简化构造方法

    public Date(){
        this(2024,3,31);//必须放在第一行
        System.out.println("22222222");
    }

    public Date(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("11111111");
    }

代码执行步骤图解

执行结果

注意:this的调用不能形成环

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值