[size=10.5000pt]* A:为什么要有方法 [size=10.5000pt] * 提高代码的复用性(可以将一个功能反复调用,不需要重复写很多次代码) [size=10.5000pt]* B:什么是方法 [size=10.5000pt] [size=10.5000pt]* 完成特定功能的代码块。 [size=10.5000pt]* C:方法的格式 [size=10.5000pt]* [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]方法体语句; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]return 返回值; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]* D:方法的格式说明 [size=10.5000pt] [size=10.5000pt]* 修饰符:目前就用 public static。后面我们再详细的讲解其他的修饰符。 [size=10.5000pt] [size=10.5000pt]* 返回值类型:就是功能结果的数据类型。 [size=10.5000pt] [size=10.5000pt]* 方法名:符合命名规则即可。方便我们的调用。 [size=10.5000pt] [size=10.5000pt]* 参数:(根据实际需求,可以有参数,也可以无参数) [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 实际参数:就是实际参与运算的。 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 形式参数;就是方法定义上的,用于接收实际参数的。 [size=10.5000pt] [size=10.5000pt]* 参数类型:就是参数的数据类型 [size=10.5000pt] [size=10.5000pt]* 参数名:就是变量名 [size=10.5000pt] [size=10.5000pt]* 方法体语句:就是完成功能的代码。 [size=10.5000pt] [size=10.5000pt]* return:结束方法的。 [size=10.5000pt] [size=10.5000pt]* 返回值:就是功能的结果,由return带给调用者。 |
[size=10.5000pt]class Demo1_Method { [size=10.5000pt] [size=10.5000pt]public static void main(String[] args) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]/* [size=10.5000pt] [size=10.5000pt]* C:方法的格式 [size=10.5000pt] [size=10.5000pt]* [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]方法体语句; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]return 返回值; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt]* D:方法的格式说明 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 修饰符:目前就用 public static。后面我们再详细的讲解其他的修饰符。 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 返回值类型:就是功能结果的数据类型。 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 方法名:符合命名规则即可。方便我们的调用。 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 参数: [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 实际参数:就是实际参与运算的。 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 形式参数;就是方法定义上的,用于接收实际参数的。 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 参数类型:就是参数的数据类型 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 参数名:就是变量名 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 方法体语句:就是完成功能的代码。 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* return:结束方法的。 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 返回值:就是功能的结果,由return带给调用者。 [size=10.5000pt] [size=10.5000pt]*/ [size=10.5000pt]} |
[size=10.5000pt]/* [size=10.5000pt]* A:如何写一个方法 [size=10.5000pt] * 1,明确返回值类型(要返回什么数据?这个功能到底要不要返回值?) * 2,明确参数列表 (需要你传入什么数据?根据数据类型来写参数) [size=10.5000pt]* B:案例演示 [size=10.5000pt] [size=10.5000pt]* 需求:求两个数据之和的案例 [size=10.5000pt]* C:方法调用图解 [size=10.5000pt]*/ [size=10.5000pt]class Demo2_Sum { [size=10.5000pt] [size=10.5000pt]public static void main(String[] args) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]/*int a = 10; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]int b = 20; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]int sum = a + b; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(sum); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]int c = 30; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]int d = 40; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]int sum2 = c + d; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(sum2);*/ [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]int sum = add(10,20); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(sum); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//add(30,40);[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//有返回值方法的单独调用,没有意义 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(add(30,40));[size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//这样调用是可以,but如果需要用这个结果不推荐这样调用 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//盘子 = 炒菜(地沟油,苏丹红,镉大米,烂白菜); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]/* [size=10.5000pt] [size=10.5000pt]求两个整数的和 [size=10.5000pt] [size=10.5000pt]1,整数的和结果应该还是整数 [size=10.5000pt] [size=10.5000pt]2,有两个未知内容参与运算 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]如何写方法 [size=10.5000pt] [size=10.5000pt]1,明确返回值类型 [size=10.5000pt] [size=10.5000pt]2,明确参数列表 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 修饰符:目前就用 public static。后面我们再详细的讲解其他的修饰符。 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 返回值类型:就是功能结果的数据类型。 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 方法名:符合命名规则即可。方便我们的调用。 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 参数: [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 实际参数:就是实际参与运算的。 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 形式参数;就是方法定义上的,用于接收实际参数的。 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 参数类型:就是参数的数据类型 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 参数名:就是变量名 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 方法体语句:就是完成功能的代码。 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* return:结束方法的。 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 返回值:就是功能的结果,由return带给调用者。 [size=10.5000pt] [size=10.5000pt]*/ [size=10.5000pt] [size=10.5000pt]public static int add(int a,int b) {[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//int a = 10,int b = 20 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]int sum = a + b; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]return sum;[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//如果有返回值必须用return语句带回 [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]/* [size=10.5000pt] [size=10.5000pt]盘子 炒菜(油,调料,米,菜) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]炒菜的动作 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]return 一盘菜; [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt]*/ [size=10.5000pt] [size=10.5000pt]} |
[size=10.5000pt]* A:方法调用(有具体返回值) * a:单独调用,一般来说没有意义,所以不推荐。 * b:输出调用,但是不够好。因为我们可能需要针对结果进行进一步的操作。 * c:赋值调用,推荐方案。 [size=10.5000pt]* B:案例演示 [size=10.5000pt] [size=10.5000pt]* a:方法不调用不执行 [size=10.5000pt] [size=10.5000pt]* b:方法与方法是平级关系,不能嵌套定义 [size=10.5000pt] [size=10.5000pt]* c:方法定义的时候参数之间用逗号隔开 [size=10.5000pt] [size=10.5000pt]* d:方法调用的时候不用在传递数据类型 [size=10.5000pt] [size=10.5000pt]* e:如果方法有明确的返回值,一定要有return带回一个值 |
[size=10.5000pt]/* [size=10.5000pt]* A:案例演示 [size=10.5000pt] [size=10.5000pt]* 需求:键盘录入两个数据,返回两个数中的较大值 [size=10.5000pt]* B:案例演示 [size=10.5000pt] [size=10.5000pt]* 需求:键盘录入两个数据,比较两个数是否相等 [size=10.5000pt]*/ [size=10.5000pt]import java.util.Scanner; [size=10.5000pt]class Test1_Method { [size=10.5000pt] [size=10.5000pt]public static void main(String[] args) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]Scanner sc = new Scanner(System.in);[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//创建键盘录入对象 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println("请输入第一个整数:"); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]int x = sc.nextInt();[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//将键盘录入的整数存储在x中 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println("请输入第二个整数:"); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]int y = sc.nextInt();[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//将键盘录入的整数存储在y中 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//int max = getMax(x,y); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//System.out.println(max); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]boolean b = isEquals(x,y); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(b); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]/* [size=10.5000pt] [size=10.5000pt]返回连个整数的较大值 [size=10.5000pt] [size=10.5000pt]1,明确返回值类型 int [size=10.5000pt] [size=10.5000pt]2,明确参数列表 int a,int b [size=10.5000pt] [size=10.5000pt]*/ [size=10.5000pt] [size=10.5000pt]public static int getMax(int a,int b) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]return a > b ? a : b; [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]/* [size=10.5000pt] [size=10.5000pt]判断两个整数是否相等 [size=10.5000pt] [size=10.5000pt]1,明确返回值类型 boolean [size=10.5000pt] [size=10.5000pt]2,明确参数列表 int a,int b [size=10.5000pt] [size=10.5000pt]*/ [size=10.5000pt] [size=10.5000pt]public static boolean isEquals(int a,int b) {[size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//isEquals 是否相等 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]return a == b; [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} |
[size=10.5000pt]作用一:写在方法里面,直接终止方法,方法不再往下执行代码. [size=10.5000pt]作用二[size=10.5000pt]:如果用在返回值类型的方法上[size=10.5000pt],如果方法返回类型为void[size=10.5000pt],[size=10.5000pt]可以加可以不加,通常都不加,系统会默认给上. [size=10.5000pt] 核心作用:一般用于有返回值的方法上,用于返回跟方法返回类型的值. [size=10.5000pt]public static boolean isEquals(int a,int b) {[size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//isEquals 是否相等 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]return a == b; [size=10.5000pt] [size=10.5000pt]} 例如这个方法: 方法返回值类型是布尔类型,我们return语句跟的就是布尔类型的结果. |
[size=10.5000pt]/* 基本数据类型的值传递,不改变原值,因为调用后就会弹栈,局部变量随之消失 引用数据类型的值传递,改变原值,因为即使方法弹栈,但是堆内存数组对象还在,可以通过地址继续访问 [size=10.5000pt] [size=10.5000pt]Java中到底是传值还是传址 [size=10.5000pt]1,既是传值,也是传地址,基本数据类型传递的值,引用数据类型传递的地址 [size=10.5000pt]2,java中只有传值,因为地址值也是值(出去面试都说这种,支持者是高司令(java之父)) [size=10.5000pt]*/ [size=10.5000pt]class Test3_Array { [size=10.5000pt] [size=10.5000pt]public static void main(String[] args) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]/*int a = 10; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]int b = 20; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println("a:"+a+",b:"+b);[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//a = 10,b = 20 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]change(a,b); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println("a:"+a+",b:"+b);[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//?*/ [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]int[] arr = {1,2,3,4,5}; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]change(arr); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(arr[1]); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public static void change(int a,int b) {[size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//a = 10, b= 20 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println("a:"+a+",b:"+b);[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//a = 10,b = 20 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]a = b;[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//a = 20 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]b = a + b;[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//b = 40 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println("a:"+a+",b:"+b);[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//a = 20, b = 40 [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public static void change(int[] arr) {[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//1,4,3,8,5 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]for(int x=0; x<arr.length; x++) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]if(arr[x]%2==0) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]arr[x]*=2; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} |
[size=10.5000pt]file:///C:\Users\ZHONGC~1\AppData\Local\Temp\ksohtml\wps6F75.tmp.jpg[size=10.5000pt] |
[size=10.5000pt]file:///C:\Users\ZHONGC~1\AppData\Local\Temp\ksohtml\wps6F85.tmp.jpg[size=10.5000pt] |
[size=10.5000pt]* A:方法的参数是类名public void print(Student s){}//print(new Student()); [size=10.5000pt] [size=10.5000pt]* 如果你看到了一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。 |
[size=10.5000pt]class Demo1_Student { [size=10.5000pt] [size=10.5000pt]public static void main(String[] args) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]print(10); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]Student s = new Student();[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//创建对象,并将对象的地址值赋值给s [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]print(s); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public static void print(int x) {[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//基本数据类型当作形式参数 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(x); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public static void print(Student stu) {[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//引用数据类型当作形式参数 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]stu.name = "张三"; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]stu.age = 23; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]stu.speak(); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt]/* [size=10.5000pt]* A:方法的参数是类名public void print(Student s){}//print(new Student()); [size=10.5000pt] [size=10.5000pt]* 如果你看到了一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。 [size=10.5000pt]*/ [size=10.5000pt]class Student { [size=10.5000pt] [size=10.5000pt]String name;[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//姓名 [size=10.5000pt] [size=10.5000pt]int age;[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//年龄 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public void speak() { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(name + "..." + age); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} |
[size=10.5000pt]• [size=10.5000pt] 如果[size=10.5000pt]你看到了一个方法的形式参数是一个类类型[size=10.5000pt]([size=10.5000pt]引用类型[size=10.5000pt])[size=10.5000pt],这里其实需要的是该类的对象。 |
[size=10.5000pt]/* 重载:方法名相同,参数列表不同,与返回值类型无关 [size=10.5000pt]重载的分类 1,参数个数不同 2,参数类型不同 [size=10.5000pt] 顺序不同 [size=10.5000pt]*/ [size=10.5000pt]class Demo4_Overload {[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//overload重载 [size=10.5000pt] [size=10.5000pt]public static void main(String[] args) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]double sum1 = add(10,20.1); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(sum1); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]int sum2 = add(10,20,30); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(sum2); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]double sum3 = add(12.3,13); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(sum3); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]/* [size=10.5000pt] [size=10.5000pt]求两个整数的和 [size=10.5000pt] [size=10.5000pt]1,返回值类型int [size=10.5000pt] [size=10.5000pt]2,参数列表 int a,int b [size=10.5000pt] [size=10.5000pt]*/ [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public static double add(int a,double b) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]return a + b; [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]/* [size=10.5000pt] [size=10.5000pt]求三个整数的和 [size=10.5000pt] [size=10.5000pt]1,返回值类型int [size=10.5000pt] [size=10.5000pt]2,参数列表 int a,int b,int c [size=10.5000pt] [size=10.5000pt]*/ [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public static int add(int a,int b,int c) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]return a + b + c; [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]/* [size=10.5000pt] [size=10.5000pt]求两个小数的和 [size=10.5000pt] [size=10.5000pt]1,返回值类型double [size=10.5000pt] [size=10.5000pt]2,参数列表 double a,double b [size=10.5000pt] [size=10.5000pt]*/ [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public static double add(double a,int b) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]return a + b; [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} |
[size=10.5000pt]/* [size=10.5000pt]* A:案例演示 [size=10.5000pt] [size=10.5000pt]* 需求:比较两个数据是否相等。 [size=10.5000pt] [size=10.5000pt]* 参数类型分别为两个int类型,两个double类型,并在main方法中进行测试 [size=10.5000pt] [size=10.5000pt]*/ [size=10.5000pt]class Test3_Overload { [size=10.5000pt] [size=10.5000pt]public static void main(String[] args) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]boolean b1 = isEquals(10,10); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(b1); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]boolean b2 = isEquals(10.5,10.5); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(b2); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]/* [size=10.5000pt] [size=10.5000pt]比较两个数据是否相等 [size=10.5000pt] [size=10.5000pt]1,返回值类型boolean [size=10.5000pt] [size=10.5000pt]2,参数列表int a,int b [size=10.5000pt] [size=10.5000pt]*/ [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public static boolean isEquals(int a,int b) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]return a == b; [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]/* [size=10.5000pt] [size=10.5000pt]比较两个数据是否相等 [size=10.5000pt] [size=10.5000pt]1,返回值类型boolean [size=10.5000pt] [size=10.5000pt]2,参数列表double a,double b [size=10.5000pt] [size=10.5000pt]*/ [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public static boolean isEquals(double a,double b) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]return a == b; [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} |
[size=11.0000pt]面向对象是基于面向过程的。在开发过程中,要完成特定的功能就去找相应的对象,如果找不到就创建相应的对象,使用对象,维护完善对象。 [size=11.0000pt]面向对象和面向过程的区别 [size=11.0000pt]面向过程强调的是功能行为; [size=11.0000pt]面向对象将功能封装成对象,强调的是具备功能的对象[size=11.0000pt],面向对象有三大特征:封装,继承,多态 |
[size=10.5000pt]* a:[size=10.5000pt]是一种更符合我们思想习惯的思想[size=10.5000pt] [size=10.5000pt] * b:[size=10.5000pt]可以将复杂的事情简单化[size=10.5000pt] [size=10.5000pt] * c:[size=10.5000pt]将我们从执行者变成了指挥者[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] * [size=10.5000pt]角色发生了转换 |
[size=10.5000pt]* A:我们学习编程是为了什么 [size=10.5000pt] [size=10.5000pt]* 为了把我们日常生活中实物用学习语言描述出来[size=10.5000pt],在java里面,我们学习用类去描述一个实体 [size=10.5000pt]* B:我们如何描述现实世界事物 [size=10.5000pt] [size=10.5000pt]* 属性[size=10.5000pt] [size=10.5000pt]就是该事物的描述信息(事物身上的名词) [size=10.5000pt] [size=10.5000pt]* 行为[size=10.5000pt] [size=10.5000pt]就是该事物能够做什么(事物身上的动词) [size=10.5000pt]* C:Java中最基本的单位是类[size=10.5000pt],Java中用class描述事物也是如此 [size=10.5000pt] [size=10.5000pt]* 成员变量[size=10.5000pt] [size=10.5000pt]就是事物的[size=10.5000pt]属性 [size=10.5000pt] [size=10.5000pt]* [size=10.5000pt]成员方法[size=10.5000pt] [size=10.5000pt]就是事物的行为 [size=10.5000pt]* D:定义类其实就是定义类的成员(成员变量和成员方法) [size=10.5000pt] [size=10.5000pt]* a:成员变量[size=10.5000pt] [size=10.5000pt]和以前定义变量是一样的,只不过位置发生了改变。在类中,方法外。 [size=10.5000pt] [size=10.5000pt]* b:成员方法 和以前定义方法是一样的,只不过把static去掉,后面在详细讲解static的作用。 [size=10.5000pt]* E:类和对象的概念 [size=10.5000pt] * a:类:是一组相关的属性和行为的集合 [size=10.5000pt] [size=10.5000pt] |
[size=10.5000pt]* b:对象:是该类事物的具体体现(类是抽象的,而对象是实际的,如人类是一种类,你是一个具体的人) [size=10.5000pt] [size=10.5000pt]* c:举例: [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 类[size=10.5000pt] [size=10.5000pt] 学生类 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 对象[size=10.5000pt] [size=10.5000pt]具体的某个学生就是一个对象 作用:简单理解,创建对象出来一般用于调用类里面的成员方法,使用类里面的功能方法. |
[size=10.5000pt]* A:在类中的位置不同 [size=10.5000pt] [size=10.5000pt]* 成员变量:在类中方法外 [size=10.5000pt] [size=10.5000pt]* 局部变量:在方法定义中或者方法声明上 [size=10.5000pt]* B:在内存中的位置不同 [size=10.5000pt] [size=10.5000pt]* 成员变量:在堆内存(成员变量属于对象,对象进堆内存) [size=10.5000pt] [size=10.5000pt]* 局部变量:在栈内存(局部变量属于方法,方法进栈内存) [size=10.5000pt]* C:生命周期不同 [size=10.5000pt] [size=10.5000pt]* 成员变量:随着对象的创建而存在,随着对象的消失而消失 [size=10.5000pt] [size=10.5000pt]* 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失 [size=10.5000pt]* D:初始化值不同 [size=10.5000pt] [size=10.5000pt]* 成员变量:有默认初始化值 [size=10.5000pt] [size=10.5000pt]* 局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。 [size=10.5000pt] [size=10.5000pt]* 注意事项: [size=10.5000pt] [size=10.5000pt]* 局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。 [size=10.5000pt] [size=10.5000pt]* 基本数据类型变量包括哪些:byte,short,int,long,float,double,boolean,char [size=10.5000pt] [size=10.5000pt]* 引用数据类型变量包括哪些:数组,类,接口,枚举 |
[size=10.5000pt]class Demo2_Person { [size=10.5000pt] [size=10.5000pt]public static void main(String[] args) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]Person p = new Person(); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]p.speak(); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} [size=10.5000pt]/* [size=10.5000pt]* A:在类中的位置不同 [size=10.5000pt] [size=10.5000pt]* 成员变量:在类中方法外 [size=10.5000pt] [size=10.5000pt]* 局部变量:在方法定义中或者方法声明上 [size=10.5000pt]* B:在内存中的位置不同 [size=10.5000pt] [size=10.5000pt]* 成员变量:在堆内存(成员变量属于对象,对象进堆内存) [size=10.5000pt] [size=10.5000pt]* 局部变量:在栈内存(局部变量属于方法,方法进栈内存) [size=10.5000pt]* C:生命周期不同 [size=10.5000pt] [size=10.5000pt]* 成员变量:随着对象的创建而存在,随着对象的消失而消失 [size=10.5000pt] [size=10.5000pt]* 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失 [size=10.5000pt]* D:初始化值不同 [size=10.5000pt] [size=10.5000pt]* 成员变量:有默认初始化值 [size=10.5000pt] [size=10.5000pt]* 局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。 E:使用方式不一样 * 成员变量:对象名.成员变量 来调用 * 局部变量:直接调用。 [size=10.5000pt] [size=10.5000pt]* 注意事项: [size=10.5000pt] [size=10.5000pt]* 局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。 [size=10.5000pt] [size=10.5000pt]* 基本数据类型变量包括哪些:byte,short,int,long,float,double,boolean,char [size=10.5000pt] [size=10.5000pt]* 引用数据类型变量包括哪些:数组,类,接口,枚举 [size=10.5000pt]*/ [size=10.5000pt]class Person { [size=10.5000pt] [size=10.5000pt]String name;[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//成员变量 [size=10.5000pt] [size=10.5000pt]int num; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public void speak() { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]int num = 10;[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//x和num都是局部变量 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(name); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(num); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} |
[size=10.5000pt]/* [size=10.5000pt]* A:栈(掌握) [size=10.5000pt] [size=10.5000pt]* 存储局部变量 ,在main方法里面运行的方法需要进栈内存压栈 (特点:先进后出) [size=10.5000pt] [size=10.5000pt]局部变量:定义在方法声明上(方法的参数里的变量)[size=10.5000pt]和方法中[size=10.5000pt]的变量 [size=10.5000pt]* B:堆(掌握) [size=10.5000pt] [size=10.5000pt]* 存储new出来的数组或对象 [size=10.5000pt]* C:方法区 * 类(.class字节码文件)加载和静态成员变量和静态成员方法加载的地方 [size=10.5000pt]* D:本地方法区 [size=10.5000pt] [size=10.5000pt]* 和系统相关 [size=10.5000pt]* E:寄存器 [size=10.5000pt] [size=10.5000pt]* 给CPU使用 [size=10.5000pt]*/ [size=10.5000pt]class Demo3_Array { [size=10.5000pt] [size=10.5000pt]public static void main(String[] args) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]int[] arr = new int[3];[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//动态初始化,创建3块连续的空间 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(arr); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]arr[0] = 10; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]arr[1] = 20; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(arr[0]); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(arr[1]); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} [size=10.5000pt] |
[size=10.5000pt]* A:构造方法概述和作用 [size=10.5000pt] *作用:创建对象(new对象)时候调用,给对象的数据(属性)进行初始化 [size=10.5000pt]* B:构造方法格式特点 [size=10.5000pt] [size=10.5000pt]* a:方法名与类名相同(大小也要与类名一致) [size=10.5000pt] [size=10.5000pt]* b:没有返回值类型,连void都没有 [size=10.5000pt] [size=10.5000pt]* c:没有具体的返回值return; |
[size=10.5000pt]class Demo1_Constructor {[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//Constructor构造 [size=10.5000pt] [size=10.5000pt]public static void main(String[] args) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]Person p = new Person();[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//在一创建对象的时候,系统就帮我调用了构造方法 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//p.Person();[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//构造方法不能用对象调用 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]p.show(); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]Person p2 = new Person();[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//再次创建对象 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]p2.show(); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt]/* [size=10.5000pt]* A:构造方法概述和作用 [size=10.5000pt] [size=10.5000pt]* 给对象的数据(属性)进行初始化 [size=10.5000pt]* B:构造方法格式特点 [size=10.5000pt] [size=10.5000pt]* a:方法名与类名相同(大小也要与类名一致) [size=10.5000pt] [size=10.5000pt]* b:没有返回值类型,连void都没有 [size=10.5000pt] [size=10.5000pt]* c:没有具体的返回值return; [size=10.5000pt]*/ [size=10.5000pt] [size=10.5000pt]class Person { [size=10.5000pt] [size=10.5000pt]private String name; [size=10.5000pt] [size=10.5000pt]private int age; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//构造方法 [size=10.5000pt] [size=10.5000pt]public Person() { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//System.out.println("Hello World!"); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//return;[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//构造方法也是有return语句的,格式是return; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]name = "张三"; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]age = 23; [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public void show() { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(name + "..." + age); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} |
[size=10.5000pt]1,如果自己不写构造方法,系统会默认帮我们添加一个无参的构造方法(可以使用XJAD反编译工具看到) [size=10.5000pt]2,[size=10.5000pt]如果自己写了有参构造或无参构造,系统将不会再帮我们提供无参构造方法. [size=10.5000pt]3,开发中如果写了有参构造[size=10.5000pt],必须养成习惯自己写无参构造,因为底层在调用我们代码时候,会调用无参构造,后面知识点会涉及到. |
[size=10.5000pt]* A:案例演示[size=10.5000pt] [size=10.5000pt] * 构造方法的重载[size=10.5000pt](就是构造方法名称一样,参数个数或者类型不同,或者参数顺序不同[size=10.5000pt])[size=10.5000pt] [size=10.5000pt] * 重载:方法名相同,与返回值类型无关(构造方法没有返回值),只看参数列表 [size=10.5000pt]* B:构造方法注意事项[size=10.5000pt] [size=10.5000pt] * a:如果我们没有给出构造方法,系统将自动提供一个无参构造方法。[size=10.5000pt] [size=10.5000pt] * b:如果我们给出了构造方法,系统将不再提供默认的无参构造方法。[size=10.5000pt] [size=10.5000pt] * 注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法 |
[size=10.5000pt]class Demo2_Person { [size=10.5000pt] [size=10.5000pt]public static void main(String[] args) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]Person p1 = new Person(); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]p1.show(); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println("---------------------"); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]Person p2 = new Person("张三",23); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]p2.show(); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println("---------------------"); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]Person p3 = new Person("李四",24); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]p3.show(); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} [size=10.5000pt]/* [size=10.5000pt]* A:案例演示 [size=10.5000pt] [size=10.5000pt]* 构造方法的重载 [size=10.5000pt] [size=10.5000pt]* 重载:方法名相同,与返回值类型无关(构造方法没有返回值),只看参数列表 [size=10.5000pt]* B:构造方法注意事项 [size=10.5000pt] [size=10.5000pt]* a:如果我们没有给出构造方法,系统将自动提供一个无参构造方法。 [size=10.5000pt] [size=10.5000pt]* b:如果我们给出了构造方法,系统将不再提供默认的无参构造方法。 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]*/ [size=10.5000pt]class Person { [size=10.5000pt] [size=10.5000pt]private String name;[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//姓名 [size=10.5000pt] [size=10.5000pt]private int age;[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//年龄 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public Person() {[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//空参构造 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println("空参的构造"); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public Person(String name,int age) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]this.name = name; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]this.age = age; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println("有参的构造"); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public void show() { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(name + "..." + age); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} |
[size=10.5000pt]* A:封装概述 [size=10.5000pt] [size=10.5000pt]* 是指隐藏对象的属性和实现细节,仅对外提供公共访问方式[size=10.5000pt]。(在java里面,对成员变量和成员方法使用private关键字就是一种封装形式的体现,用了private关键字修饰后的成员变量只能在本类中访问,不能在其他类访问,但是我们用private关键字修饰后,需要对外提供公共的访问方式,也就是对应的set/get方法,set方法主要是设置值作用,get方法主要是获取值作用[size=10.5000pt]) [size=10.5000pt] [size=10.5000pt]* B:封装好处 [size=10.5000pt] [size=10.5000pt]* 隐藏实现细节,提供公共的访问方式 [size=10.5000pt] [size=10.5000pt]* 提高了代码的复用性 [size=10.5000pt] [size=10.5000pt]* 提高安全性。 [size=10.5000pt]* C:封装原则 [size=10.5000pt] [size=10.5000pt]* 将不需要对外提供的内容都隐藏起来。 [size=10.5000pt] [size=10.5000pt]* 把属性隐藏,提供公共方法对其访问。 |
[size=10.5000pt]* A:人类赋值年龄的问题 [size=10.5000pt]* B:private关键字特点 [size=10.5000pt] [size=10.5000pt]* a:是一个权限修饰符(是什么?) [size=10.5000pt] [size=10.5000pt]* b:可以修饰成员变量和成员方法 [size=10.5000pt] [size=10.5000pt]* c:被其修饰的成员只能在本类中被访问 [size=10.5000pt]* C:案例演示 [size=10.5000pt] [size=10.5000pt]* 封装和private的应用: [size=10.5000pt] [size=10.5000pt]* A:把成员变量用private修饰(有什么用?) [size=10.5000pt] * B:提供对应的getXxx()和setXxx()方法 [size=10.5000pt] [size=10.5000pt]* private仅仅是封装的一种体现形式,不能说封装就是私有 |
[size=10.5000pt]class Demo1_Person { [size=10.5000pt] [size=10.5000pt]public static void main(String[] args) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]Person p1 = new Person(); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]p1.name = "张三";[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//调用姓名属性并赋值 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//p1.age = -17;[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//调用年龄属性并赋值 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//p1.speak();[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//调用行为 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]p1.setAge(-17); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(p1.getAge()); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt]class Person { [size=10.5000pt] [size=10.5000pt]String name;[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//姓名 [size=10.5000pt] private int age; //年龄 [size=10.5000pt] [size=10.5000pt] public void setAge(int a) { //设置年龄 if (a > 0 && a < 200) { age = a; }else { System.out.println("请回火星吧,地球不适合你"); } } [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public int getAge() {[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//获取年龄 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]return age; [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public void speak() { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(name + "..." + age); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} |
被封装后的成员变量和成员方法只能在本类中使用,其他类无法访问,我们既然做了封装,就应该对外提供公开的访问方式,所以我们提供了set和get方法来给其他类访问我们的成员变量或者成员方法. [size=10.5000pt]S[size=10.5000pt]et方法有什么用? [size=10.5000pt]主要用于设置成员变量值使用[size=10.5000pt],通过你传进来的值,对成员变量进行赋值使用 [size=10.5000pt]get方法有什么用[size=10.5000pt]? [size=10.5000pt]主要用于获取成员变量的值使用[size=10.5000pt],调用这个方法可以获取到你调用set方法后赋的值. [size=10.5000pt]顺序[size=10.5000pt]?应该先使用set方法,后使用get方法,这样才能获取到值 [size=10.5000pt] |
[size=10.5000pt]class Demo1_Person { [size=10.5000pt] [size=10.5000pt]public static void main(String[] args) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]Person p1 = new Person(); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]p1.name = "张三";[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//调用姓名属性并赋值 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//p1.age = -17;[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//调用年龄属性并赋值 [size=10.5000pt] [size=10.5000pt] p1.setAge(-17); //先set方法赋值给成员变量 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] System.out.println(p1.getAge()); //后get方法来获取成员变量的值 [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt]class Person { [size=10.5000pt] [size=10.5000pt]String name;[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//姓名 [size=10.5000pt] private int age; //年龄 [size=10.5000pt] [size=10.5000pt] public void setAge(int a) { //设置年龄 if (a > 0 && a < 200) { age = a; }else { System.out.println("请回火星吧,地球不适合你"); } } [size=10.5000pt] public int getAge() { //获取年龄 return age; } [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public void speak() { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(name + "..." + age); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} |
[size=10.5000pt]* [size=10.5000pt]A:setXxx()方法[size=10.5000pt] [size=10.5000pt] * [size=10.5000pt]修改属性值 (调用时机:在创建对象后,用对象名.方法名可以调用多次来修改值) [size=10.5000pt]* [size=10.5000pt]B:构造方法[size=10.5000pt] [size=10.5000pt] * [size=10.5000pt]给对象中属性进行初始化 (调用时机,在创建对象时候调用,并且只能在创建对象时调用一次) |
[size=10.5000pt]class Demo3_Person { [size=10.5000pt] [size=10.5000pt]public static void main(String[] args) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]Person p1 = new Person("张三",23); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//p1 = new Person("张天一",23);[size=10.5000pt] [size=10.5000pt]//这种方式看运行结果貌似是改名了,其实是将原对象变成垃圾 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(p1.getName() + "..." + p1.getAge()); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println("--------------------"); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]Person p2 = new Person();[size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//空参构造创建对象 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]p2.setName("李四"); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]p2.setAge(24); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]p2.setName("李鬼"); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(p2.getName() + "..." + p2.getAge()); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} [size=10.5000pt]/* [size=10.5000pt]构造方法 [size=10.5000pt] [size=10.5000pt]给属性进行初始化 [size=10.5000pt]setXxx方法 [size=10.5000pt] [size=10.5000pt]修改属性值 [size=10.5000pt] [size=10.5000pt]这两种方式,在开发中用setXxx更多一些,因为比较灵活 [size=10.5000pt]*/ [size=10.5000pt]class Person { [size=10.5000pt] [size=10.5000pt]private String name;[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//姓名 [size=10.5000pt] [size=10.5000pt]private int age;[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//年龄 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public Person() {[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//空参构造 [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public Person(String name,int age) {//有参构造 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]this.name = name; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]this.age = age; [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public void setName(String name) {[size=10.5000pt] [size=10.5000pt]//设置姓名 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]this.name = name; [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public String getName() {[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//获取姓名 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]return name; [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public void setAge(int age) {[size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//设置年龄 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]this.age = age; [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public int getAge() {[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//获取年龄 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]return age; [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} |
[size=10.5000pt]一[size=10.5000pt]般函数和构造函数的区别: [size=10.5000pt]1、 [size=10.5000pt]从调用上来[size=10.5000pt]讲[size=10.5000pt]: [size=10.5000pt] 一[size=10.5000pt]般函数,在创建对象[size=10.5000pt]之[size=10.5000pt]后,使用对象名调用 [size=10.5000pt] [size=10.5000pt]构造[size=10.5000pt]函数,在创建对象时,由[size=10.5000pt]JVM自动[size=10.5000pt]调用 [size=10.5000pt]2、 [size=10.5000pt]从[size=10.5000pt]调用次数上来[size=10.5000pt]讲[size=10.5000pt]: [size=10.5000pt] 一[size=10.5000pt]般函数,在创建完对象后,可以使用对象[size=10.5000pt]名[size=10.5000pt]多次调用([size=10.5000pt]多[size=10.5000pt]次调用) [size=10.5000pt] [size=10.5000pt] 构造[size=10.5000pt]函数,在创建对象时,[size=10.5000pt]由JVM调用[size=10.5000pt]一次([size=10.5000pt]一[size=10.5000pt]次调用) [size=10.5000pt]3、 [size=10.5000pt]从作用[size=10.5000pt]上[size=10.5000pt]来[size=10.5000pt]讲: [size=10.5000pt] 一[size=10.5000pt]般函数,用来描述事物中的行为的 [size=10.5000pt] [size=10.5000pt]构造[size=10.5000pt]函数,是用来初始化对象时使用的 [size=10.5000pt] |
[size=10.5000pt]/* [size=10.5000pt]* A:this关键字特点 * 代表当前对象的引用 (是什么?) 简单理解为代表”我”,谁调用成员方法(set/get方法等),this就代表哪个对象 [size=10.5000pt]* B:案例演示 [size=10.5000pt] [size=10.5000pt]* this的应用场景 [size=10.5000pt] [size=10.5000pt]* 用来区分成员变量和局部变量重名(作用之一) [size=10.5000pt]*/ [size=10.5000pt]class Demo1_This { [size=10.5000pt] [size=10.5000pt]public static void main(String[] args) { [size=10.5000pt] [size=10.5000pt] Person p1 = new Person(); [size=10.5000pt] [size=10.5000pt] p1[size=10.5000pt].setName("张三"); [size=10.5000pt] [size=10.5000pt] p1[size=10.5000pt].setAge(23); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(p1.getName() + "..." + p1.getAge()); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] Person p2 = new Person(); [size=10.5000pt] [size=10.5000pt] p2[size=10.5000pt].setName("李四"); [size=10.5000pt] [size=10.5000pt] p2[size=10.5000pt].setAge(24); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(p2.getName() + "..." + p2.getAge()[size=10.5000pt]); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt]class Person { [size=10.5000pt] [size=10.5000pt]private String name;[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//姓名 [size=10.5000pt] [size=10.5000pt]private int age;[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//年龄 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public void setAge(int age) {[size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//设置年龄 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]if (age > 0 && age < 200) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]this.age = age; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//System.out.println(age); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]}else { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println("请回火星吧,地球不适合你"); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public int getAge() {[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//获取年龄 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]return age; [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public void setName(String name) {[size=10.5000pt] [size=10.5000pt]//设置姓名 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]this.name = name; [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//System.out.println(name); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public String getName() { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]return name; [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} |
[size=10.5000pt]* [size=10.5000pt]A:案例演示[size=10.5000pt] [size=10.5000pt] * [size=10.5000pt]通过一个案例引入static关键字。[size=10.5000pt] [size=10.5000pt] * [size=10.5000pt]人类:Person。每个人都有国籍,中国。[size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* [size=10.5000pt]B:画图演示[size=10.5000pt] [size=10.5000pt] * [size=10.5000pt]带有static的内存图 |
[size=10.5000pt]class Demo1_Static { [size=10.5000pt] [size=10.5000pt]public static void main(String[] args) { [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]/*Person p1 = new Person();[size=10.5000pt] [size=10.5000pt]//创建对象 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]p1.name = "苍老师";[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//调用姓名属性并赋值 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]p1.country = "日本";[size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//调用国籍属性并赋值 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]Person p2 = new Person(); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]p2.name = "小泽老师";[size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//调用姓名属性并赋值 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//p2.country = "日本";[size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//调用国籍属性并赋值 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]p1.speak(); [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]p2.speak();*/ [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]Person.country = "日本";[size=10.5000pt] [size=10.5000pt]//静态多了一种调用方式,可以通过类名. [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(Person.country); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} [size=10.5000pt] [size=10.5000pt]class Person { [size=10.5000pt] [size=10.5000pt]String name;[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//姓名 [size=10.5000pt] [size=10.5000pt]static String country;[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//国籍 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]public void speak() {[size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]//说话的方法 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]System.out.println(name + "..." + country); [size=10.5000pt] [size=10.5000pt]} [size=10.5000pt]} |
[size=10.5000pt]file:///C:\Users\ZHONGC~1\AppData\Local\Temp\ksohtml\wps6FB5.tmp.jpg[size=10.5000pt] |
[size=10.5000pt]* [size=10.5000pt]A:static关键字的特点[size=10.5000pt]([size=10.5000pt]开发中一般常用于写工具类修饰静态方法[size=10.5000pt])[size=10.5000pt] [size=10.5000pt] * [size=10.5000pt]a:随着类的加载而加载[size=10.5000pt] [size=10.5000pt] * [size=10.5000pt]b:优先于对象存在[size=10.5000pt] * c:被类的所有对象共享[size=10.5000pt] [size=10.5000pt] * [size=10.5000pt]举例:咱们班级的学生应该共用同一个班级编号。[size=10.5000pt] [size=10.5000pt] * [size=10.5000pt]其实这个特点也是在告诉我们什么时候使用静态?[size=10.5000pt] [size=10.5000pt] * 如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。 [size=10.5000pt] * [size=10.5000pt]举例:[size=10.5000pt] [size=10.5000pt] * [size=10.5000pt]饮水机(用静态修饰)[size=10.5000pt] [size=10.5000pt] * [size=10.5000pt]水杯(不能用静态修饰)[size=10.5000pt] [size=10.5000pt] * [size=10.5000pt]共性用静态,特性用非静态[size=10.5000pt] * d:可以通过类名调用[size=10.5000pt] [size=10.5000pt] * [size=10.5000pt]其实它本身也可以通过对象名调用。[size=10.5000pt] [size=10.5000pt] * [size=10.5000pt]推荐使用类名调用。[size=10.5000pt] [size=10.5000pt] * [size=10.5000pt]静态修饰的内容一般我们称其为:与类相关的,类成员 [size=10.5000pt]* [size=10.5000pt]B:案例演示[size=10.5000pt] [size=10.5000pt] * [size=10.5000pt]static关键字的特点 |
[size=10.5000pt]* A:static的注意事项 [size=10.5000pt] [size=10.5000pt]* a:在静态方法中是没有this关键字的 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 如何理解呢? [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 静态是随着类的加载而加载,this是随着对象的创建而存在。 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 静态比对象先存在。 * b:静态方法只能访问静态的成员变量和静态的成员方法 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 静态方法: [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 成员变量:只能访问静态变量 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 成员方法:只能访问静态成员方法 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 非静态方法: [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 成员变量:可以是静态的,也可以是非静态的 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 成员方法:可是是静态的成员方法,也可以是非静态的成员方法。 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 简单记: [size=10.5000pt] [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]* 静态只能访问静态。 [size=10.5000pt]* B:案例演示 [size=10.5000pt] [size=10.5000pt]* static的注意事项 |
[size=10.5000pt]类加载过程: [size=10.5000pt]1、 [size=10.5000pt]在[size=10.5000pt]main[size=10.5000pt]方法中创建对象时,[size=10.5000pt]JVM[size=10.5000pt]会先去判断类[size=10.5000pt](class)[size=10.5000pt]在方法区下是否已经存在,如果存在则直接使用已经存在的[size=10.5000pt]class[size=10.5000pt]。如果不存在,则把类所对应的[size=10.5000pt].class[size=10.5000pt]文件加载到内存中的方法区 [size=10.5000pt]2、 [size=10.5000pt]在把[size=10.5000pt].class[size=10.5000pt]文件加载到方法区时,会分两部分加载: [size=10.5000pt]从[size=10.5000pt].class[size=10.5000pt]文件头部依次加载内容,是静态的内容[size=10.5000pt]([size=10.5000pt]静态变量、静态方法、静态代码块[size=10.5000pt])[size=10.5000pt]就加载到方法区下的静态区域内;[size=10.5000pt] [size=10.5000pt]是非静态的内容[size=10.5000pt]([size=10.5000pt]成员变量、成员函数、构造函数、构造代码块[size=10.5000pt])[size=10.5000pt]全部加载到方法区下的非静态区域内 [size=10.5000pt]3、 [size=10.5000pt]在把[size=10.5000pt].class[size=10.5000pt]中的所有静态内容全部加载完成之后,会对所有的静态成员变量进行默认初始化 [size=10.5000pt]4、 [size=10.5000pt]在所有的静态成员变量默认初始化完成之后,在执行显式初始化 [size=10.5000pt]5、 [size=10.5000pt]在对所有的静态成员变量显式初始化完成之后,就会把静态代码块加载到栈中执行(如果有多个静态代码块时,按照书写顺序依次加载到栈中执行) [size=10.5000pt]6、 [size=10.5000pt]所有的静态代码块全部执行完之后,整个类加载完成。 [size=10.5000pt] |
[size=10.5000pt]1、 [size=10.5000pt]当[size=10.5000pt]JVM[size=10.5000pt]执行[size=10.5000pt]new[size=10.5000pt]时,就会去堆中开辟一块空间 [size=10.5000pt]2、 [size=10.5000pt]在空间开辟后,给空间分配地址 [size=10.5000pt]3、 [size=10.5000pt]空间分配完后,就方法区下非静态区域中的类的成员加载到开辟的空间下 [size=10.5000pt]4、 [size=10.5000pt]所有成员全部加载到开辟的空间后,对空间下所有的成员变量进行默认初始化 [size=10.5000pt]5、 [size=10.5000pt]所有的成员变量默认初始化完成之后,调用相应的构造函数入栈执行 [size=10.5000pt]6、 [size=10.5000pt]在执行构造函数时,分为两部分执行: [size=10.5000pt]6.1[size=10.5000pt]、[size=10.5000pt] [size=10.5000pt]先执行构造函数中隐藏的三步代码[size=10.5000pt](隐式三步[size=10.5000pt]): [size=10.5000pt] 1[size=10.5000pt]、执行[size=10.5000pt]super() [size=10.5000pt](执行父类的构造函数也需要隐式三步) [size=10.5000pt] 2[size=10.5000pt]、对所开辟空间下的成员变量进行显式初始化 [size=10.5000pt] 3[size=10.5000pt]、执行构造代码块 [size=10.5000pt]6.2[size=10.5000pt]、[size=10.5000pt] [size=10.5000pt]执行完隐式三步后,再执行构造函数中所书写的代码 [size=10.5000pt] [size=10.5000pt]7、 [size=10.5000pt]在整个构造函数全部执行完成之后,表示对象创建完成。会把所开辟空间的地址赋给引用对象 [size=10.5000pt] |
[size=10.5000pt]class [size=10.5000pt] [size=10.5000pt]类{ [size=10.5000pt]非[size=10.5000pt]静态[size=10.5000pt]成员[size=10.5000pt]变量 [size=10.5000pt]静态[size=10.5000pt]成员变量 [size=10.5000pt] [size=10.5000pt]非[size=10.5000pt]静态[size=10.5000pt]成员[size=10.5000pt]函数 [size=10.5000pt]静态[size=10.5000pt]成员函数 [size=10.5000pt] [size=10.5000pt]构造[size=10.5000pt]函数 [size=10.5000pt] [size=10.5000pt]构造[size=10.5000pt]代码块 [size=10.5000pt]静态[size=10.5000pt]代码块 [size=10.5000pt]} [size=10.5000pt] |
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |