一、构造器
学习构造器的目的:
①真正知道对象具体是通过什么代码调用的。
②能够掌握对象赋值的其他简便写法。
③为以后学习面向对象编程的其他内容做支撑。
构造器的作用
定义在类中,可以初始化一个类的对象,并返回对象的地址。
Car c=new Car( );
构造器的格式
public class Car{
public Car(){
//无参数构造器
}
public Car(String n,double p){
//有参数构造器
}
}
构造器代码示例
public class Car {
String name;
double price;
//无参构造器
public Car(){
System.out.println("===无参数构造器===");
}
public Car(String name,double price){
System.out.println("===有参数===");
this.name=name;
this.price=price;
}
}
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("张三",999);
System.out.println(c2.name);
System.out.println(c2.price);
}
}
二、this关键字
this关键字是什么?
①可以出现在构造器、方法中。
②代表当前对象的地址。
③this的作用:
可以用于指定访问当前对象的成员变量,成员方法。
三、封装
封装的原则:对象代表什么,就得封装对应的数据,并提供数据相应的行为。
如何进行封装
一般使用对成员变量使用private关键字修饰(private修饰的成员只能在当前类中访问)
为每个成员变量提供配套public修饰的getter、setter方法暴露其取值和赋值。
①编写学生类,使用getter和setter方法
public class Student {
//1.成员变量,使用private修饰,只能在本类中访问
private int age;
//2.提供整套的getter和setter方法暴露其取值和赋值
public void setAge(int age){
if(age>=0&&age<=200){
this.age=age;
}else{
System.out.println("您输入的年龄有问题");
}
}
public int getAge(){
return age;
}
}
②编写测试类
public class Test2 {
public static void main(String[] args) {
Student s=new Student();
s.setAge(23);
System.out.println(s.getAge());
}
}
四、JavaBean
标准JavaBean需满足如下要求:
①成员变量使用private修饰。
②提供成员变量对应的setXXX( )/getXXX方法。
③必须提供一个无参构造器;有参构造器可写可不写。
可以使用快捷键生成对应的setter和getter方法,具体代码如下:
编写用户类,定义相关的用户变量:姓名,身高和薪水
public class User {
//成员变量建议使用private私有
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;
}
//必须为成员变提供成套的setter和getter方法
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;
}
}
创建一个测试类,用来结果的输出:
public class Test {
public static void main(String[] args) {
//无参数构造器创建对象封装一个用户信息
User u1=new User();
u1.setName("张三");
u1.setHeight(165.0);
u1.setSalary(2500);
System.out.println(u1.getHeight());
System.out.println(u1.getName());
System.out.println(u1.getSalary());
//有参数构造器创建对象封装一个用户信息
User u2=new User("李四",168,3500);
System.out.println(u2.getName());
System.out.println(u2.getHeight());
System.out.println(u2.getSalary());
}
}
五、面向对象案例–模仿电影信息展示
需求
使用面向对象编程,模仿电影信息的展示。
分析
①一部电影是一个Java对象,需要先设计电影类,再创建电影对象。
②三部电影对象可以采用数组存储起来。
③依次遍历数组中的每个电影对象,取出其信息进行展示。
创建一个Movie类,创建电影对象,并使用getter和setter方法:
public class Movie {
//成员变量
private String name;
private double score;
private String actor;
//无参
public Movie() {
}
//有参
public Movie(String name, double score, String actor) {
this.name = name;
this.score = score;
this.actor = actor;
}
//getter,setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public String getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
}
创建一个测试类Test,用来结果的展示:
public class Test {
public static void main(String[] args) {
//1.设计电影类
//2.创建3个电影对象,封装电影信息
//3.定义一个电影类型的数组,存储三部电影对象
Movie[] movies=new Movie[3];
movies[0]=new Movie("《我不是药神》",9.5,"黄渤");
movies[1]=new Movie("《长津湖》",9.6,"吴京");
movies[2]=new Movie("《我和我的父亲》",9.4,"吴京");
//4.遍历数组中的每个电影对象,然后获取他的信息展示出来
for (int i = 0; i < movies.length; i++) {
Movie m=movies[i];
System.out.println("电影名"+m.getName());
System.out.println("评分"+m.getScore());
System.out.println("演员"+m.getActor());
System.out.println("=================");
}
}
}
最终代码运行结果如下: