Java019——类和对象

在Java中一切皆对象

一、什么是对象?

一个人、一只猫、一条狗…这些就是一个对象;
每个对象都有属性(名词)和行为(动作)。

二、什么是类?

类即同类别,例如:不论男人、女人、黑人、白人…,都是人类,即同一类事务的统称。

三、类的组成(类长什么样?)

1、Java程序的基本组成单元是类
2、类中包含属性方法两部分
在这里插入图片描述
实例1:下面定义了一个Human类,
1、有name属性和heart 属性(其中heart 是静态成员变量)、
2、getName()方法和setName(String name)方法、静态方法(类方法) hello()

class Human {
    String name = "二毛";;			//name属性(实例成员变量) 
    static int heart = 1;			//使用static定义静态成员变量heart
    
    String getName() {				//getName()方法
        return name;
    }

    void setName(String name) {		//setName(String name)方法
        this.name = name;
    }
	
	static void hello(){			//静态方法(类方法) hello()
		System.out.println("静态方法(类方法)hello");
	}
	
	Human() {
		System.out.println("构造方法Human");
	}
}

四、对象的创建和使用(对象长什么样?)

4.1、对象的创建

其实对象也是变量,只是对象这个变量的数据类型是一个确切的类
对象的创建叫实例化类的对象

class Human {
    String name = "二毛";
    static int heart = 1;
    String getName() {
        return name;
    }

    void setName(String name) {
        this.name = name;
    }

	/*main方法*/
    public static void main(String[] args){
        // 下面的语句将创建一个Human对象叫human
        Human human = new Human();
    }
}

从上面可以看出,对象的创建格式为:

类名 对象名 = new 类名();//调用无参构造函数创建对象(方式一)

4.2、对象的使用(访问实例变量和方法)

通过对象只能访问到实例变量和方法

对象访问实例变量和方法的格式:

对象名.实例变量

对象名.方法名(参数)

class Human {
    String name = "二毛";		//name属性(实例成员变量)
    static int heart = 1;		//使用static定义静态成员变量heart
    
    String getName() {			//getName()方法
        System.out.println(name);
        return name;
    }

	/*mian方法*/
    public static void main(String[] args){
        // 下面的语句将创建一个Human对象叫human
        /*对象的创建其实分为两步
			1、声明:声明一个对象,包括对象名称和对象类型。
			2、实例化+初始化:使用关键字 new 来创建一个对象。使用 new 创建对象时,会调用构造方法初始化对象。
		*/
        Human human = new Human();

        System.out.println(human.name);//访问实例变量和方法
        human.getName();//访问方法
    }
}

//运行结果
二毛
二毛

五、构造方法

5.1、创建对象的补充说明

对象的创建其实分为两步:1、声明,2、实例化+初始化

class Human {
    String name = "二毛";		
    static int heart = 1;		
    
    String getName() {			
        System.out.println(name);
        return name;
    }

	/*mian方法*/
    public static void main(String[] args){
        // 下面的语句将创建一个Human对象叫human
        /*对象的创建其实分为两步
			1、声明:声明一个对象,包括对象名称和对象类型。
			2、实例化+初始化:使用关键字 new 来创建一个对象。使用 new 创建对象时,会调用构造方法初始化对象。
		*/
        Human human = new Human();

        System.out.println(human.name);
        human.getName();
    }
}

//运行结果
二毛
二毛

5.2、什么是构造方法?

上面代码注释中提到了构造方法,下面来说明一下什么是构造方法

1、构造方法,顾名思义还是方法,只是构造方法的名称必须与类名称一样,也就是方法名和类名一样的方法就是构造方法

//示例
class Human {
	Human(){//无参构造

    }
    Human(String name){//有参构造
        System.out.println(name );
    }
}

说明:
1、构造方法的名称必须与类名称一样。
2、一个类可以有多个构造方法。
3、构造方法分为有参构造和无参构造。
4、对象的创建就是通过构造方法完成的。
5、构造方法没有返回值,也不能用void修饰

对于第4点说明,有人就有疑惑了,在上面创建对象的例子中,Human类中根本就没有看到构造方法,怎么又说对象的创建就是通过构造方法完成的呢?

其实,在你定义一个类的时候Java就自动给你添加了一个隐藏的无参构造方法,也就是这样

//示例
class Human {
	Human(){//无参构造

    }
}

只不过这个无参构造没有向我们这样显式的写出来,它是隐藏起来的,也就是这样

//示例
class Human {
	/*Human(){//无参构造

    }*/
}

当我们使用new关键字创建对象的时候就会调用相应的构造方法(无参构造或有参构造)

前面Human human = new Human();使用的是默认的无参构造方法创建对象。你也可以定义有参构造来创建对象

class Human {
    String name = "二毛";

    Human(){//无参构造

    }
    Human(String name){//有参构造
        this.name = name;
        System.out.println(name );
    }

    public static void main(String[] args){
        // 下面的语句使用有参构造创建一个Human对象叫human,并初始化humen对象的name等于“三毛”
        Human human = new Human("三毛");

        System.out.println(human.name);
    }
}

//运行结果
三毛
三毛

所以,对象的另一种创建格式为:

