Java中的类和对象
1.类的定义和使用
2.如何实例化对象
3.this的使用&构造方法的创建和使用
4.对象的打印
5.包的创建
6.访问限定符(public protected private)
7.static关键字
1.类的定义和使用
在Java中,类其实是对一个对象进行描述,类里面包含对象的属性,有哪些功能行为,当我们封装实现好一个类的时候,想要调用某一个类里面的成员变量或者成员方法的时候,直接调用即可,就不需要多次的造轮子,那么我们如何创建一个类呢,我们需要通过一个关键字class来创建
注意,我们在创建类的时候,类名是大驼峰!!通过我们一个文件只写一个类,所以我们要写多个类时,可以创建多个包,包中分类好我们的类,类名必须和文件名相同
下面是我自己创建的一个学生类,学生的属性有学号,年龄,名字(这些就是属性)
下面就是学生类的功能行为(类的方法),有设置学生的信息,打印学生的信息
下面我们可以创建一个小猫的类,大家可以看看哪些是小猫的属性和小猫的行为
猫的名字,年龄,颜色属于猫类的属性
设置猫的基本信息,打印猫的基本信息属于行为(方法)
public class Cat {String name;//猫的名字int age;//猫的年龄String color;//猫的颜色//猫的叫声public void braks() {System.out.println("喵喵~");}//猫的基本属性public void base(String name, int age, String color) {this.name = name;this.age = age;this.color = color;}public void print() {System.out.println("名字:" + this.name);System.out.println("年龄:" + this.age);System.out.println("颜色:" + this.color);System.out.println("*****************************************");}}
2.如何实例化对象
当我们定义好一个类时,我们当然要使用到类里面的成员变量和成员方法,那么我们应该如何拿到类的成员变量和使用类的成员方法呢,需要我们实例化一个对象,即使用关键字new
在下面的代码中我们可以看到我实例化了4个对象,s1,s2,s3,s4
我们通过 . 来访问对象的成员变量和成员方法
在这里有2点要注意
1.一个类可以实例化多个对象
2.一个引用只能指向一个对象
3.一个对象可以被多个引用所指向
3.this的使用&构造方法的创建和使用
上面的代码中,我们都是手动创建对对象的设置并且手动调用,非常麻烦,其实我们可以自己写一个构造方法,当我们调用实例化对象时,编译器会自动调用构造方法,构造方法其实就是帮我们初始化对象中的成员变量
1.手动实现构造方法,下面我写了俩个构造方法,一个是带参数的构造方法,一个是不带参数的构造方法,如果我们在一个类中不写任何的构造方法,编译器会自动帮我们生成一个不带参数的构造方法,即第一个Student(),如果我们写了构造方法,那么编译器不会帮我们生成,第二个带参数的构造方法,如果我们知道给成员变量初始化什么信息,那么我们就可以使用第二个构造方法,是实例化对象的时候就顺便给实参
注意事项:构造方法的名字要和类名相同,构造方法不加任何返回值
2.通过编译器生成构造方法
1.选择Generate
2.选择Constructor
3.按住ctrl,可以选择多个要初始化的成员变量
当我们创建好构造方法,实例化对象时候编译器就会自动调用
在构造方法中,如果成员变量的名称和形参的名字相同,那么我们就需要加this来确定对象,如果我们不加this,比如name = name,那么形参是不会赋值给成员变量的,所以我们需要加this来确定要传参的对象,this.name = name,那么this怎么知道谁指向他呢,很简单,谁实例化对象,那么this就指向谁,谁调用设置信息方法,谁调用print打印方法,那么this就指向哪个对象
4.对象的打印
在上面的代码中,我们可以通过手动写一个打印的成员方法,也可以通过编译器为我们生成一个打印的方法 --- 即重写toString,所以编译器很大程度上为我们提供开发效率
下面我教大家如何通过编译器为我们重写toString
1.点击Generate
2.选择toString
3.按住ctrl,可以选择多个要打印的成员变量
5.包的创建
在实际工程开发中,我们当然不可能之创建一个类,我们需要创建很多各类,但是每一个类的功能是不一样的,我们有需要把他们分类起来,不可能放在同一个文件夹下,所以我们所谓的 “包”,
其实就是一个文件夹,我们一开始的src创建的第一个类,就是放在默认的src包下
所以我们在工程中需要创建多个包,将我们的类分类在每个包中
那么如何创建包呢?--- 右键src -- new -- package
有几个注意事项:
1.在⽂件的最上⽅加上⼀个package语句指定该代码在哪个包中.
2.包名需要尽量指定成唯⼀的名字,通常会⽤公司的域名的颠倒形式 例如:哔哩哔哩(com.bilibili.www)
3.如果⼀个类没有package语句,则该类被放到⼀个默认包中,也就是src
6.访问限定符(public protected private)
当我们创建好包后,就可以在不同包下,将不同类分类写起来,在实际开发过程中,有一些成员变量我们是不想让外界可以直接拿到和修改的,就需要使用访问限定符修饰
1.public(共有) --- 任何地方都可以拿到和修改
2.private(私有) --- 只能在当前类中访问和修改
3.如果成员变量前不加任何修饰符 -- 只能在当前包中使用
对于private访问限定符使用区域非常有限,但是我们想要给外界使用,当时又不想要让他直接拿到我们的成员变量,我们就需要提供get和set
get可以让在其他区域拿到被private修饰的成员变量
set可以让在其他区域修改被private修饰的成员变量
对于get和set代码十分简单,编译器也可以为我们生成
下面我教大家如何在编译器自动生成get和set
1.选择Generate
2.我们可以只选择生成get或者set或者同时生成get和set
3.按住ctrl,可以选择多个想要生成set或者get的成员变量
7.static关键字
static -- 静态的意思,我们第一个程序是在main方法中运行的,还记得main函数的代码非常长吗?
里面就有static修饰,那么static是干嘛的呢?下面我们一起来看看
在Java中,被static修饰的成员或者方法,称之为静态成员,静态方法,其不属于某个具体的对象,是所有对象所共享的
当一个成员变量没有被static修饰的时候,他是存储在对象当中的,我们可以通过实例化对象对他进行访问,而当一个成员变量被static修饰后,我们无法通过实例化对象进行访问,因为对象在堆上,他已经不在对象当中了,也就是说他不在堆上了,那么他在哪里呢? --- 方法区
当一个成员变量被static修饰后,我们无法通过实例化对象进行访问,那么要怎么访问呢?
static修饰的成员变量,需要通过类访问 --- 类变量,并且生命周期随类的创建而诞生,类的销毁而结束
对于静态方法也是,我们通过类名进行访问
这里我们有几个注意事项要注意
1.不能在静态方法中调用非静态方法 --- 因为静态方法不依赖对象,不需要实例化对象进行访问,而非静态方法依赖对象,需要实例化对象进行访问
如果非要在静态方法中访问非静态方法,那么实例化一个对象即可
2.非静态方法可以调用静态方法 -- 因为静态方法不依赖对象
3.静态方法中不能使用this,因为this需要告知指向哪个对象,而静态方法不依赖对象,所以在静态方法中使用this,那么this就不知道谁是对象
我们直接通过类进行访问,或者直接调用静态方法 --- 因为print是静态方法,main也是一个静态方法,都不依赖对象,可以直接访问
4.静态方法不能访问非静态成员变量 -- 因为非静态成员变量需要实例化对象进行访问,而静态方法不依赖对象
如果非要访问,那么就实例化对象进行访问即可