文章目录
- 前言
- 类和对象
- 类
- 对象
- 构造方法
- 匿名对象
- 变量作用域
- this关键字
- 总结
前言
提示:这里可以添加本文要记录的大概内容:
Java 是一种以面向对象编程为基础的编程语言
在 Java 编程中,一切皆为对象
每个对象都有其自己的属性和方法
对象可以通过类来定义,并且可以根据需要创建多个对象。
类描述了对象应该有的属性和方法,同时也定义了对象之间的关系。
面向对象指的就是一切以真实存在的个体为思考目标
提示:以下是本篇文章正文内容,下面案例可供参考
类和对象
类
把若干个相似的个体归为一类
以下是一个简单的 Java 汽车类:
首先要知道哪些数据和行为需要管理
其次类中的属性可以被本类中所有方法直接使用
//定义一个类来进行描述
public class Car {
// 汽车的属性----数据
String brand; //品牌
String model; //型号
int year; //年份
double price; //价格
// 汽车的方法----行为
public void run() {
System.out.println(brand+"车跑得真快");
}
public double getPrice() {
return price;
}
}
对象
类仅仅是个定义,一种描述,不能在程序中直接使用
要根据定义的类在程序中创建这个类真正的对象,他是真实存在的
brand = A
model = V5
year = 2019
price = 280.00
构造方法
在java重要创造出对象来,要创造出一个特殊的方法——构造方法
一个类要创建对象,需要调用本类中的构造方法
构造方法语法:
- 方法名必须和类名相同
- 不能包含返回值类型
- 方法体中不能使用return返回一个值
还是以汽车类举例:
public class Car {
// 汽车的属性
String brand;
String model;
int year;
double price;
public void show() {
System.out.println("这辆车品牌是" + brand);
}
//实际应用中,建议每个类定义两个构造方法
//1.无参空构造方法
public Car() {
}
//2.有参构造方法是通过传参给对象的属性赋初值
public Car(String b, String m, int y, double p) {
brand = b;
model = m;
year = y;
price = p;
}
}
接下来创建Car类对象:
public static void main(String[] args) {
//创建对象时,需要在new后面调用构造方法【Car() 调用构造方法】
Car c1=new Car();
//通过对象名.方式来使用属性和方法
System.out.println(c1.brand);
c1.brand= "奔驰";
c1.model= "SUV汽车";
c1.year = 2019;
c1.price = 28900.00;
c1.show();
//定义一个新的,再创建一个对象
Car c2 = new Car("宝马","小轿车",2022,5120.00);
System.out.println(c2.brand);
System.out.println(c2.model);
System.out.println(c2.year);
System.out.println(c2.price);
c2.show();
}
定义类时,可以不定义构造方法
在代码编译时 java会给这个类自动添加一个默认的无参构造方法
如果定义类时有构造方法,默认的将不再提供
匿名对象
Java中的匿名对象指的是没有名称的对象,即没有通过赋值给变量或者通过构造器创建实例的对象
匿名对象通常在代码中仅仅需要使用一次或者是只需要创建一个实例时使用
可以使用匿名对象调用方法来执行操作,如下所示:
我这里写一个类名为Animal
的类,并加上一个测试类Main
来讲解。
首先,我们声明一个Animal
类,代码如下:
public class Animal {
String name;
public Animal() {
// 无参构造方法
}
public Animal(String x) {
name = x;
}
public void introduce() {
System.out.println("I am an animal, my name is " + name);
}
}
这个类也有两个构造方法,一个是无参构造方法,另一个是带一个参数的构造方法
带参构造方法接收一个字符串参数,将这个参数赋值给name
属性。
类中还有一个introduce()
方法,用来输出一个关于这个实例的简单介绍。
我们可以声明一个Animal
测试类,代码如下:
public class AnimalTester {
public static void main(String[] args) {
Animal dog = new Animal("小黑");
dog.introduce();
dog.introduce();
new Animal("小白").introduce();
new Animal("小灰").introduce();
// 尽量避免使用匿名对象
}
}
我们使用带参构造方法创建一个某只狗的对象,并调用它两次的introduce()
方法。
然后使用匿名对象创建两个不同的狗,并调用它们的introduce()
方法
最后提醒了一下,尽量避免使用匿名对象,因为当我们使用匿名对象时,这个对象是没有被任何变量所引用的,因此一旦离开这个对象所在的语句块,这个对象就会被销毁(会被垃圾回收器回收)。这也是为什么我们要尽量避免使用匿名对象的原因。
变量作用域
全局变量=属性=实例变量
使用范围是本类中所有方法
【例】我们可以写一个类Music
,代码如下:
public class Music {
String name;
int num; //属性或全局变量
//类中的一个方法
public void show() {
System.out.println("这首音乐一共播放了" + num + "次");
}
public void test(int n) {
// 方法中定义的变量可以是参数或方法体中定义的,都称为局部变量
// 使用范围仅限于当前方法
double d;
}
}
Music
类中有一个name
属性和一个num
属性,以及一个show()
方法用于展示播放次数。
在show()
方法中,我们使用+
运算符连接字符串和数字。
此外,Music
类还有一个test()
方法,接受一个参数n
,并且在方法体内定义了一个局部变量d
。
这就是一个简单的Music
类的实现。
this关键字
- java允许定义和属性同名的局部变量
- 访问方法内部时,如果直接使用变量名访问,那么访问的是局部变量
- 通过
this.属性名
,可以访问属性
【例】这里写一个运动员类Athlete
,代码如下:
public class Athlete {
String name;
double height;
String birthday;
public void show(){
System.out.println(this.name + "正在比赛中");
}
public Athlete() {
this("Tom", 1.85, "1995-04-20");
// 可以在构造方法中使用this(),来调用本类其他重载的构造方法
// 必须出现在第一行
}
public Athlete(String name, double height, String birthday) {
// System.out.println(this.name);
this.name = name;
this.height = height;
this.birthday = birthday;
}
}
Athlete
类有一个name
属性、一个height
属性和一个birthday
属性,以及一个show()
方法用于展示选手正在比赛中。
在Athlete
类的构造方法中,我们使用this()
方法来调用其他构造方法,来避免代码重复。
在Athlete()
构造方法中,我们将默认值设置为Tom, 1.85和1995-04-20
这就是一个简单的Athlete
运动员类的实现
总结
定义类的基本步骤:
- 定义属性
- 定义两个构造方法(有参无参)
- 定义其他方法
构造函数:
当一个对象被创建时,构造方法会初始化对象,给变量赋初值
- 构造函数和类名完全一致
- 构造函数不要写返回值类型
- 默认编译器会创建一个无参的构造函数,但是一旦你写了构造函数,默认的将不再提供
super:
5. super子类的成员方法里调用父类的成员变量
6. super子类的成员方法里调用父类的成员方法
7. super可以在子类的构造方法里调用父类的构造方法
【例】
定义一个三角形类Triangle:
1、定义三个方法:getArea()求面积、getPer()求周长,showAll()分别在控制台输出底边、高、面积、周长。
2、有两个属性:底边base、高height。
3、通过构造方法Triangle(int base, int height),分别给两个属性赋值。
以下是Triangle类的代码实现:
public class Triangle {
int base;
int height;
public Triangle(int base, int height) {
this.base = base;
this.height = height;
}//有参
public Triangle() {
}//无参
public double getArea() {
return base * height / 2.0;
}
public double getPer() {
double c = Math.sqrt(base * base + height * height);
return base + height + c;
}
public void showAll() {
System.out.println("底边:" + base);
System.out.println("高:" + height);
System.out.println("面积:" + getArea());
System.out.println("周长:" + getPer());
}
}
在上述代码中,我们定义了一个Triangle
类,包含了底边base
和高height
两个私有属性,并编写了一个构造方法Triangle(int base, int height)
来初始化这两个属性。
同时还实现了三个方法:getArea()
用于计算三角形的面积,getPer()
用于计算三角形的周长,以及showAll()
用于输出三角形的底边、高、面积和周长。
在getPer()
方法中,我们使用了Math库中的sqrt()方法来计算三角形的斜边长度。
下面是一个简单的测试代码,供您参考:
public class TestTriangle {
public static void main(String[] args) {
Triangle t = new Triangle(5, 8);
t.showAll();
}
}
在题中的用到了构造方法,那个不用我们写,直接右键→源码进行选择即可: