package com.date6; /** *理解这种二维数组的模式 */ public class Test1 { public static void main(String[] args) { int[][] arr = new int[][]{{1,2,3},{4,5,6}}; for(int i=0;i<2;i++){ for(int j=0;j<3;j++){ System.out.print(arr[i][j]+"\t"); } System.out.println(); } } }输出效果:
package com.date6; public class Test2 { public static void main(String[] args) { int[][] arr = new int[3][]; System.out.println(arr); System.out.println(arr[0]); //输出null,因为没有对它进行初始化 System.out.println(arr[0][0]); //由于arr[0]数组为空,如果再查一位数组的元素, //肯定会报空指针NullPointerException异常 } }输出效果:
package com.date6; /** *封装:是指隐藏对象的属性和实现细节,仅对外提供公共的访问方式。 * *好处: *将变化隔离,便于使用,提高重用性,提高安全性。 * *封装原则: *1.将不需要对外提供的内容都隐藏起来。 *2.把属性都隐藏,提供公共方法对其访问。如,getXXX,setXXX。 * *1.私有仅仅是封装的一种体现而已。 *2.private关键字:是一个权限修饰符,用于修饰成员(成员变量和成员函数),被私有化的成员只在本类中有效。 *3.常用场景之一:将成员变量私有化,对外提供对应的set、get方法对其进行访问,提高对数据的安全性 * java中最小的封装体就是函数,类、框架也是封装体。 */ class Person{ //private:私有,是一个权限修饰符,用于修饰 //不希望别人直接访问赋值,需要通过私有化把属性进行隐藏 private int age; //提供set、get公共方法对其访问 public void setAge(int a){ //在set方法内可以对属性的赋值进行限制 if(a>0 && a<130){ age = a; }else{ System.out.println("错误的数据"); } } public int getAge(){ return age; } void speak(){ System.out.println("age="+age); } } public class Test8 { public static void main(String[] args) { Person p = new Person(); //通过其他方式访问 p.setAge(20); p.speak(); //赋值不合法,set方法就不允许成功赋值 p.setAge(-20); } }4.匿名对象的使用:
package com.date6; /** * 匿名对象两种使用情况: * 1.当对对象方法仅进行一次调用时。 * 2.匿名对象可以作为实际参数进行传递。 */ class Car{ static String color = "red"; static int num = 4; public static void run(){ System.out.println("function run is running"); } public static void show(){ System.out.println(num+"..."+color); } } public class Test5 { public static void main(String[] args) { //对对象方法仅进行一次调用时,就可以使用匿名对象 new Car().show(); //匿名对象可以作为实际参数进行传递 show(new Car()); } public static void show(Car car) { car.color = "black"; car.num = 3; System.out.println("function show is running!"); System.out.println(car.num+"..."+car.color); } }5.基本数据类型参数在函数中传递的特点:
package com.date6; /** *基本数据类型参数传递 *1.jvm调用main方法,main方法入栈。 *2.将x变量值设置为3。 *3.main方法调用show方法,3作为基本数据类型参数赋值给show方法参数x, *也就是说,此时show方法的参数x值为3。 *4.show方法执行x = 4后,show方法的参数x值变成4。 *5.show方法执行结束,show方法出栈。show方法参数x也随之出栈。 *6.main方法打印x的值。此时x指的是main方法中的x变量的值(show方法 *中的参数x已经随show方法一块出栈了)。所以,打印出来的x值为3而不是4。 *7.main方法执行结束,出栈。 */ public class Test6 { public static void main(String[] args) { int x = 3; show(x); System.out.println("x="+x); } ///下面两种方式打印的x值都是3 //方式一 public static int show(int x){ x = 4; return x; } //方式二 public static void show1(int x){ x = 4; } }6.引用数据类型参数在函数中传递的特点:
package com.date6; //引用数据类型参数传递 /** *执行过程说明: * 1.jvm调用main方法,main方法入栈。 * 2.创建一个Test7对象d(在堆内存中创建,d作为引用变量,指向堆内存中创建的实体对象),并 * 将d指向的实体对象中的属性x的值设置为9. * 3.main方法调用show方法,d作为引用数据类型参数赋值给show方法参数t,也就是说,此时 * show方法的参数t和main方法中的变量d同时指向了堆内存中的同一个实体对象。 * 4.通过t.x调用堆内存当中的属性,并修改其值为4。 * 5.show方法结束,t的生命周期结束,show方法出栈,但是实际上它已经将堆内存当中的属性值改变了, * 同时由于main方法的变量d依然引用着堆内存中的实体对象,因此堆内存中的实体对象不会被垃圾回收器清除。 * 6.main方法打印d.x的值,此时d指向堆内存当中的那个被修改的对象的引用变量x,明显输出结果为4,而不是9。 * 7.main方法结束,出栈,同时如果堆内存中的那个对象没有被调用,将会被jvm的垃圾回收器 * 回收。 * * 总结: * 在java中,方法参数的传递永远都是传值,而这个值,对于基本数据类型,值就是你赋给变量的那个值。 * 而对于引用数据类型,这个值是对象的引用,而不是这个对象本身。 */ public class Test7 { int x = 3; public static void main(String[] args){ Test7 d = new Test7(); d.x = 9; show(d); System.out.println(d.x); } //下面两种方式打印x的结果都是4 //方式一 public static void show(Test7 t){ t.x = 4; } //方式二 public static int show1(Test7 t){ t.x = 4; return t.x; } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u014344668/article/details/46844037