类名 对象名 = new 类名(参数);//调用有参构造函数创建对象(方式二)

六 、static关键字&静态变量和静态方法

在类中被static修饰的变量称为静态变量(类变量),被static修饰的方法称为静态方法

6.1、静态变量

class Human {
    String name = "二毛";;			//name属性(实例成员变量)
    static int heart = 1;			//使用static定义静态成员变量heart,也叫类变量
}

实例变量和静态成员变量的区别
一、实例变量
1、只能被对象访问
2、不同对象之间不共享数据值

二、静态成员变量
1、可以被对象访问(格式:对象名.静态变量名),也可以用类名词访问(格式:类名.静态变量名)
2、不同对象之间共享数据值

6.2、静态方法

class Human {
    int method1(int num){
		System.out.println("这是一个实例方法");
		return 1+num;
	}
	
	//静态方法
	static int method2(int num){
		System.out.println("这是一个静态方法");
		return 1+num;
	}
}

实例方法与静态方法【类方法】的区别
一、实例变量
1、实例方法只能对象访问,
2、实例方法只在方法调用时分配运行空间,

二、静态方法【类方法】
1、 静态方法【类方法】 可以通过对象访问(格式:对象名.静态变量名),也可以通过类名访问(格式:类名.静态变量名)
2、静态方法【类方法】在方法调用前已经分配好运行空间。
3、静态方法不可以使用this关键字
4、静态方法不可以直接调用非静态方法,但是可以调用其他静态方法

七、this 关键字

在上面的对象的创建和使用中的setName()方法中,使用了一个关键字this,如下:

class Human {
    String name = "二毛";
    static int heart = 1;
    String getName() {
        return name;
    }

    void setName(String name) {
        this.name = name;
    }

	/*main方法*/
    public static void main(String[] args){
        // 下面的语句将创建一个Human对象叫human
        Human human = new Human();
    }
}

现在说明一下this代表什么?

this英文意思位“这”,在Java中表示当前调用类中属性或方法的对象,例如上面例子中的this就代表对象human。
实际上this代表当前对象的引用

class Human {
    String name = "二毛";
    static int heart = 1;
    String getName() {
        return name;
    }

    void setName(String name) {
        this.name = name;
    }

	/*main方法*/
    public static void main(String[] args){
        // 下面的语句将创建一个Human对象叫human
        Human human1 = new Human();
		Human human2 = new Human();
		
		human1.setName("小红");//此时this代表的是human1的引用
		human2.setName("小明");//此时this代表的是human2的引用
    }
}

即哪个对象去操作类,这时的this就代表该对象,或者说是该对象的引用。

八、对象的引用

在 Java 语言中,尽管一切都可以看作对象,但真正的操作标识符实质上是一个引用,那么引用在Java 中是如何体现的呢? 语法如下:

类名 对象的引用变量

例如,一个 People 类的引用可以使用以下代码:

People tom;

通常一个引用不一定需要有一个对象相关联。引用与对象相关联的语法如下:

People tom = new People();

在上述代码中,各个单词的含义下图 所示:
在这里插入图片描述

  1. 实际上真正的对象是“new People()”这段代码。
  2. 实际上,tom 只是一段内存地址,用于标记“new People()”对象在内存中的位置。因为内存地址又长又乱,很难让人记住,所以 Java 语言利用引用变量帮开发者标记内存地址
  3. “new People0”对象能做的事,tom 也能做。例如下面这行代码:
new People().getClass();
等价于:
People tom = new People();
tom.getClass();

九、Java垃圾回收机制

Java中的垃圾回收机制(Garbage Collection)负责自动回收不再使用的内存,使程序员可以专注于业务逻辑而不必手动释放内存。以下是一些Java垃圾回收机制实际使用的示例:

  1. 对象的销毁:当一个对象在程序中不再被引用时,垃圾回收机制会自动回收它所占用的内存空间。例如,创建了一个对象后,如果没有任何变量引用它,那么垃圾回收机制将自动回收该对象的内存。

    public static void main(String[] args) {
        // 创建一个对象
        MyClass obj = new MyClass();
        
        // 将对象置为null,不再有引用指向它
        obj = null;
        
        // 在适当的时间,垃圾回收机制将回收obj对象的内存
    }
    
  2. 手动调用System.gc():在某些情况下,我们可能希望尽快触发垃圾回收机制来回收不再使用的内存。我们可以使用System.gc()方法来建议垃圾回收机制运行。请注意,这只是一个建议,具体的回收时间取决于垃圾回收器的工作情况。

    public static void main(String[] args) {
        // 创建一些对象并使用它们
        // ...
        
        // 调用System.gc()建议垃圾回收机制运行
        System.gc();
        
        // 在适当的时间,垃圾回收机制将回收不再使用的内存
    }
    

这些示例展示了Java垃圾回收机制的使用。通过自动回收不再使用的内存,垃圾回收机制有效地管理内存,提高应用程序的性能和稳定性。

与君共享

👉👉👉👉👉最后,有兴趣的小伙伴可以点击下面链接,这里有我整理的完整Java学习博客内容,谢谢~ 🌹🌹🌹🌹🌹

《Java基础专栏完整学习》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值