Java面向对象基础
1. 设计对象并使用
1.1 设计类,创建对象并使用
- 类(设计图):是对象共同特征的描述。
- 对象:是真实存在的具体实例。
- 结论:在Java中,必须先设计类,才能创建对象并使用。
- 如何设计类:
public class 类名{
1、成员变量(代表属性,一般是名词)
2、成员方法(代表行为,一般是动词)
3、构造器
4、代码块
5、内部类
}
- 如何得到类的对象:
类名 对象名 = new 类名();
- 如何使用对象 :
- 访问属性:
对象名.成员变量
- 访问行为:
对象名.方法名(...)
- 创建一个汽车类
Car.java
public class Car {
String name;
double price;
public void start(){
System.out.println(name + "启动了");
}
public void run(){
System.out.println(name + "汽车" + "跑得很快,它的价格是" + price);
}
}
public class Test1 {
public static void main(String[] args) {
Car car = new Car();
car.name = "奔驰";
car.price = 42.0;
System.out.println(car.name);
System.out.println(car.price);
car.start();
car.run();
}
}
1.2 定义类的补充注意事项
- 类名首字母建议大写,且有意义,满足“驼峰模式”。
- 一个Java文件中可以定义多个class类,但只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。实际开发中建议还是一个文件定义一个class类。
- 成员变量的完整定义格式是:
修饰符 数据类型 变量名称 = 初始化值;
一般无需指定初始化值,存在默认值。
2. 构造器
- 构造器是定义在类中的,可以用于初始化一个类的对象,并返回对象的地址。
- 构造器的格式:
修饰符 类名(形参列表){
...
}
- 调用构造器得到对象的格式:
类 变量名称 = new 构造器;
- 构造器的分类和作用:
- 无参数构造器(默认存在的):初始化对象时,成员变量的数据均采用默认值。
- 有参数构造器:在初始化对象的时候,同时可以接收参数为对象进行赋值。
- 创建一个汽车类
Car.java
public class Car {
String name;
double price;
public Car(){
System.out.println("无参数构造器被调用");
}
public Car(String n,double p){
System.out.println("有参数构造器被调用");
name = n;
price = p;
}
}
public class Test {
public static void main(String[] args) {
Car c1 = new Car();
System.out.println(c1.name);
System.out.println(c1.price);
Car c2 = new Car("宝马",30.0);
System.out.println(c2.name);
System.out.println(c2.price);
}
}
- 构造器的注意事项:
- 任何类定义出来,默认就自带了无参数构造器,写不写都有。
- 一旦定义了有参数构造器,那么无参数构造器就没有了,如果还想用无参数构造器,此时就需要自己手写一个无参数构造器了。
3. this关键字
- 可以出现在构造器、方法中。
- 代表当前对象的地址。
- this关键字的作用:
- 创建一个汽车类
Car.java
public class Car {
String name;
double price;
public Car(){
System.out.println("无参数构造器中的this:" + this);
}
public Car(String name,double price){
this.name = name;
this.price = price;
}
public void run(){
System.out.println("方法中的this:" + this);
}
public void start(){
System.out.println(this.name + "汽车启动。");
}
}
public class Test {
public static void main(String[] args) {
Car car = new Car();
car.run();
System.out.println(car);
System.out.println("============");
Car car1 = new Car("宝马",32.5);
System.out.println(car1.name);
System.out.println(car1.price);
car1.start();
}
}
4. 封装
- 面向对象的三大特征:封装、继承、多态。
- 封装:告诉我们,如何正确设计对象的属性和方法。
- 封装的原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为。
- 一般建议对类的成员变量使用private(私有、隐藏)关键字修饰。(private修饰的成员只能在当前类中访问)
- 为每个成员变量提供配套的public修饰的getter、setter方法暴露其取值和赋值。
5. JavaBean
- 也可以称为实体类,其对象可以用于在程序中封装数据。
- 标准JavaBean须满足如下书写要求:
- 成员变量使用private修饰。
- 提供成员变量对应的setter/getter方法。
- 必须提供一个无参构造器;有参构造器是可写可不写的。
public class User {
private String name;
private double height;
private double salary;
public User() {
}
public User(String name, double height, double salary) {
this.name = name;
this.height = height;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
区别 | 成员变量 | 局部变量 |
---|
类中位置不同 | 类中,方法外 | 常见于方法中 |
初始化值不同 | 有默认值,无需初始化 | 没有默认值,使用前需要完成赋值 |
内存位置不同 | 堆内存 | 栈内存 |
生命周期不同 | 随着对象的创建而存在,随着对象的消失而消失 | 随着方法的调用而存在,随着方法的运行结束而消失 |
作用域 | | 在所归属的大括号中 |