面向对象
1.概念
类:对现实世界中事物的抽象。Student
对象:现实世界中具体的个体。张三、李四 这些具体的学生
面向对象的特征:抽象、封装、继承、多态
OOP: Object Oriented Programming 面向对象编程
类和对象的总结:
1、现实世界都是由很多对象组成的,基于对象的共同特征抽象出类。
2、对象:真实存在的对象
3、类中包含:
1)所有对象所共有的特征--属性(静)
2)所有对象所共有的行为--方法(动)
4、类是对象的模板,对象是类的具体实例。
5、一个类可以创建多个对象:同一个类的不同对象,结构相同,数据不同。
2.构造方法
-
特点:1、方法名和类名一样 2、没有返回值
-
构造方法:无参构造方法、有参构造方法
-
无参构造方法:如果不写Java默认提供这样一个无参构造方法,如果自己写了,Java就不会提供了。
//java会默认提供一个无参构造方法
//如果自己构造了,就不提供了
public Student(){
System.out.println("Student.Student");
}
-
有参构造方法:
// 有参构造方法
public Student(int id,String name,int age,String gender){
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
}
-
this
Student student = new Student(1, "zhansgan", 20);
this.id = id;
this代表当前对象,把通过构造方法传递过来的值赋值给当前对象的id。
如果不写任何构造方法,系统默认提供一个无参数构造方法,只是我们看不到而已。
如果自己写了任何一个构造方法,系统就不会提供这个默认无参构造方法。
所以说如果自己写了一个带参数的构造方法,就要把无参数构造方法也要写上。
(后面使用或者学习的一些框架要new这个无参数的构造方法)
(只要你写了任何一个构造方法,不管有参没参,系统都不会给你提供默认无参构造方法)
构造方法和一般方法的不同:
1、构造方法是在new对象的时候运行,而一般的方法是在对象调用的时候才执行。
2、一个对象的建立,构造方法只执行一次,而一般方法可以被改对象调用多次。
相关代码:
Student.java
//实体类:和数据库表一一对应
public class Student {
//属性 field :静态的描述这个事物的特征
// private属性私有:访问范围是当前类
private int id;
private String name;
private int age;
private String gender;
//java会默认提供一个无参构造方法
//如果自己构造了,就不提供了
public Student(){
System.out.println("Student.Student");
}
// 有参构造方法
public Student(int id,String name,int age,String gender){
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
}
public Student(int id,String name,int age){
//调用上一个构造方法的
this(id,name,age,"女");//放在第一行
}
// 实例方法 必须先new出一个对象 右击->Genrate->set and get
public int getId() {
return id;//return this.id
}
public void setId(int id) {
//就近原则 id = id
// this 当前new出来对象
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
//Generate -> toString
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", denger='" + gender + '\'' +
'}';
}
//
method
// public String getInfo(){
// return "Student[id:"+id+",name:"+name+",age:"+age+",gender:"+gender+"]";
// }
// }
}
Teacher.java
public class Teacher {
private int id;
private String name;
private int age;
private double salary;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Teacher{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", salary=" + salary +
'}';
}
}
OOPDemo.java
import org.junit.Test;
//OOP面向对象编程
public class OOPDemo {
// @Test
// public void test1(){
// Student student1 = new Student();
student1变量、new出来的对象
// student1.id = 1;
// student1.name = "xxh";
// student1.age = 21;
// student1.gender="女";
// System.out.println(student1.name);
// System.out.println(student1.getInfo());
// }
@Test
public void test2(){
Student student1 = new Student();
student1.setId(1);
int id = student1.getId();
System.out.println(id);
System.out.println(student1);
//
Student student2 = new Student(1,"xxh",21,"女");
System.out.println(student2);
}
@Test
public void test3(){
Teacher teacher = new Teacher();
teacher.setId(1);
teacher.setName("xxh");
teacher.setAge(21);
teacher.setSalary(2155);
System.out.println(teacher);
System.out.println(teacher.toString());
Teacher teacher1 = new Teacher();
System.out.println(teacher1.getName());//null
}
@Test
public void test4(){
// 局部变量必须要赋值
Teacher teacher = new Teacher();
// java.lang.NullPointerException
// null.属性或者null.方法
// 空指针异常
System.out.println(teacher.getName());
}
@Test
public void test5(){
int[] array1 = new int[2];
Student[] array3 = new Student[3];//new了数组,里面的学生都是空的
System.out.println(array3[0]);
Student student = new Student();//new了学生对象
array3[1]=student;
System.out.println(array3[1]);
}
}