对象
开发一个一个对象,把数据交给对象,再调用对象的方法完成对数据的处理。
student.java:
package object;
public class Student {
String name;
double chinese;
double math;
public void printTotalScore(){
System.out.println(name+"的总成绩为:" + (chinese + math ));
}
public void printAverageScore(){
System.out.println(name+"的平均成绩为:" + (chinese + math ) / 2.0);
}
}
Test.java:
package object;
public class Test {
public static void main(String[] args) {
//创建学生对象,封装对象的数据
Student s1 = new Student();
s1.name = "波妞";
s1.chinese = 98;
s1.math = 86;
s1.printTotalScore();
s1.printAverageScore();
}
}
输出:
波妞的总成绩为:184.0
波妞的平均成绩为:92.0
面向对象的三大特点:封装、继承、多态
this关键字
this就是一个变量,可以用在方法中,用来拿到当前对象。
主要用来解决:变量名称冲突问题
Test.java:
Student s3 = new Student();
s3.score = 335;
s3.printPass(250);
Student.java:
double score;
public void printPass(double score){
//this.score表示当前对象的score
if(this.score > score){
System.out.println("分高高高");
}else{
System.out.println("没到线~~");
}
//不加this,则score都为250,肯定输出没到线
}
输出:
分高高高
构造器
特点:
- 创建对象时,对象会根据参数情况去调用构造器:Student s = new Student();
应用场景:
- 创建对象时,同时完成对对象成员变量(属性)的初始化赋值
注意:
- 类在设计时,如果不写构造器Java会为类自动生成一个无参数构造器。
- 一旦定义了有参数构造器,java就不会帮我们自动生成无参数构造器,需要自己手写无参数构造器
Test.java:
Student s4 = new Student("波妞", 98);
System.out.println(s4.name);
System.out.println(s4.score);
Student.java:
public Student(String name,double score){
System.out.println("有参数构造器触发");
this.name = name;
this.score = score;
}
输出:
有参数构造器触发
波妞
98.0
封装
用类设计对象处理某个事物的数据时,应该把要处理的数据及处理数据的方法,设计导一个对象中去。
设计规范:合理隐藏,合理暴露;
/* 文件名: EncapTest.java */
public class EncapTest{
private String name;
private String idNum;
private int age;
public int getAge(){
return age;
}
public String getName(){
return name;
}
public String getIdNum(){
return idNum;
}
public void setAge( int newAge){
age = newAge;
}
public void setName(String newName){
name = newName;
}
public void setIdNum( String newId){
idNum = newId;
}
}
以上实例中public方法是外部类访问该类成员变量的入口。
通常情况下,这些方法被称为getter和setter方法。
因此,任何要访问类中私有成员变量的类都要通过这些getter和setter方法。
/* F文件名 : RunEncap.java */
public class RunEncap{
public static void main(String args[]){
EncapTest encap = new EncapTest();
encap.setName("James");
encap.setAge(20);
encap.setIdNum("12343ms");
System.out.print("Name : " + encap.getName()+
" Age : "+ encap.getAge());
}
}
//Name : James Age : 20
实体类
- 类中的成员变量都要私有,并且对外提供相应的getXxx,setXxx方法
- 类中必须要有一个公共的无参构造器
主要用于保存数据,操作数据应该重新定义一个类