Java 类和对象

本文介绍了Java中的类和对象概念,包括对象的作用、类的定义、实例化过程,以及构造方法和对象初始化,特别是this关键字的使用。通过实例演示了如何定义和使用Student类,以及就地初始化的重要性。
摘要由CSDN通过智能技术生成


前言

最近刚开始学习Java 如有错误请多指正!


一、类和对象?

在讲类之前我们先理解一下什么是对象

1.对象?

在面向对象的语言中,我们需要依靠对象来完成某一件事

在Java中 “你我皆是对象”

拿洗衣服举个例:
面向过程(注重每一步过程):

  1. 拿盆
  2. 放水
  3. 放衣服
  4. 放洗衣粉
  5. 换水
  6. 放洗衣粉
  7. 拧干
  8. 晾衣服

面向对象(注重是谁在干什么):

  1. 衣服洗衣机
  2. 洗衣粉
  3. 启动洗衣机
  4. 洗衣机洗完并甩干

整个洗衣服过程中就四个对象在交互,我们不用关心洗衣机是怎么运转之类的麻烦玩意儿

2.类?

类(Class)是一种抽象的概念,可以把它想象成对象的模板,里面定义了对象的属性(数据)和方法(行为)

当某个类被实例化后,他就成对象了~


二、类的定义和使用

1.定义

在Java中我们定义一个类,需要用 “class” 关键字

class Student{				//学生类(模板)
	public String name;		//学生姓名
	public int age;			//学生年龄
	public String gender;	//学生性别

	public void study(){	//学习方法
	System.out.println(name + "正在学习");
	}
}

我们定义了一个 Student 学生类,他包括了学生的姓名、年龄、性别
还有一个 学习方法

小知识:

  1. 类名一般用大驼峰定义(每个单词首字母大写)
  2. 这里public是一种访问权限修饰符,public是公开属性(谁都可以用),后面会出一篇文章来讲解~(咕咕咕)
  3. 类也是一种自定义数据类型!(和int,double差不多,只不过int之类的都是内置类型,而我们定义的是一个新的类型)

2.实例化

我们在上面定义了一个Student类,但是我们只有”模板“,没有学生啊,总不能让模板上课学习吧~
所以我们就用到了实例化

在Java中,实例化对象用 “new” 关键字

通过" . "(点操作符)来访问对象中的属性和方法,它是一个运算符

同一个类可以创建一堆对象,每个对象都会占用实际的物理空间来存储(就像是一个不会坏掉的冰棍模具,可以弄出来无数根冰棍,但是你仓库塞不下这么多,那就没办法了)

class Student{				//学生类(模板)
	public String name;		//学生姓名
	public int age;			//学生年龄
	public String gender;	//学生性别

	public void study(){	
	System.out.println(name + "正在学习");
	}						//学习方法

	public void show(){		
	System.out.println(name + age + gender);
	}						//显示属性方法
}
	// ↑ 这一块是咱在上面定义的Student类 ↑
	
public class Test{			
	//简单来说,这里的 Test 是我的文件名,是一个公开的类	
	
	public static void main(String[] args){
	//这里的 main 就是和 C语言 一样的,程序的主入口

	Student student1 = new Student();
	Student student2 = new Student();
	//这里实例化了两个学生,一个叫student1 另一个叫student2
	
	student1.name = "张三";
	student1.age = 17;
	student1.gender = "男";

	student2.name = "李四";
	student2.age = 18;
	student2.gender = "男";
	//这里给每个学生赋值了(名字、年龄、性别)
	
	student1.show();
	student2.show();
	//这里调用了Student类里的show方法,来观察我们学生对象的属性

	student1.study();
	student2.study();
	//这里调用了Student类里的study方法
	
	}
}

运行结果:
在这里插入图片描述

3.this关键字

简单来说就是当前,到底是谁在调用这个方法之类的,还有它可以用来避免形参名和变量名相同
继续拿上面代码举例:

class Student{				//学生类(模板)
	public String name;		//学生姓名
	public int age;			//学生年龄
	public String gender;	//学生性别
	
