【有道云笔记】五 3.19 类、封装、构造方法
https://note.youdao.com/s/79V1e1A2
一、类
1、定义
类:对现实世界中事物的抽象。Student
对象:现实世界中具体的个例。
面向对象的特征:抽象、封装、继承、多态
OOP:Object Oriented Programming 面向对象
类和对象的总结:
1、现实世界都是由很多对象组成的,基于对象的共同特征抽象出类。
2、对象:真实存在的对象
3、类中包含:
1)所有对象共同的特征--属性(静)
2)所有对象所共有的行为--方法(动)
4、类是对象的模板,对象是类的具体实例。
5、一个类可以创建多个对象:同一个类的不同对象,结构相同,数据不同。
2、易混淆知识点
int num = 3;
int[] nums = new int[3];
Student student = new Student(); // student :变量、实例、对象
Student[] students = new Student[3];
Teacher teacher = new Teacher();
Teacher[] teachers = new Teacher[3];
int、int[]、Student、Student[]这些都是数据类型,数据类型的后面是这种类型的一个变量。
格式: 数据类型 变量
3、数据类型的默认值
int类型默认值是:0
double类型默认值是:0.0
boolean类型默认值是:false
String类型默认值是:null
int[]类型默认值是:null
Student[]类型默认值是:null
boolean[]类型默认值是:null
int[] array = new int[3]; 里面的存放默认值是0
boolean[] array = new boolean[3]; 里面的存放默认值是false
Student[] array = new Student[3];里面的存放默认值是null
@Test public void test2() { Student student = new Student(); System.out.println(student.id);//0 System.out.println(student.name);//null //System.out.println(student.ok);//false } @Test public void test3() { int[] array1 = new int[3]; boolean[] array2 = new boolean[3]; Student[] students = new Student[3]; for (int i = 0; i < students.length; i++) { System.out.println(students[i]); } //增强的for循环 for (Student student : students) { System.out.println(student); } }
4、空指针异常
ArrayIndexOutOfBoudsException 数组下标越界异常
NullPointerException空指针异常(引用数据类型)
@Test public void test4() { //NullPointerException空指针异常(引用数据类型) Student student = null; System.out.println(student);//null // null.方法 null.属性 System.out.println(student.id); }
5、toString()
public String getInfo(){ return "[Student: id="+ id +", name="+ name +", age="+ age +", gender="+ gender +"]"; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", gender='" + gender + '\'' + '}'; }
@Test public void Test4(){ Student student1 = new Student(); student1.id = 1; student1.name = "张三"; student1.age = 22; student1.gender = "男 "; System.out.println(student1.getInfo()); System.out.println(student1.toString()); System.out.println(student1); }
二、封装
一旦使用private进行修饰,那么本类仍然可以随意访问,但是超出本类范围之外就不能直接访问了。
间接访问private成员变量,就是定义一对Getteer/Setter方法,命名规则必须是getXxx或者是setXxx。
对于Getter来说,不能有参数,返回值和成员变量对应;
对于Setter来说,不能有返回值,参数和成员变量对应。
对于基本类型中的boolean值,Getter方法一定要写成isXxx的形式,而Setter规则不变。
快速生成Getter/Setter
三、构造方法
构造方法是专门用来创建对象的一个方法,当我们通过关键字new来创建时,其实就是在调用构造方法。
格式:public + 类名 (参数类型 参数名称)
构造方法的名称必须和所在类的名称完全一样,大小写也要一样
构造方法不要写返回值,就连void也不要写
构造方法不能return一个具体的返回值
构造方法是可以进行重载的。 重载:方法名称相同,参数列表不同
一旦编写一个构造方法,编译器将不再赠送无参方法,需要自己补上
构造方法和一般方法的不同:
1、构造方法是在new对象的时候运行,而一般的方法是在对象调用的时候才执行。
2、一个对象的建立,构造方法只执行一次,而一般方法可以被改对象调用多次。
四、作业
1、编写Java程序,模拟简单的计算器。
定义名为Number的类,其中有两个整型数据成员num1和num2,应声明为私有。编写构造方法,赋予num1和num2初始值,再为该类定义加(add)、减(sub)、乘(multi)、除(div)等公有成员方法,分别对两个成员变量执行加、减、乘、除的运算。
在main方法中创建Number类的对象,调用各个方法,并显示计算结果。
2、定义长方形类,含:
属性:宽、高(整型);
方法:求周长、面积;
构造方法3个:(1)无参——宽、高默认值为1;(2)1个参数——宽、高相等;(3)2个参数——宽、高各为参数值。
要求:进行测试计算周长和面积。