- class Person {
- Person() { - Person类中的构造方法
- }
- }
• 构造方法名与类名完全相同并且没有返回值类型,连void都不许有。
默认构造方法
- /*
- 编程实现Person类的定义
- */
- public class Person {
-
- String name; // 用于描述姓名的成员变量
- int age; // 用于描述年龄的成员变量
-
- // 自定义构造方法
- // String s = "张飞";
- // int i = 30;
- // String s = "关羽";
- // int i = 35;
- // 就近原则 懒人原则
- Person(String name, int age) {
- //System.out.println("我就是自定义的构造方法!");
- //name = "张飞";
- //age = 30;
- this.name = name;
- this.age = age;
- }
- // 自定义无参构造方法
- Person() {
- }
-
- // 自定义成员方法实现所有特征的打印 隐含着this关键字,this关键字代表当前正在调用的对象
- // Person this = p1; this.name = p1.name = 张飞
- // Person this = p2; this.name = p2.name = 关羽
- void show() {
- // 每当打印成员变量的数值时,让年龄增长一岁
- //this.grow();
- //grow();
- //System.out.println("我是" + this.name + ",今年" + this.age + "岁了!");
- System.out.println("我是" + name + ",今年" + age + "岁了!");
- }
- // 自定义成员方法实现年龄增长一岁的行为
- void grow() {
- age++;
- }
- // 自定义成员方法实现年龄增长参数指定数值的行为
- void grow(int age) {
- this.age += age;
- }
- // 自定义成员方法实现Person类型对象的获取并返回的行为
- //String getName(){}
- Person getPerson() {
- // 返回当前调用对象本身 Person tp = new Person(); return tp;
- return this;
- }
-
- public static void main(String[] args) {
-
- // 1.声明一个Person类型的引用指向Person类型的对象
- // 当类中没有提供构造方法时,则下面调用默认构造方法,若类中提供构造方法后,则下面调用类中提供的版本
- Person p1 = new Person("张飞", 30);
- // 并打印特征
- p1.show(); // null 0 张飞 30
-
- Person p2 = new Person("关羽", 35);
- p2.show(); // 关羽 35
-
- Person p3 = new Person();
- p3.show(); // null 0
-
- System.out.println("----------------------------------------------------");
- // 2.实现重载方法的调用和测试
- p1.grow();
- p1.show(); // 张飞 31
- p1.grow(3);
- p1.show(); // 张飞 34
-
- System.out.println("----------------------------------------------------");
- // 3.调用成员方法获取对象
- Person p4 = p1.getPerson();
- System.out.println("p1 = " + p1);
- System.out.println("p4 = " + p4);
-
- }
- }
案例题目
- /*
- 编程实现Point类的定义
- */
- public class Point {
-
- int x; // 用于描述横坐标的成员变量
- int y; // 用于描述纵坐标的成员变量
-
- // 自定义无参构造方法
- Point() {}
- // 自定义有参构造方法
- Point(int x, int y) {
- this.x = x;
- this.y = y;
- }
-
- // 自定义成员方法实现特征的打印
- void show() {
- System.out.println("横坐标是:" + x + ",纵坐标是:" + y);
- }
- // 自定义成员方法实现纵坐标减1的行为
- void up() {
- y--;
- }
- // 自定义成员方法实现纵坐标减去参数指定数值的行为
- void up(int y) {
- this.y -= y;
- }
-
- public static void main(String[] args) {
-
- // 1.使用无参方式构造对象并打印特征
- Point p1 = new Point();
- p1.show(); // 0 0
-
- // 2.使用有参方式构造对象并打印特征
- Point p2 = new Point(3, 5);
- p2.show(); // 3 5
-
- System.out.println("------------------------------------");
- // 3.调用重载的成员方法
- p2.up();
- p2.show(); // 3 4
- p2.up(2);
- p2.show(); // 3 2
- }
- }
第二节:方法重载(重点)
- /*
- 编程实现方法重载主要形式的测试
- */
- public class OverloadTest {
-
- // 自定义成员方法
- void show() {
- System.out.println("show()");
- }
- void show(int i) { // ok 体现在方法参数的个数不同
- System.out.println("show(int)");
- }
- void show(int i, double d) { // ok 体现在方法参数的个数不同
- System.out.println("show(int, double)");
- }
- void show(int i, int j) { // ok 体现在方法参数的类型不同
- System.out.println("show(int, int)");
- }
- void show(double d, int i) { // ok 体现在方法参数的顺序不同
- System.out.println("show(double, int)");
- }
- /*
- void show(double a, int b) { // error 与参数变量名无关
- System.out.println("show(double, int)");
- }
- */
- /*
- int show(double d, int i) { // error, 与返回值类型无关
- System.out.println("show(double, int)");
- }
- */
-
- public static void main(String[] args) {
-
- // 1.声明OverloadTest类型的引用指向该类型的对象
- OverloadTest ot = new OverloadTest();
- // 2.调用show方法
- ot.show();
- ot.show(66);
- ot.show(66, 3.14);
- ot.show(66, 118);
- ot.show(3.14, 118);
- //ot.show(3.14, 66);
- }
- }
重载的体现形式
- /*
- 编程实现Point类的定义
- */
- public class Point {
-
- int x; // 用于描述横坐标的成员变量
- int y; // 用于描述纵坐标的成员变量
-
- // 自定义无参构造方法
- Point() {}
- // 自定义有参构造方法
- Point(int x, int y) {
- this.x = x;
- this.y = y;
- }
-
- // 自定义成员方法实现特征的打印
- void show() {
- System.out.println("横坐标是:" + x + ",纵坐标是:" + y);
- }
- // 自定义成员方法实现纵坐标减1的行为
- void up() {
- y--;
- }
- // 自定义成员方法实现纵坐标减去参数指定数值的行为
- void up(int y) {
- this.y -= y;
- }
-
- public static void main(String[] args) {
-
- // 1.使用无参方式构造对象并打印特征
- Point p1 = new Point();
- p1.show(); // 0 0
-
- // 2.使用有参方式构造对象并打印特征
- Point p2 = new Point(3, 5);
- p2.show(); // 3 5
-
- System.out.println("------------------------------------");
- // 3.调用重载的成员方法
- p2.up();
- p2.show(); // 3 4
- p2.up(2);
- p2.show(); // 3 2
- }
- }
重载的实际意义
- /*
- 编程实现this关键字的使用
- */
- public class ThisTest {
-
- // 自定义构造方法
- ThisTest() {
- // this代表当前正在构造的对象
- System.out.println("构造方法中:this = " + this);
- }
- // 自定义成员方法
- void show() {
- // this代表当前正在调用的对象
- System.out.println("成员方法中:this = " + this);
- }
-
- public static void main(String[] args) {
-
- // 1.声明ThisTest类型的引用指向该类型的对象
- ThisTest tt = new ThisTest();
- // 2.调用show方法
- tt.show();
- System.out.println("main方法中:tt = " + tt);
-
-
-
- }
- }
工作原理
- /*
- 编程实现Boy类的定义
- */
- public class Boy {
-
- String name; // 用于描述姓名的成员变量
-
- // 自定义构造方法
- Boy() {
- // 调用本类中的有参构造方法
- //this("无名");
- System.out.println("无参构造方法!");
- }
- Boy(String name) {
- // 调用本类中的无参构造方法
- this();
- System.out.println("=========有参构造方法!");
- this.name = name;
- }
- // 自定义成员方法实现特征的打印
- void show() {
- System.out.println("我的名字是:" + name);
- }
-
- public static void main(String[] args) {
-
- // 1.使用无参方式构造对象并打印特征
- Boy b1 = new Boy();
- b1.show(); // null
-
- System.out.println("-----------------------------------");
- // 2.使用有参方式构造对象并打印特征
- Boy b2 = new Boy("张飞");
- b2.show(); // 张飞
-
- System.out.println("-----------------------------------");
- // 3.引用变量的数值可以为空
- //Boy b3 = null;
- //b3.show(); // 编译ok,运行会发生NullPointerException空指针异常 算术异常、数组下标越界异常
- Boy b3 = b2;
- b3.show(); // 张飞
- }
- }
- /*
- 编程实现累乘积的计算并打印
- */
- public class JieChengTest {
-
- // 自定义成员方法实现将参数n的阶乘计算出来并返回
- // 1! = 1; 2! = 1*2; 3! = 1*2*3; ... n! = 1*2*3*...*n;
- int show(int n) { // int n=5; int n = 4; int n = 3; int n = 2; int n = 1;
- // 递推的方式
- /*
- int num = 1;
- for(int i = 1; i <= n; i++) {
- num *= i;
- }
- return num;
- */
- /*
- 5! = 5 * 4 * 3 * 2 * 1;
- 4! = 4 * 3 * 2 * 1;
- 3! = 3 * 2 * 1;
- 2! = 2 * 1;
- 1! = 1;
-
- 5! = 5 * 4!;
- 4! = 4 * 3!;
- 3! = 3 * 2!;
- 2! = 2 * 1!;
- 1! = 1;
-
- n! = n * (n-1)!;
-
- */
- // 递归的方式
- // 当n的数值为1时,则阶乘的结果就是1
- /*
- if(1 == n) {
- return 1;
- }
- */
- if(1 == n) return 1;
- // 否则阶乘的结果就是 n*(n-1)!
- return n*show(n-1);
- // show(5) => return 5*show(4); => 120
- // show(4) => return 4*show(3); => 24
- // show(3) => return 3*show(2); => 6
- // show(2) => return 2*show(1); => 2
- // show(1) => return 1; => 1
- }
-
- public static void main(String[] args) {
-
- // 1.声明JieChengTest类型的引用指向该类型的对象
- JieChengTest jct = new JieChengTest();
- // 2.调用方法进行计算并打印
- int res = jct.show(5);
- System.out.println("最终的计算结果是:" + res); // 120
- }
- }
递归的基本概念
- /*
- 编程实现费氏数列的计算并打印 功能类/封装类
- */
- public class Fee {
-
- // 自定义成员方法实现费氏数列中第n项数值的计算并返回,n由参数指定
- // 1 1 2 3 5 8 13 21 ....
- int show(int n) { // int n = 5; int n = 4; int n = 3; int n = 2; int n = 1;
- // 1.使用递归的方式进行计算
- /*
- // 当n=1或者n=2时,结果是1
- if(1 == n || 2 == n) {
- return 1;
- }
- // 否则结果是前两项的和
- return show(n-1) + show(n-2);
- // show(5) => return show(4) + show(3); => 5
- // show(4) => return show(3) + show(2); => 3
- // show(3) => return show(2) + show(1); => 2
- // show(2) => return 1; => 1
- // show(1) => return 1; => 1
- */
- // 2.使用递推的方式进行计算
- int ia = 1;
- int ib = 1;
- for(int i = 3; i <= n; i++) {
- int ic = ia + ib;
- ia = ib;
- ib = ic;
- }
- return ib;
- }
- }