	public void setStudent(String name,int age,String gender){
		name = name;
		age = age;
		gender = gender;
	}						//普通赋值方法

	public void setThisStudent(String name,int age,String gender){
		this.name = name;
		this.age = age;
		this.gender = gender;
	}						//this.赋值方法
	
	public void show(){		
	System.out.println(name + age + gender);
	}						//显示属性方法
}
	public class Test{
		public static void main(String[] args){
        Student student1 = new Student();
        //实例化两个学生对象

        student1.setStudent("张三",17,"男");
        student1.show();

        student1.setThisStudent("张三",17,"男");
        student1.show();
        //分别用两种赋值方式给对象赋值
	}
}

运行结果:
在这里插入图片描述
为什么会出现这个结果呢?,咱看这一段代码
在这里插入图片描述
害…作为人类 看这个代码,都有点迷糊

你给name赋值给name?
哪个name给哪个name???

编译器更不可能知道咱要谁给谁赋值~

  1. 这里name = name;为什么 = null?
    因为他把传过来的形参又赋值给了形参(改了个寂寞
    咱实例化的对象的成员变量(属性)他是一点没改啊!!!
    实例化对象的时候,他的属性默认就是他对应的0值(上面忘记讲了,看了看塞哪里都不合适,就写这里了
    也就是图里打印出来的 null 0 null

  2. 那为什么写了“this.”就没问题嘞?
    就跟我在上面说的一样,谁调用谁就是这个“this”
    比如(这里就不全写代码了,看下上面完整代码理解下):
    在这里插入图片描述


三、对象的构造及初始化

1.如何构造?

使用构造方法构造,简单来说就是一个特殊的成员方法
方法名必须和类名一样,创建对象时候会自动调用,并且一个对象只调用一次
相当于出生时候的命名,只有一次

class Student{
    public String name;
    public int age;
    public String gender;
    
    public Student() {
       this();
    }						//不带参数的构造方法
    
    public Student(String name,int age,String gender){
    	this();			
        this.name = name;
        this.age = age;
        this.gender = gender;
    }						//带三个参数的构造方法

    public void show(){
        System.out.println(name + age + gender);
    }						//显示属性
}
public class Test {
    public static void main(String[] args) {
   		Student student1 = new Student();
        Student student2 = new Student("张三", 17, "男");
        //实例化学生对象并直接赋值
        student1.show();
        student2.show();
    }
}

运行结果:
在这里插入图片描述
这里咱写了两个构造方法,一个无参,一个有参
看图就能看出来区别咯

在我们啥构造方法都没写的时候,编译器默认提供一个无参构造方法
但是你写了其中任意一个,他就不提供了,你得自己写全(IDEA可以用快速生成~

这里的this写上就是先调用无参构造方法对 对象属性 进行初始化(0值)
不写的话就是不初始化,直接赋值,建议写上
但是千万不能形成循环!!!

在这里插入图片描述
这里this一直在循环,无限递归(不可以!)

2.如何初始化?

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

简单来说,局部变量,它用完就销毁了,你还不给它赋值?那你这变量存在的意义是啥?

成员变量是,对象创建时候初始化的,只要对象在,成员变量就不会销毁

你可以直接就地初始化,让所有对象都默认是这个值(如果没有其它构造方法或者set修改的话)

3.就地初始化

简单说就是直接赋值给模板上,让所有学生默认是张三,17,男

class Student{
    public String name = "张三";
    public int age = 17;
    public String gender = "男";
    // ↑ 就地初始化 ↑

    public Student() {
    }

    public Student(String name, int gae, String gender) {
        this.name = name;
        this.age = gae;
        this.gender = gender;
    }
    public void show(){
        System.out.println(name + age + gender);
    }
}
public class Test {
    public static void main(String[] args) {
        Student student1 = new Student();
        Student student2 = new Student("李四",18,"男");
        student1.show();
        student2.show();
    }
}

运行结果:
在这里插入图片描述


总结

嗯,写的有些简陋,如有遗漏请多指正!
这次感觉写的还行(?

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值