java学习笔记2--面向对象编程( 二 )


局部变量初始化必须在被调用的结构之前,因为无论是方法中还是代码块中,都是自上向下执行的,必须执行完局部变量的初始化语句,才会给局部变量分配内存空间;
两者的定义位置归根到底还是与其生命周期有关;
2.6 练习–内存分配
画出如下代码在执行时的内存分配情况class Car{String color = "red";int num = 4;void show(){int a = 10;System.out.println("color="+color+",num="+num);}}class CarTest {public static void main(String[] args) {Car c1 = new Car();Car c2 = new Car(); c1.color = "blue";c1.show();c2.show();}}
2.7 匿名对象 理解:我们创建的对象,没有显示的赋值给一个变量名 。即为匿名对象 。特征:匿名对象只能调用一次 。使用:充当方法的实参 。3.方法 3.1 定义
权限修饰符 返回值类型 方法名(形参列表){方法体;}
3.1.1 权限修饰符3.1.2 返回值类型3.1.3 方法名
标识符,和变量的命名规范一样,首单词的首字母小写,其余单词首字母大写 。
3.1.4 参数列表
格式:数据类型1 形参1,数据类型2 形参2,…
3.1.53.1.6 注意3.2 方法重载 3.2.1 意义
重载的最直接作用是方便了开发人员可以根据不同的参数个数,顺序,类型,自动匹配方法,减少了方法的命名和记忆 。
3.2.2 定义
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可 。
“两同一不同”:同一个类,同一个方法名;形参列表不同 。
3.2.3 特点(两同一不同,四无关)3.3 可变个数的形参
5.0 中提供了(of )机制,允许直接定义能和多个实参相匹配的形参 。从而,可以用一种更简单的方式,来传递个数可变的实参 。
3.3.1 格式
数据类型 … 形参名称
定义:public void max(String... str) {// 与数组的遍历方式相同for (int i = 0; i < str.length; i++) {System.out.println(str[i]);}}调用:(两种方式)对象.max("a","b","c");对象.max(new String[]{"a","b"});
3.3.2 细节3.3.3 与数组的区别3.4 方法的值传递机制 3.4.1 变量的赋值复习3.4.2 形参和实参3.4.3 形参的传递机制:值传递3.4.4 练习1
public class TransferTest3{public static void main(String args[]){TransferTest3 test=new TransferTest3();test.first();}public void first(){int i=5;Value v=new Value();v.i=25;second(v,i);System.out.println(v.i+" "+i);}public void second(Value v,int i){i=0;v.i=20;Value val=new Value();v=val;System.out.println(v.i+" "+i);}}class Value {int i= 15;}
15 020 5
3.4.5 练习2
方法1:在method方法中输出a、b,并终止程序;private static void method(int a, int b) {System.out.println("a = " + 100);System.out.println("b = " + 200);System.exit(0); // 终止程序}
方法2:重新println方法private static void method(int a, int b) {PrintStream ps = new PrintStream(System.out){public void println(String x){if("a=10".equals(x)){x = "a=100";}else if("b=10".equals(x)){x = "b=200";}super.println(x);}};System.setOut(ps);}
3.4.6 练习3
微软: 定义一个int型的数组:int[] arr = new int[]{12,3,3,34,56,77,432};
让数组的每个位置上的值去除以首位置的元素,得到的结果,作为该位置上的新值 。遍历新的数组 。
//错误写法:如果从arr[0]开始,那么arr[0]就变为1了,其余值都是除以1 。for(int i= 0;i