- /*
- 编程实现对费氏数列类的测试 测试类
- */
- public class FeeTest {
-
- public static void main(String[] args) {
-
- // 1.声明FeeTest类型的引用指向该类型的对象
- Fee ft = new Fee();
- // 2.调用方法计算并打印
- int res = ft.show(55);
- System.out.println("计算的结果是:" + res); // 5
- }
- }
第五节:封装(重中之重)
- /*
- 编程实现Student类的封装 封装类
- */
- public class Student {
-
- // 1.私有化成员变量,使用private关键字修饰
- // private关键字修饰表示私有的含义,也就是该成员变量只能在当前类的内部使用
- private int id; // 用于描述学号的成员变量
- private String name; // 用于描述姓名的成员变量
-
- // 3.在公有的构造方法中调用set方法进行合理值的判断
- public Student() {}
- public Student(int id, String name) {
- //this.id = id;
- //this.name = name;
- setId(id);
- setName(name);
- }
-
- // 2.提供公有的get和set方法,并在方法体中进行合理值的判断
- // 使用public关键字修饰表示公有的含义,也就是该方法可以在任意位置使用
- public int getId() {
- return id;
- }
- public void setId(int id) {
- if(id > 0) {
- this.id = id;
- } else {
- System.out.println("学号不合理哦!!!");
- }
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
-
- // 自定义成员方法实现特征的打印
- // 什么修饰符都没有叫做默认的访问权限,级别介于private和public之间
- public void show() {
- //System.out.println("我是" + name + ",我的学号是" + id);
- System.out.println("我是" + getName() + ",我的学号是" + getId());
- }
- }
- /*
- 编程实现Student类的测试
- */
- public class StudentTest {
-
- public static void main(String[] args) {
-
- // 1.声明Student类型的引用指向Student类型的对象
- Student s1 = new Student();
- // 2.对成员变量进行赋值并打印
- //s1.id = -1001;
- //s1.name = "张飞";
- s1.setId(-1001);
- s1.setName("张飞");
- s1.show(); // 1001 张飞
-
- System.out.println("----------------------------------------------------");
- // 3.使用有参方式构造对象并打印特征
- Student s2 = new Student(-1001, "张飞");
- s2.show();
- }
- }
- /*
- 编程实现学生信息的录入和打印
- */
-
- import java.util.Scanner;
-
- public class StudentTest2 {
-
- public static void main(String[] args) {
-
- // 1.提示用户输入学生的人数并使用变量记录
- System.out.println("请输入学生的人数:");
- Scanner sc = new Scanner(System.in);
- int num = sc.nextInt();
-
- // 2.根据学生的人数准备对应的一维数组
- // int[] arr = new int[3]; - 表示声明一个长度为3元素类型为int类型的一维数组
- // 数组中的每个元素都是int类型,也就是说数组中的每个元素都可以看做是一个int类型的变量,使用整数数据进行初始化 arr[0] = 10;
- // 下面的代码是声明一个长度为num元素类型为Student类型的一维数组
- // 数组中的每个元素都是Student类型,也就是说数组中的每个元素都可以看做Student类型的变量,arr[0] = new Student();
- Student[] arr = new Student[num];
-
-
- // 3.提示用户输入每个学生的信息(学号 姓名)并记录到一维数组中
- for(int i = 0; i < num; i++) {
- System.out.println("请输入第" + (i+1) + "个学生的信息(学号 姓名):");
- arr[i] = new Student(sc.nextInt(), sc.next());
- }
-
- System.out.println("-----------------------------------------------");
- // 4.打印所有学生信息
- System.out.println("该班级的所有学生信息有:");
- for(int i = 0; i < num; i++) {
- //System.out.println(arr[i]);
- arr[i].show();
- }
- }
- }
JavaBean的概念(了解)