Java(类与对象)(1)

1.面向对象的初步认识

1.1什么是面向对象

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

1.2面向对象与面向过程

面向过程:例如做饭,你需要考虑什么时候生火,添油加醋

面向对象:把大象放进冰箱,打开冰箱,把大象塞进冰箱,关上冰箱

面向过程需要一步一步参与,而面向对象则是对象和对象的合作

2.类定义与使用

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

2.1 类的定义格式

语法

创建类

class 类名(定义的时候使用大驼峰 形如Test){

          字段//属性或成员变量

          行为 或者 成员方法

}

一般建议一个Java文件一个类

现在我们知道了什么是类,那么要怎么去使用呢?

3.类的实例化

3.1 什么是实例化

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

Dog dog = new Dog();

可以理解为栈内存保存了堆内存的地址,也就是对象的名字

堆内存保存了对象的属性内容,需要用new来开辟空间

3.2 类和对象的说明

public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog();
        System.out.println(dog.name);
        System.out.println(dog.age);
        System.out.println(dog.color);
        dog.bark();
        dog.eat();
    }
}

我们尝试运行一下

我们可以看到在没给对象赋值之前也可以使用,只是为空值

在测试类里给它赋值

结果是这样的

结论:通过对象的引用,可以去访问成员变量也可以去访问成员方法。

3.3 成员变量与全局/局部变量的区别

成员变量在使用时可以不用初始化,但是全局/局部变量在使用时需要初始化

4.this引用

4.1 this的用法

1.访问当前对象的成员变量

2.访问当前对象的成员方法

3.访问当前对象的其他构造方法

4.2 this引用的特性

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

这边再写一个测试类和一个日期类 

public class Test {
    public static void main(String[] args) {
        Data date = new Data();
        Data date1 = new Data();
        Data date2 = new Data();
        date.SetDate(2024,5,15);
        date1.SetDate(2005,2,5);
        date2.SetDate(2006,3,4);

        date.PrintDate();
        date1.PrintDate();
        date2.PrintDate();
    }
}
public class Data {
    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 void SetDate(int year,int month,int day){
        year = year;
        month = month;
        day = day;
    }

运行结果

那么我们可以提出两个问题

1.既然方法一样,那么怎么判断哪个对象调用了呢?

2.形参名和成员变量名一样为什么会是空值?

第一个问题:方法一样通过传入的形参不同来判断

第二个问题:由于此时存在局部变量,局部变量优先使用

那么要怎么解决第二个问题呢?

答案是加this关键字

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

加入this关键字之后就解决了第二个问题

this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法 对象的引用传递给该成员方法,this负责来接收

这个地方写或者不写都是没有关系的

5.对象的构造及初始化

5.1构造方法的介绍

刚才在this中提到了构造方法,那么什么是构造方法呢?

我们先来了解一下构造方法的特点

构造方法: 

名字与类名相同,没有返回值类型,设置为void也不行  

一般情况下使用public修饰  

在创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次

简单来说构造方法就是用来初始化对象中的成员

例如:

public Data(){
        this.year = 1998;
        this.month = 2;
        this.day = 5;
    }

而当你没有写任何构造方法时,Java会自己给你提供一个不带参数的构造方法,也就是上文不给参数默认空值的原因。

一旦用户定义则不会再生成

以上是不带参数的构造方法

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

在初始化对象的时候就可以给值

需要注意的是:构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间

5.2介绍一个快捷创建构造方法的方式

右键空白处

按住ctrl的同时选中

就可以创建构造方法了

5.3this在构造方法里的作用

刚才说到this可以访问当前对象的其他构造方法

public Data() {
        this(9999,2,5);
    }

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

此处可以在无参构造方法中通过this调用带有三个参数的构造方法

注意的是this必须为构造方法的第一句

5.4默认初始化

初始化就是new一个对象

在程序层面只是简单的一条语句,在JVM层面需要做好多事情,下面简单介绍下:

1. 检测对象对应的类是否加载了,如果没有加载则加载

2. 为对象分配内存空间

3. 处理并发安全问题 比如:多个线程同时申请对象,JVM要保证给对象分配的空间不冲突

 4. 初始化所分配的空间:

初始化好了会赋予初始值,例如:

5. 设置对象头信息(关于对象内存模型后面会介绍) 

6. 调用构造方法,给对象中各个成员赋值

5.5就地初始化

在创建成员变量的时候就给他初始值

注意:代码编译完成后,编译器会将所有给成员初始化的这些语句添加到各个构造函数中

  • 41
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值