文章目录
Java中的类和对象
有了对Java的基本认识之后,我们就可以开始进行了解类和对象啦😁👍。
一、Java中的类和对象
在Java中,类(Class)是用来定义对象(Object)的模板或蓝图,它描述了对象的属性(成员变量)和行为(方法)。对象是类的一个实例,通过创建对象,我们可以使用类中定义的属性和方法。
1.类
把抽象出来的类型用Java表达出来,那就是类class,具有相同性质的一类事物的抽象。
实例化一个类,可以获得属于该类的一个实例(即对象)。
1.类是Java程序的基本构建块,用于封装数据和行为,并实现代码的重用和扩展。
2.类由类名、成员变量、方法和构造方法组成。
3.类中的成员变量描述了对象的属性或状态。
4.类中的方法定义了对象的行为或操作。通过调用对象的方法,可以对对象执行特定的操作。
5.类可以使用访问修饰符(如public、private、protected)来控制成员变量和方法的可访问性。
6.类可以继承其他类,形成父类和子类的关系,从而实现代码的继承和扩展。
7.类可以实现接口,通过接口实现多态性和代码的灵活性。
2.对象
对象是类的一个实例,类的具体化,也称实例对象。实例就是实际例子,塑造出一个例子来。
1.对象是类的实例,通过使用 new 关键字和构造方法,我们可以在程序中创建对类的实例化。
2.对象可以具有各种属性(成员变量),用于描述对象的状态和特征。每个对象都有自己的属性副本,并且可以通过对象访问和修改这些属性。
3.对象可以执行各种操作或行为,这些操作被定义在类的方法中。通过调用对象的方法,我们可以让对象执行特定的行为。
4.每个对象都是独立的实体,具有自己的内存空间和标识。对一个对象的修改不会影响其他对象。
5.在程序中,不同的对象可以通过方法调用和传递消息的方式相互交互。这种交互可以通过对象之间的引用来实现。
二、如何创建和使用类
new关键字
首先我们创建一个类,比如说汽车,然后我们定义属性和方法。
public calss Car{
//属性:封装数据
String color;
int price;
//方法
public void run(){
System.out.println("汽车跑起来了。");
}
}
在可以使用变量之前,实际内存必须被分配。这个工作是通过使用关键字 new 来实现的。我们可以从一个测试类中进行测试:如下所示:
public class test {
public static void main(String[] args) {
Car car1;
car1 = new Car();
}
}
也可以写成一句话:
public class test {
public static void main(String[] args) {
Car car1= new Car();
}
}
关键字new意味着内存的分配和初始化,new调用的方法就是类的构造方法。
使用对象中的属性和方法
要调用对象中的属性和方法,就要使用“.”操作符。
对象创建以后就有自己的属性了,我们通过“.”操作符实现对属性的访问。
public class test {
public static void main(String[] args) {
Car car1= new Car();
car1.run();
}
}
运行结果:
汽车跑起来了。
整个过程就是:
定义一个类,这个类是一类事物的抽象化,创建对象,也就是实例化对象,这样就可以调用类的方法了。也就是说,类中的属性和方法,对象都是具备的。
二、Java类的基本构成
包
包是类、接口或其他包的集合,包对类进行有效的管理。利用package进行包的定于。
例如:package ch03.d1;
,指明文件中定义的类所在的包。并且包名最好是小写的。
import语句
为了能使用某一个包的成员,我们要在java程序中明确导入该包。import的位置应该位于package后面,可以有一条或者多条。Java运行时通过import找到引用的其他类的路径。
java编译器默认为所有的java 程序引入了JDK的java.lang 包中所有的类(import java.lang.*;),其中定义了一些常用类:System、String、Object、Math 等。因此我们可以直 接使用这些类而不必显式引入。但使用其它非无名包中的类则必须先引入、后使用。
权限修饰符
Java 语言允许对类中定义的各种属性和方法进行访问控制,即规定不同的保护等级来限制对它们的使用。
Java提供了不同的权限修饰符用于控制类、成员变量、方法和构造方法的可访问性。这些权限修饰符包括public、private、protected和默认(不使用任何修饰符)。通过合理使用权限修饰符,可以确保代码的封装性和安全性,并且符合面向对象编程的原则。
具体规则如下:
修饰符 | 同一个类中 | 同一个包中 | 不同包中的子类的对象 | 任何地方 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | |
无修饰符 | √ | √ | ||
private | √ |
类定义
Java程序的基本单位是类,有了一个类,就可以用它创建多个对象
类的定义形式如下:
<权限修饰符> [一般修饰符] class <类名> [extends 父类][implements 接口]{
成员变量
构造方法
成员方法
}
成员变量(属性)
成员变量(也成为属性、实例变量)是指类的一些属性定义,标志类的静态属性。
格式如下:
<权限修饰符> [一般修饰符] 类型 <属性名称> =初始值;
权限修饰符有四种:public、protected、无修饰符和private四种。
一般修饰符:有static、final等等
类型:就是数据的类型,可以是任何类型。
属性名称:标识符
初始值:赋值给属性的初始值,不设置的话会自动进行初始化。
构造方法
构造方法是特殊的方法,它的作用是创建对象并初始化成员变量。在创建对象时会自动调用类的构造方法。
定义规则:
Java中的构造方法必须与该类具有相同的名字,并且没有方法的返回类型(包括void,int等所有返回值类型)。
构造方法一般用puublic类型来说明,那么就可以在任意的地方进行调用。
方法
定义:方法就是对象所具有的动态功能。
Java类中的声明方式格式:
<权限修饰符> [修饰符] 返回值的类型 <方法名称> (参数列表) [throws 异常]{
方法体
}
访问修饰符:对方法进行限制
返回值类型::表示方法返回值的类型,如果方法不返回任何值,那么他的声明必须为void(空)。
方法名称:合法标识符。
参数列表:允许参数值传递到方法中,并且在调用方法时要传入对应参数。
throws异常列表:以后会介绍到。
例子:
public void run(){
System.out.println("汽车跑起来了。");
}
这就是一个简单的方法,比如一开始我们定义的是汽车,汽车可以跑起来,这是他的动作,在类中我们定义他这个动作为run().
this关键字
1.this点取属性
在类属性上定义的变量和方法内部定义的变量相同时,调用谁的呢?
这里就要用到this.取属性了。
也就是说:“this.变量“调用的是当前属性的变量值,直接使用变量名称调用的是相对距离最近的变量的值。
假设我们一开始就定义了
public class Car {
//属性:封装数据
String color = "蓝色";
int price ;
//方法
public void color(){
System.out.println(color);
}
}
然后通过对象car1改变color的颜色
public class Car {
//属性:封装数据
String color = "蓝色";
int price = 100000;
//方法
public void color(){
String color = "红色";
System.out.println(color);
System.out.println(this.color);
}
}
此时我们得到的颜色是:
红色
蓝色
“this.变量“调用的是当前属性的变量值
直接使用变量名称调用的是相对距离最近的变量的值。也就是常说的就近原则。
2.this点取方法
创建对象之后,可以直接用this.加方法的方式相互调用。
public class Car {
//属性:封装数据
String color = "蓝色";
int price = 100000;
//方法
public void color(){
String color = "红色";
System.out.println(color);
System.out.println(this.color);
}
public void run(){
this.color();//调用本类的其他方法
System.out.println("汽车跑起来了");
}
}
3.this()调用构造方法
this用在构造方法中可以调用其他的构造器,并且this()必须书写在构造方法的第一句。
//无参的构造方法
public Car() {
}
//有参数的构造方法
public Car(String color, int price) {
this();//调用其他的构造方法
this.color = color;
this.price = price;
}
按值传递&&引用传递
引用类型指向一个对象,指向对象的变量是引用变量。
比如定义的car1就是一个引用类型的变量。
Car car1 = new Car();
1.按值传递
基本数据类型都是按值传递的。
如果此时对x进行操作:x++
,那么此时x = 11
,y = 10
。
两个变量互不影响。
2.引用传递
引用数据类型:按引用(内存地址)传递。
Car car1 = new Car();
Car car2 = car1;
//按引用(内存地址)传递
//两个变量指向同一个内存地址
类中的变量
1.局部变量
在方法内定义的变量或方法的参数被称为局部变量。
1.局部变量必须先声明,然后才能使用。声明局部变量时需要指定其数据类型。
2.局部变量在声明时可以初始化,也可以先声明后赋值。
3.局部变量只能在声明它的代码块中访问和使用。在代码块外部无法访问局部变量。
4.局部变量在代码块执行完毕后会自动被销毁,其生命周期仅限于所在的代码块。
2.实例变量
在方法外定义的变量主要是实例变量,在创建对象时,就会为该类的所有实例变量分配储存空间。
1.实例变量属于类的实例(对象),每个对象都拥有独立的实例变量。
2.实例变量可以在类的任何非静态方法、构造函数或块中声明,并且可以在整个类的范围内使用。
3.实例变量没有使用 static 关键字进行修饰,因此对于每个对象来说,它们的值是独立的。
4.实例变量具有默认的初始值,例如 int 类型的实例变量默认为 0,boolean 类型的默认为 false,引用类型的默认为 null。
实例变量 | 局部变量 | |
---|---|---|
位置 | 属性 | 方法中 |
初始化 | 有默认初始值 | 没有默认初始值,必须显示初始化 |
内存 | 堆内存 | 栈内存 |
内存回收 | 通过垃圾回收器回收 | 通过块的作用域回收 |
3.实例变量的初始化
在java程序中,任何变量都要经过初始化才可以使用。当一个对象被创建时,实力变啊零分配内存空间时按程序员指定的初始化赋值,否则就按系统默认的初始值进行初始化:
数据类型 | 初始值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
char | ‘\u0000’ |
float | 0.0F |
double | 0.0D |
boolean | false |
所有引用类型 | null |
4.JavaBean
JavaBean是一种符合标准的Java类型,它会将属性封装到getter和setter方法中,以便于其他对象访问和修改他们的值。
JavaBean是一种可重用的组件,会在很多方面使用到。
JavaBean特征:
1.JavaBean具有私有成员变量,属性在JavaBean中通常被声明为private类型,不直接暴露给外部对象的访问。
2.具有公共的getter和setter方法:为了访问和修改对象的属性,通常会定义公共的方法,用于读取和修改属性的值,getter和setter方法通常是一种命名规范,如 getName() 方法;属性的 set 方法通常以 set 开头,如setName() 方法。
3.Java Bean 可以通过实现 Serializable 接口实现序列化,便于在网络传输、分布式系统和持久化存储等场景下进行使用。
总之,Java Bean 是一种符合标准的 Java 类型,具有私有成员变量、公共的 getter 和 setter 方法和序列化支持等特征,可以作为一种可重用、可扩展、易于管理的 Java 组件,被广泛应用于 Java 应用程序中的各个领域。
在idea中可以通过:右键当前要封装的类–>Generate–>getter和setter方法直接快捷生成,构造器和一些常用的toString方法也可以直接创建。
总结
对Java的类和对象有了一个初步的认识。
描述 | |
---|---|
开发思想 | 面向对象编程(以对象为中心) |
类的构成 | package import public class 类名(){ 属性 构造器 方法 } |
权限修饰符 | private 、默认的、protected、public |
this关键字 | this表示本对象,谁调用此方法,谁就是本对象 1、this.属性 2、this.方法() 3、this() |
传递 | 1、基本数据类型:按值传递 2、引用数据类型:按引用(内存地址)传递 |
变量 | 1、 实例变量(属性) 堆内存 有默认初始值 2、 局部变量(块{}中的变量) 栈内存 没有默认初始值 |
加油💪。