【笔记】Java基础 03——方法、POJO

十一、方法

  • 概述

  1. 在其他语言中可能被称为“函数”
  2. 方法就好像一个工厂

参数(原料)
返回值(产出物)

  • 定义

  1. 格式
    修饰符 返回值类型 方法名称(参数类型 参数名称){
    		  方法体
    		  return 返回值;
    	}
  1. 解释

a. 修饰符:目前的固定写法,两个关键字,public static
b. 返回值类型:方法最终产生的数据是什么类型
c. 方法名称:自定义的名字,规则与变量一样
d. 参数类型:进入方法的数据是什么类型
e. 参数名称:进入方法的数据对应的变量名称
f. 方法体:需要执行的若干行代码
g. return:有两个作用,一是结束当前方法,二是带着后面的返回值交给调用处
h. 返回值:方法的最终数据结果

  1. 注意事项

a. 返回值类型必须和返回值对应
b. 若参数有多个,则使用逗号分隔
c. 若不需要参数,则小括号内可留空
d. 多个方法之间定义的前后顺序无所谓
e. 方法中不能嵌套定义方法
f. 方法定义后,不会执行,需要调用执行

  1. 代码示例

示例一:

		public class Demo00_MethodDefine {
			/*
			* 定义方法三要素:返回值类型,方法名称,参数列表
			*/
			public static int sum(int a, int b) {
				System.out.println("成功调用sum方法!");
				int result = a + b;
				return result;
			}
		
			public static void main(String[] args) {
			}	
		}	

示例二:键盘输入两个int数字,定义一个方法求出其中的最大值

		import java.util.Scanner;
		
		public class Demo02_MethodMax {
		
			//键盘输入两个int数字,定义一个方法求出其中的最大值
			public static void main(String[] args) {
				Scanner sc = new Scanner(System.in);
				
				System.out.println("请输入第一个int数字:");
				int a = sc.nextInt();
				System.out.println("请输入第二个int数字:");
				int b = sc.nextInt();
				
				//调用getMax方法
				int max = getMax(a, b);
				System.out.println("最大值为:" + max);
			}
			
			public static int getMax(int x, int y) {
				if(x > y) {
					return x;
				}else {
					return y;
				}
			}
		}
  • 调用

  1. 单独调用

格式:
方法名称(参数值);

弊端:
无法使用方法的返回值

  1. 打印调用
      // 格式
      System.out.println(方法名称(参数值));
  1. 赋值调用

格式
数据类型 变量名称 = 方法名称(参数值);

注意:
调用方法,并将返回值交给一个变量。
变量的数据类型必须和方法的返回值类型对应

  1. 图解方法的调用流程在这里插入图片描述
  2. 代码示例
		public class Demo01_MethodInvoke {
		
			public static void main(String[] args) {
				//单独调用
				sum(20,30);
				
				//打印调用
				System.out.println(sum(12, 20));
				
				//赋值调用
				int all = (sum(5, 4));
				System.out.println(all);
			}
		}
  • 无返回值的方法

  1. 格式
     修饰符 void 方法名称(参数类型 参数名称){
         方法体
     	return; //一般省略
     }
  1. 注意

