目录
一、认识类和对象
1、类的了解
我们在生活中多会将有相同特征或相同行为的事物归为一类,在Java中,用来描述这类事物的就是Java类,Java类就是这样诞生的。Java是一门以类为组织单元的语言,我们定义的Java类就是一种Java数据类型,该数据类型属于引用数据类型。
2、定义方式
语法
public class 类名 {
//添加内容
}
示例
//车的类
public class Car{
}
接下来填充车类的内容,如:价格、品牌、型号
public class Car {
public double price;//价格
public String brand;//品牌
public String type;//型号
}
当描述行为时,在Java中,使用方法来描述行为,方法的定义语法如下:
// [ ]里的内容可写可不写
访问修饰符 返回值类型 方法名( [参数列表] ) {
[return 返回值;]
}
那么Car类的部分定义如下:
public class Car {
public double price;
public String brand;
public String type;
public void start(){
System.out.println("车启动");
}
public void speed(){
System.out.println("车加速");
}
public void end(){
System.out.println("车停止");
}
}
3、类图的使用
类图用于描述类的结构,与流程图一样,简单易理解。
public修饰的属性和方法前需要使用"+";private修饰的属性和方法前需要使用"-"。
例图展示
4、类和对象的关系
解释:类是描述多个事物共有特征和行为的一种抽象体,而对象是一个具体的事物,每一个属性和每一个行为都是具体的,类是对象的集合体,类是用来构建具体的对象的。
语法
类名 对象名 = new 类名( );
对象名.属性名 = 属性值;
样例
public class Car {
public double price;
public String brand;
public String type;
public void start(){
System.out.println("车启动");
}
public void speed(){
System.out.println("车加速");
}
public void end(){
System.out.println("车停止");
}
}
public class Cars {
public static void main(String[] args) {
Car p1 = new Car();
//这里的p1称为对象名,跟数组名一样,本质都是变量,只是在面向对象中称之位对象名
p1.price=45623;
p1.brand="宝马";
p1.type="RX-18";
}
}
类既然是一类事物的共同特征和行为的描述,那么一个类应该可以描述多个事物,因此类也可以创建多个对象,样例如下:
public class Car {
public double price;
public String brand;
public String type;
public void start(){
System.out.println("车启动");
}
public void speed(){
System.out.println("车加速");
}
public void end(){
System.out.println("车停止");
}
}
public class Cars {
public static void main(String[] args) {
Car p1 = new Car();
//这里的p1称为对象名,跟数组名一样,本质都是变量,只是在面向对象中称之位对象名
p1.price=45623;
p1.brand="宝马";
p1.type="RX-18";
Car p2 = new Car();
p2.price=48622;
p2.brand="奥迪";
p2.type="TX-53";
Car p3 = new Car();
p3.price=46553;
p3.brand="奔驰";
p3.type="OX-21";
}
}
结论
类是对多个事物的抽象描述,描述的是它们的共同特征和行为。但要注意的是:类中描述的共同特征,在对象创建出来后是跟随对象走的,行为也是一样的,属于对象。
二、成员变量和成员方法
1、成员变量
解释:在类中定义的变量就是成员变量,成员变量是属于成员(具体的对象、具体的事物)的,成员变量是有初始值的。
补充:引用数据类型的初始值是 null,整数都是0,浮点数都是0.0,boolean类型是false,char类型是"\u0000"。
访问成员变量的语法
对象名.属性名;
例子
public class Car {
public double price;
public String brand;
public String type;
public void start(){
System.out.println("车启动");
}
public void speed(){
System.out.println("车加速");
}
public void end(){
System.out.println("车停止");
}
}
public class Cars {
public static void main(String[] args) {
Car p1 = new Car();
//这里的p1称为对象名,跟数组名一样,本质都是变量,只是在面向对象中称之位对象名
System.out.println(p1.brand+"\t"+p1.type+"\t"+p1.price);
p1.price=45623;
p1.brand="宝马";
p1.type="RX-18";
System.out.println(p1.brand+"\t"+p1.type+"\t"+p1.price);
Car p2 = new Car();
p2.price=48622;
p2.brand="奥迪";
p2.type="TX-53";
System.out.println(p2.brand+"\t"+p2.type+"\t"+p2.price);
Car p3 = new Car();
p3.price=46553;
p3.brand="奔驰";
p3.type="OX-21";
System.out.println(p3.brand+"\t"+p3.type+"\t"+p3.price);
}
}
输出结果
2、成员方法
解释:在类中定义的方法就是成员方法,成员方法是属于成员(具体的对象、具体的事物)的。
语法
// [ ]中内容可写可不写
对象名.方法名 ( [参数列表] );
例子
public class Car {
public double price;
public String brand;
public String type;
public void start(){
System.out.println("价值"+price+"的"+brand+"车启动!"+"型号为"+type);
}
public void speed(){
System.out.println("价值"+price+"的"+brand+"车加速!"+"型号为"+type);
}
public void end(){
System.out.println("价值"+price+"的"+brand+"车停止!"+"型号为"+type);
}
}
public class Cars {
public static void main(String[] args) {
Car p1 = new Car();
//这里的p1称为对象名,跟数组名一样,本质都是变量,只是在面向对象中称之位对象名
//System.out.println(p1.brand+"\t"+p1.type+"\t"+p1.price);
p1.price=45623;
p1.brand="宝马";
p1.type="RX-18";
System.out.println(p1.brand+"\t"+p1.type+"\t"+p1.price);
p1.start();p1.speed();p1.end();
Car p2 = new Car();
p2.price=48622;
p2.brand="奥迪";
p2.type="TX-53";
System.out.println(p2.brand+"\t"+p2.type+"\t"+p2.price);
p2.start();p2.speed();p2.end();
Car p3 = new Car();
p3.price=46553;
p3.brand="奔驰";
p3.type="OX-21";
System.out.println(p3.brand+"\t"+p3.type+"\t"+p3.price);
p3.start();p3.speed();p3.end();
}
}
public class Car {
public double price;
public String brand;
public String type;
public void start(){
System.out.println("价值"+price+"的"+brand+"车启动!"+"型号为"+type);
}
public void speed(){
System.out.println("价值"+price+"的"+brand+"车加速!"+"型号为"+type);
}
public void end(){
System.out.println("价值"+price+"的"+brand+"车停止!"+"型号为"+type);
}
public void show(){
System.out.println(brand+"\t"+type+"\t"+price);
}
}
public class Cars {
public static void main(String[] args) {
Car p1 = new Car();
//这里的p1称为对象名,跟数组名一样,本质都是变量,只是在面向对象中称之位对象名
//System.out.println(p1.brand+"\t"+p1.type+"\t"+p1.price);
p1.price=45623;
p1.brand="宝马";
p1.type="RX-18";
//System.out.println(p1.brand+"\t"+p1.type+"\t"+p1.price);
//p1.start();p1.speed();p1.end();
p1.show();
Car p2 = new Car();
p2.price=48622;
p2.brand="奥迪";
p2.type="TX-53";
//System.out.println(p2.brand+"\t"+p2.type+"\t"+p2.price);
//p2.start();p2.speed();p2.end();
p2.show();
Car p3 = new Car();
p3.price=46553;
p3.brand="奔驰";
p3.type="OX-21";
//System.out.println(p3.brand+"\t"+p3.type+"\t"+p3.price);
//p3.start();p3.speed();p3.end();
p3.show();
}
}
3、成员变量与局部变量
解释:局部变量就是在方法内部定义的变量,局部变量没有初始值,因此局部变量在使用前必须完成初始化操作,当局部变量与成员变量同名时,局部变量的优先级更高,并且局部变量的作用范围较小,就在局部变量所定义的方法内,因此局部变量在方法内的优先级高于成员变量。
例子
public void show(){
String brand; //无初始值,定义的局部变量brand不可使用
System.out.println(brand+"\t"+type+"\t"+price);
}
public void show(){
String brand="保时捷"; //现在使用的是局部变量的brand
System.out.println(brand+"\t"+type+"\t"+price);
}
4、this关键字
在方法中,如果局部变和成员变量的变量名相同,又要使用的是成员变量,那么这时要用到this关键字来解决问题,并且this还可以用来调用成员的方法。
this关键字表示的是当前对象(使用new创建出来的对象)
例子
public class Car {
public double price;
public String brand;
public String type;
public void start(){
System.out.println("价值"+price+"的"+brand+"车启动!"+"型号为"+type);
}
public void speed(){
System.out.println("价值"+price+"的"+brand+"车加速!"+"型号为"+type);
}
public void end(){
System.out.println("价值"+price+"的"+brand+"车停止!"+"型号为"+type);
}
public void show(){
String brand="保时捷"; //现在定义的是局部变量的brand
System.out.println(this.brand+"\t"+type+"\t"+price); //现在使用的brand是成员变量
start();//相当于this.start();
speed();//相当于this.speed();
}
}
三、构造方法
1、概念
构造方法是一种特殊的方法,主要用于创建对象以及完成对象的属性初始化操作,构造方法不能被对象调用。
2、语法
// [ ]中内容可写可不写
访问修饰符 类名 ( [参数列表] ) {
}
例子
public class Car {
public double price;
public String brand;
public String type;
public Car(){
price=165;
brand="TR";
type="DX";
}
public void start(){
System.out.println("价值"+price+"的"+brand+"车启动!"+"型号为"+type);
}
public void speed(){
System.out.println("价值"+price+"的"+brand+"车加速!"+"型号为"+type);
}
public void end(){
System.out.println("价值"+price+"的"+brand+"车停止!"+"型号为"+type);
}
public void show(){
System.out.println(this.brand+"\t"+type+"\t"+price);
}
}
public class Cars {
public static void main(String[] args) {
Car p1 = new Car();
//这里的p1称为对象名,跟数组名一样,本质都是变量,只是在面向对象中称之位对象名
p1.show();
p1.price=45623;
p1.brand="宝马";
p1.type="RX-18";
p1.show();
}
}
运行结果
官方说明:你不必为类提供任何构造方法,但是在执行此操作时必须小心,编译器会自动为任何没有构造方法的类提供无参数的默认构造方法。