a. 返回值与参数没有必然联系,没有返回值不代表不能有参数
b. 不能return一个具体的返回值
c. 只能使用【单独调用】,不能使用【打印调用】或【赋值调用】

		public class Demo03_MethodVoid {
		
			public static void main(String[] args) {
				//单独调用
				helloHelloWorld();
				System.out.println("======================");
				
				helloHelloWorldCount(3);
				System.out.println("======================");
			}
			
			
			/*
			 * 定义一个方法,用来固定10次输出
			 * 
			 * 返回值类型:屏幕打印输出,没有结果数据需要还给调用处,无返回值
			 */
			public static void helloHelloWorld() {
				for(int i = 0; i < 10; i++) {
					System.out.println( i + " HelloWorld!");
				}
				return; // 最后一行return语句可以省略
				return 100; // 错误写法!void就不能有具体的返回值
			}
			
			
			/*
			 * 定义一个方法,用来打印输出指定次数的helloworld
			 * 
			 * 参数列表:需要知道到底是几次,所以需要一个int类型
			 */
			public static void helloHelloWorldCount(int count) {
				for(int i = 0; i < count; i++) {
					System.out.println( i + " HelloWorld!");
				}
			}
  1. 对比返回值的有无

a. 定义一个方法,用来【求出】数组元素的总和。(告诉我最终结果是多少)
b. 定义一个方法,用来【打印】数组元素的总和。你自己打印就得了,不用告诉我结果)

		/*
		 * 对比两种情况:
		 * 
		 * 1. 定义一个方法,用来【求出】数组元素的总和。(告诉我最终结果是多少)
		 * 2. 定义一个方法,用来【打印】数组元素的总和。(你自己打印就得了,不用告诉我结果)
		 */
		public class Demo04_VoidVsReturn {
		
			public static void main(String[] args) {
				int[] array = {56,-9,-63,45,65,89,24};
				
				//赋值调用
				System.out.println("sumA求出的总和为:" + sumA(array));
				
				//单独调用
				sumB(array);
			}
			
			/*
			 * 1. 定义一个方法,用来【求出】数组元素的总和。
			 */
			public static int sumA(int[] arr) {
				int sum = 0;
				for(int i = 0; i < arr.length; i++) {
					sum += arr[i];
				}
				return sum;  //sum中的数据就是最终结果
			}
			
			/*
			 * 2. 定义一个方法,用来【打印】数组元素的总和。
			 */
			public static void sumB(int[] arr) {
				int sum = 0;
				for(int i = 0; i < arr.length; i++) {
					sum += arr[i];
				}
				System.out.println("sumB打印的总和:" + sum);
			}
		}
  1. 图解
    无返回值的方法
  2. 代码示例
    示例:遍历数组,是指对数组当中的每一个数据元素进行逐一、挨个儿处理。默认的遍历就是打印输出。
		public class Demo05_PrintArray {
		
			public static void main(String[] args) {
				int[] array = {56,45,546,98,34,24,64,24,68};
				
				//调用方法,传入参数数据(一个数组)
				printArray(array);
			}
			
			//定义printArray方法,用来对数组进行遍历打印输出
			public static void printArray(int[] arr) {
				for(int i = 0; i < arr.length; i++) {
					System.out.println(arr[i]);
				}
			}
		public class Demo06_PrintArrayFormat {
		
			public static void main(String[] args) {
				int[] array = {10,20,30,40,50};
				
				//调用
				printArrayFormat(array);
			}
			
			/*
			 * 定义一个方法,进行数组遍历,但是要求使用指定格式
			 * 
			 * 输出:[10,20,30,40,50]
			 */
			public static void printArrayFormat(int[] arr) {
				/*
				 * println:通过写入行分隔符终止当前行
				 * print:只打印给定内容
				 */
				System.out.print("[");
				for(int i = 0; i < arr.length; i++) {
					System.out.print(arr[i]);
					
					//判断是否打印结束
					if(i == arr.length - 1) {
						System.out.print("]");
					}else {
						System.out.print(",");
					}
				}
			}
		}
  • 方法重载(Overload)

  1. 方法名称相同,但是参数列表不同
  2. 注意:

a. 参数个数不同:sum(int a, int b) sum(int a, int b,int c)
b. 参数的类型不同:sum(int a, int b) sum(int a, double b)
c. 参数的多类型顺序不同:sum(int a, double b) sum(double b,int a)
d. 不能根据返回值类型不同进行重载
e. 与参数名称无关:sum(int a, int b) sum(int x, int y)

  1. 代码示例 (当时没有敲这段代码,直接cv下来的)
public class MethodOverload {
	
	public static void main(String[] args) {
//		System.out.println(sumTwo(10, 20)); // 30
//		System.out.println(sumThree(10, 20, 30)); // 60
//		System.out.println(sumFour(10, 20, 30, 40)); // 100
		
		System.out.println(sum(10, 20)); // 30
		System.out.println(sum(10, 20, 30)); // 60
		System.out.println(sum(10, 20, 30, 40)); // 100
		
//		System.out.println(sum(10, 20, 30, 40, 50)); // 错误的写法!因为没有任何一种重载形式能对上
		System.out.println("===============");
		
		System.out.println(sum(10, 20)); // int
		System.out.println(sum(10.5, 20.5)); // double
		System.out.println("===============");
		
		System.out.println(sum(2.5, 10)); // 先double后int
		System.out.println(sum(10, 2.5)); // 先int后double
	}
	
	public static double sum(int a, double b) {
		System.out.println("先int后double的方法执行!");
		return a + b; // 注意!不同数据类型的数值相加,谁的范围大,结果就是谁
	}
	
	public static double sum(double a, int b) {
		System.out.println("先double后int的方法执行!");
		return a + b; // 注意!不同数据类型的数值相加,谁的范围大,结果就是谁
	}
	
	public static double sum(double a, double b) {
		System.out.println("有2个double参数的方法执行!");
		return a + b;
	}
	
	public static int sum(int a, int b) {
		System.out.println("有2个int参数的方法执行!");
		return a + b;
	}
	
	// 错误写法!与参数的名称无关
//	public static int sum(int x, int y) {
//		System.out.println("有2个int参数的方法执行!");
//		return x + y;
//	}
	
	// 错误写法!重载与返回值无关!
//	public static double sum(int a, int b) {
//		System.out.println("有2个int参数的方法执行!");
//		return a + b + 0.0;
//	}
	
	public static int sum(int a, int b, int c) {
		System.out.println("有3个int参数的方法执行!");
		return a + b + c;
	}
	
	public static int sum(int a, int b, int c, int d) {
		System.out.println("有4个int参数的方法执行!");
		return a + b + c + d;
	}

}

  • 参数传递

  1. 什么叫做“参数传递”?

也就是在调用方法的时候,向方法内传入一些数据的动作。

  1. 分类

形式参数:
在【定义】方法的时候,写在小括号之内的参数。(被动接收数据的)

       public static int sum(int a, int b) {...}  //这里的a和b是在定义的时候写的,所以是形式参数。

实际参数:
在【调用】方法的时候,真正传入方法里的数据,叫做实际参数。(主动传入数据的)

      int num = sum(10, 20; //这里的10和20是在调用的时候传入方法的,所以它们是实际参数。
        int x = 10;  
        int y = 20;
        int result = sum(x,y);  //这里的x和y也是在调用方法的时候传入的,所以也是实际参数。
  1. 参数传递的过程中,有两项规则

规则1: 对于基本数据类型(以及String)来说,形参的操作【不会】影响实参。
规则2: 对于引用数据类型(除了String)来说,形参的操作【会】影响实参。
解释1
在这里插入图片描述
解释2
在这里插入图片描述

  1. 代码示例

示例一:基本类型传参

		/*
		 * 对于基本数据类型(以及String)来说,形参的操作【不会】影响实参。
		 */
		public class Demo07_MethodParamBasic {
		
			public static void main(String[] args) {
				int a = 10, b = 20;
				System.out.println("a = " + a);
				System.out.println("b = " + b);
				System.out.println("======================");
				
				change(a,b); //实参
				
				System.out.println("======================");
				System.out.println("a = " + a);
				System.out.println("b = " + b);
			}
			
			//定义一个方法,用来将参数扩大10倍
			public static void change(int x, int y) { //形参
				x *= 10;
				y *= 10;
				System.out.println("x = " + x);
				System.out.println("y = " + y);		
			}
		}
		

示例二:引用类型传参

		/*
		 * 对于引用数据类型(除了String)来说,形参的操作【会】影响实参。
		 */
		public class Demo08_MethodParamRef {
		
			public static void main(String[] args) {
				int[] array = {10,20,30};
				System.out.println(array[0]);
				System.out.println(array[1]);
				System.out.println(array[2]);
				System.out.println("=============");
				
				change(array);
				
				System.out.println("=============");
				System.out.println(array[0]);
				System.out.println(array[1]);
				System.out.println(array[2]);
			}
			
			public static void change(int[] arr) {
				arr[0] *= 10;
				arr[1] *= 10;
				arr[2] *= 10;
				
				System.out.println(arr[0]);
				System.out.println(arr[1]);
				System.out.println(arr[2]);
			}
		}

示例三:方法的参数类型

		/*
		 * 方法的参数可以是什么类型?
		 * 1. 基本类型
		 * 2. 数组
		 * 3. 字符串
		 * 4. 自定义的类
		 * 
		 * 结论:所有数据类型都可以作为方法的参数类型。
		 */
		public class Demo09_MethodParam {
		
			public static void main(String[] args) {
				method1 (100);
				System.out.println("============");
				
				int[] arr = { 10, 20, 30 };
				method2(arr);
				System.out.println("============");
				
				method3 ("How do you do?");
				System.out.println("============");
				
				Demo10_Student xueSheng = new Demo10_Student("赵丽颖", 20);
				method4 (xueSheng);
			}
			
			// 使用基本类型作为方法的参数,可以
			public static void method1(int num) {
				num += 20;
				System.out.println(num); // 120
			}
			
			// 使用数组作为方法的参数,也可以
			public static void method2(int[] array) {
				System.out.println(array[0]); // 10
				System.out.println(array[1]); // 20
				System.out.println(array[2]); // 30
			}
			
			// 使用字符串作为方法的参数,也可以
			public static void method3(String str) {
				String result = str.replace("o", "*");
				System.out.println(result); // H*w d* y*u d*?
			}
			
			// 使用自定义的类作为方法的参数,照样可以!
			public static void method4(Demo10_Student stu) {
				// 姓名:赵丽颖,年龄:20
				System.out.println("姓名:" + stu.getName() + ",年龄:" + stu.getAge());
			}
		}
		

示例四:方法的返回值类型

		// 先定义一个学生类
		public class Demo10_Student {
		
			private String name;
			private int age;
			
			public Demo10_Student() {
				
			}
			
			public Demo10_Student(String name, int age) {
				this.name = name;   // 马上会讲到
				this.age = age;
			}
		
			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;
			}
			
		}
		/*
		 * 方法的返回值可以是什么类型?
		 * 
		 * 1. 基本类型
		 * 2. 数组
		 * 3. 字符串
		 * 4. 自定义的类
		 * 
		 * 所有数据类型都可以作为方法的返回值类型。
		 */
		public class Demo11_MethodReturn {
			public static void main(String[] args) {
				int result1 =method1 ();
				System.out.println(result1); // 100
				System.out.println("==================");
				
				int[] result2 = method2 ();
				System.out.println(result2[0]); // 10
				System.out.println(result2[1]); // 20
				System.out.println("==================");
				
				String result3 = method3 ();
				System.out.println(result3.replace("o", "*")); // H*w d* y*u d*?
				System.out.println("==================");
				
				Demo10_Student result4 = method4();
				// 姓名:赵丽颖,年龄:20
				System.out.println("姓名:" + result4.getName() + ",年龄:" + result4.getAge());
			}
			
			// 使用基本类型作为方法的返回值,可以
			public static int method1() {
				int num = 100;
				return num;
			}
			
			// 使用数组类型作为方法的返回值,也可以
			public static int[] method2() {
				int[] array = { 10, 20 };
				return array;
			}
			
			// 使用字符串作为方法的返回值,还可以
			public static String method3() {
				String str = "How do you do?";
				return str;
			}
			
			// 使用自定义的类作为方法的返回值,仍然可以
			public static Demo10_Student method4() {
				Demo10_Student stu = new Demo10_Student("赵丽颖", 20);
				return stu;
			}
		}

十二、POJO

  • 概述

  1. 面向过程思想:注重于每一个步骤怎么做,整体过程是怎样的,每个操作需要自己亲力亲为。

  2. 面向对象思想:但需要实现一个功能的时候,不看重具体过程和步骤是怎样的 ,而关心“谁能帮我做这件事”。

  3. 特征:封装性、继承性、多态性

  4. 代码示例

		import java.util.Arrays;
		
		public class Demo01_PrintArray {
		
			public static void main(String[] args) {
				//面向过程
				int[] array = {10,32,65,98,45};
				
				System.out.print("[");
				
				for (int i = 0; i < array.length; i++) {
					System.out.print(array[i]);
					
					if(i == array.length - 1) {
						System.out.println("]");
					}else { 
						System.out.print(", ");
					}
				}
				
				System.out.println("====================");
				
				//面向对象
				System.out.println(Arrays.toString(array));
			}
		}
  • 类和对象的关系

  1. 属性:事物的描述信息(是什么)

  2. 行为:事物的能力行动方案 (能做什么)

  3. 类:抽象的,由属性和行为组成,模拟现实事物(手机设计图)

  4. 对象:具体的,是类的实例化(真正的手机)

  • 类的定义

  1. 模拟现实事物的代码手段

  2. 包含:

成员变量(属性):将变量位置直接定义在类中,在方法外
成员方法(行为):将普通的方法去掉static关键字,即为成员方法

  1. 使用类:(引用类型,见“扫描器Scanner类”)

a. 导包(同一包下,可省略,否则使用 import)
b. 创建
c. 使用

  1. 根据类创建对象

a. 创建对象:
类名称 对象名 = new 类名称();
b. 创建变量:(见“扫描器Scanner类”)
数据类型 变量名称 = new 数据类型();
c. 使用对象:
对象名.成员变量名
若没有对成员变量赋值,则输出的是堆中给的默认值
d. 使用对象当中的成员方法
对象名.成员方法名(参数);
e.总结:
想用谁就 . "点"谁

  1. 代码示例
    示例一:
		/*
		 * 先创建一个学生类
		 * 
		 * 成员变量(属性):
		 * 		String name; //姓名
		 * 		int age; //年龄
		 * 
		 * 成员方法(行为):
		 * 		public void eat() {...}
		 * 		public void sleep() {...}
		 * 		public void study() {...}
		 */
		public class Demo02_Student {
		
			//成员变量
			String name;
			int age;
			
			//成员方法
			public void eat() {
				System.out.println("吃饭");
			}
			
			public void sleep() {
				System.out.println("睡觉");
			}
			
			public void study() {
				System.out.println("学习");
			}
		}
		
		public class Demo02_UseStudent {
		
			public static void main(String[] args) {
				//创建学生对象stu1
				Demo02_Student stu1 = new Demo02_Student();
				
				//未赋值之前,使用学生对象stu1
				System.out.println(stu1.name);
				System.out.println(stu1.age);
				System.out.println("=======================");
				
				//赋值之后,使用学生对象stu1
				stu1.name = "张三";
				stu1.age = 20;
				System.out.println(stu1.name);
				System.out.println(stu1.age);
				System.out.println("=======================");
				
				//将对象中的成员变量交给names变量
				String names = stu1.name;
				System.out.println(names);
				System.out.println("=======================");
				
				//使用对象中的成员方法
				stu1.eat();
				stu1.sleep();
				stu1.study();
			}
		}
  • 内存图

  1. 一个对象

注:方法都要进栈处理
一个对象的内存图

  1. 两个对象
    03-两个对象的内存图

  2. 同一个对象
    04-同一个对象的内存图

  • 局部变量与成员变量

  1. 定义的位置不同【重点记忆】

局部变量: 定义在方法内部(成员方法的参数也是局部变量)
成员变量: 直接定义在类中,在方法外

  1. 内存中位置不同

局部变量: 在栈内存中,Stack
成员变量: 在堆内存中,Heap

  1. 生命周期不同

局部变量: 随方法的进栈而出现,随方法的出栈而消失
成员变量: 随着对象被创建而出现,随着对象被JVM回收而消失

  1. 默认值不同【重点记忆】

局部变量: 无默认值,必须被赋值才能使用
成员变量: 有默认值,后可被更改

  1. 代码示例
		/*
		 * 定义一个类,模拟手机
		 * 
		 * 组成:
		 * 属性:品牌、价格、颜色	
		 * 		—— 成员变量:
		 * 			String brand;
		 * 			double price;
		 * 			String color;
		 * 
		 * 行为:打电话、发短信	
		 * 		—— 成员方法:
		 * 			public void call(String who) {}
		 * 			public void sengMessage() {}
		 */
		public class Demo03_Phone {
		
			String brand;
			double price;
			String color;
			
			public void call(String who) {
				System.out.println("给" + who + "打电话");
			}
			
			public void sengMessage() {
				System.out.println("群发短信!");
			}
		}
		
		public class Demo03_UsePhone {
		
			public static void main(String[] args) {
				//使用类创建对象one
				Demo03_Phone one = new Demo03_Phone();
				System.out.println("创建对象one");
				
				//使用对象(默认)
				System.out.println(one.brand);
				System.out.println(one.price);
				System.out.println(one.color);
				System.out.println("=====================");
				
				//使用对象(赋值)
				one.brand = "华为";
				one.price = 5000;
				one.color = "深空灰";
				
				System.out.println(one.brand);
				System.out.println(one.price);
				System.out.println(one.color);
				System.out.println("=====================");
				
				//使用成员方法
				one.call("李四");
				one.sengMessage();
				System.out.println("==========================================");
				
				//快速选中光标所在以下的同一个单词:alt + shift + R
				
				//使用类创建对象two
				Demo03_Phone two = new Demo03_Phone();
				System.out.println("创建对象two");
				
				//使用对象(默认)
				System.out.println(two.brand);
				System.out.println(two.price);
				System.out.println(two.color);
				System.out.println("=====================");
				
				//使用对象(赋值)
				two.brand = "苹果";
				two.price = 6000.0;
				two.color = "深邃蓝";
				
				System.out.println(two.brand);
				System.out.println(two.price);
				System.out.println(two.color);
				System.out.println("=====================");
				
				//使用成员方法
				two.call("jack");
				two.sengMessage();
				System.out.println("==========================================");
				
				/*
				 * 使用类创建对象three
				 * 
				 * 将one中存储的地址值赋给three一份
				 */
				Demo03_Phone three = one;
				System.out.println("创建对象three");
				
				//使用对象(one中的对象)
				System.out.println(three.brand);
				System.out.println(three.price);
				System.out.println(three.color);
				System.out.println("=====================");
				
				//使用对象(赋新值)
				three.brand = "荣耀";
				three.price = 4000.0;
				three.color = "深邃蓝";
				
				System.out.println(three.brand);
				System.out.println(three.price);
				System.out.println(three.color);
				System.out.println("=====================");
				
				//使用成员方法
				three.call("王五");
				three.sengMessage();
				System.out.println("==========================================");
			}
		}
		
  • private关键字

  1. 作用: 确保数据安全、合理

  2. 范围: 本类范围之外无法直接使用

  3. 间接访问:为private成员变量编写一对Setter Getter方法

Getter方法: 返回值类型且与成员变量一致
Setter方法: 返回值类型必须为void,参数必须和成员变量相同
注意:
a. 对于除boolean以外的其他数据类型,Getter必须叫getXxxx,Setter必须叫setXxxx
b. 对于基本数据类型当中的boolean,那么setXxxx规则不变,而getXxxx需要写成isXxxx形式

  1. 代码示例
		public class Demo04_Person {
		
			String name;
			private int age;
			
			public void show() {
				System.out.println("我是" + name + ",今年" + age + "岁!");
			}
			
			//定义成员方法设置成员变量,Setter方法
			public void setAge(int num) {  //返回值类型必须为void,参数必须和成员变量相同
				//监测数据是否合理
				if (num <= 0 || num >= 200) {
					System.out.println("数据错误!");
				}else {
					age = num;
				}
			}
			
			//定义成员方法获取成员变量,Getter方法
			public int getAge() { //返回值的类型要与成员变量的一致!
				return age;
			}
		}
		
		public class Demo04_UsePerson {
		
			public static void main(String[] args) {
				Demo04_Person person = new Demo04_Person();
				
				//创建对象
				person.name = "张三";
				//调用方法
				person.setAge(20);
				
				//调用方法
				person.show();
				
			}
		}
  • this关键字

  1. 作用: 解决成员变量和局部变量的重名问题

  2. 用法: this.成员变量名

  3. 扩展: 通过谁调用的方法,谁就是this

  4. 代码示例

		public class Person {
			
			String name; // 我自己的名字
			
			public void sayHello(String name) { // 对方的名字
				System.out.println(name + ",你好。我是" + this.name + "。");
			}
		
		}
		
  • 构造方法

  1. 定义:

专门用来创建对象的方法。即通过new关键字创建对象时,其实就是在调用构造方法。

  1. 格式
     //定义构造方法
     public 构造方法名(参数类型 参数名称) {
     	方法体
     	return; //通常不写
     }
     
     //调用构造方法
     new 类名称()
  1. 注意:

a. 构造方法不能写返回值类型,包括void
b. 构造方法名必须和所在的类名称完全相同,包括大小写
c. 可重载
d. 若没有自定义构造方法,则默认赠送一个;若自定义了至少一个,则不再赠送

      package day06;
      
      public class Demo06_Notice {
      
      	//类中没有自定义任何构造方法,则编译器会自动赠送一个无参、无操作的构造方法,形如:public Demo06_Notice() { }
      }
     package day06;
     
     public class Demo06_NoticeConstructor {
     
     	public static void main(String[] args) {
     		//系统赠送的
     		Demo06_NoticeConstructor notice = new Demo06_NoticeConstructor();
     	}
     }
     
     //什么都不输出
  1. 构造方法的重载(overload)

重载: 方法相同,参数列表不同
好处: 定义一个无参数的构造方法,可以直接new对象;定义一个重载的全参数的构造方法,可以在new对象的同时方便对成员变量直接赋值。

  1. 代码示例
		public class Demo05_Constructor {
		
			private String name;
			private int age;
			
			//无参数的构造方法
			public Demo05_Constructor() { //没有参数就不写
				System.out.println("无参数的构造方法执行!");
			}
			
			//重载1:有参数的构造方法
			public Demo05_Constructor(int num) { //没有参数就不写
				System.out.println("重载一个参数的构造方法执行!" + num);
			}
			
			//重载2
			public Demo05_Constructor(String name,int age) {
				this.name = name;
				this.age = age;
				System.out.println("重载两个参数的构造方法执行!" + "\n" + "姓名:" + name + " 年纪:" + age);
			}
		
			//为private成员变量编写一对Setter Getter方法
			//菜单栏的Source中可以自动构造
			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 class Demo05_UseConstructor {
		
			public static void main(String[] args) {
				//过new关键字创建对象时,其实就是在调用构造方法。
				Demo05_Constructor con = new Demo05_Constructor();
				
				//调用有参构造方法
				Demo05_Constructor cons = new Demo05_Constructor(18); //18传给num
				System.out.println("========================");
				
				//通过setter方法进行赋值
				Demo05_Constructor one = new Demo05_Constructor();
				one.setName("张杰");
				one.setAge(36);
				System.out.println("名字: " + one.getName() + " , 年纪:" + one.getAge());
				System.out.println("========================");
				
				//直接在new的时候通过构造方法给成员变量赋值
				Demo05_Constructor two = new Demo05_Constructor("龙井",56);
				//改变成员变量的值
				two.setAge(60);
				System.out.println("姓名:" + two.getName() + " 年纪:" + two.getAge());
			}
		}
		
  • “标准的类”——POJO类(Plain Old Java Object)

a. 所有成员变量都要使用privete关键字私有化
b. 为每个成员变量编写一对Getter Setter方法
c. 编写一个无参构造方法
d. 编写一个全参构造方法

代码示例
示例一:

	public class Demo07_PoJo {
	
		private String name;
		private int age;
		
		//一对Getter Setter方法
		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 Demo07_PoJo() {
			
		}
		
		//全参构造
		public Demo07_PoJo(String name, int num) {
			this.name = name;  //区分
			age = num;
		}
	}
	
	public class Demo07_UsePoJo {
	
		public static void main(String[] args) {
			//默认无参构造
			Demo07_PoJo pojo1 = new Demo07_PoJo();
			pojo1.setName("gao");
			pojo1.setAge(21);
			System.out.println("姓名:" + pojo1.getName() + " 年龄:" + pojo1.getAge());
			
			//全参构造
			Demo07_PoJo pojo2 = new Demo07_PoJo("yang",19);
			System.out.println("姓名:" + pojo2.getName() + " 年龄:" + pojo2.getAge());
			//通过setter方法更改
			pojo2.setAge(20);
			System.out.println("姓名:" + pojo2.getName() + " 年龄:" + pojo2.getAge());
		}
	}
	

示例二:

	/*
	 * 定义一个类代表“人”,含有姓名和年龄,且具有打招呼的功能。
	 * 
	 * 根据类创建两个对象且赋值。
	 * 让两个对象分别和对方打招呼。
	 */
	public class Demo08_Human {
	
		private String name;
		private int age;
		
		//getter setter
		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 Demo08_Human() {
					
				}
				
				//全参构造
				public Demo08_Human(String name,int age) {
					this.name = name;
					this.age = age;
				}
				
				//成员方法
				public void sayHello(String other) {
					System.out.println(other + "您好!我是" + this.name + ",我今年" + this.age + "岁。");
				}
			}
	
	/*
	 * 定义一个类代表“人”,含有姓名和年龄,且具有打招呼的功能。
	 * 
	 * 根据类创建两个对象且赋值。
	 * 让两个对象分别和对方打招呼。
	 */
	public class Demo08_UseHuman {
	
		public static void main(String[] args) {
			//默认构造
			Demo08_Human hu1 = new Demo08_Human();
			hu1.setName("张三");
			hu1.setAge(43);
			
			//有参构造
			Demo08_Human hu2 = new Demo08_Human("李四",32);
			
			//让hu1先和hu2打招呼
			hu1.sayHello(hu2.getName());
			
			//让hu2跟hu1打招呼
			hu2.sayHello(hu1.getName());
		}
	}
	
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

憨憨憨羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值