Java中的一些基础总结

Java文档注释全攻略: https://www.jianshu.com/p/eed2b0187b3c

 

 

 一: java参数传递-值传递和引用传递

问题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 
答:  值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。 

Java参数,不管是原始类型还是引用类型,传递的都是副本

如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的。如果在函数中改变了副本的值,原始的值不会改变
如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。如果在函数中没有改变这个副本的地址,而是改变了地址中的值,那么在函数内的改变会影响到传入的参数。如果在函数中改变了副本的地址,如new一个,那么副本就指向了一个新的地址,此时传入的参数还是指向原来的地址,所以不会改变参数的值。
 
例:
 1 public class ParamTest {
 2     public static void main(String[] args) {
 3         
 4         System.out.println("1:交换");
 5         User userA = new User("张三", 30);
 6         User userB = new User("李四", 26);
 7         System.out.println("Before: userA=" + userA.getName());
 8         System.out.println("Before: userB=" + userB.getName());
 9         swapObj(userA, userB);
10         System.out.println("After: userA=" + userA.getName());
11         System.out.println("After: userB=" + userB.getName());
12 
13         System.out.println("2:重新new");
14         newObject(userA);
15         System.out.println("main userA=" + userA.getName());
16     }
17 
18     private static void swapObj(User x, User y) {
19         User temp = x;
20         x = y;
21         y = temp;
22     }
23 
24     private static void newObject(User user) {
25         user = new User("王五", 20);
26         System.out.println("new object=" + user.getName());
27     }
28 }

显示结果:

1:交换
Before: userA=张三
Before: userB=李四
After: userA=张三
After: userB=李四
2:重新new
new object=王五
main userA=张三

情况1:两个个对象在swap方法中通过一个临时的对象交换了,但是外面输出的还是未交换之前的数据。
情况2:在方法中对对象参数重新new了一个新的对象,但是main中输出的还是之前的数据。

 

 二: java访问权限修饰词

Java的类成员(成员变量和成员函数)访问权限修饰词有四类:private,默认,protected 和public。权限依次从低到高,

权限控制如下表所示:√ 表示可以访问,×表示不能访问。

修饰词 本类 同一个包的类 继承类 其他类
private × × ×
默认  × ×
protected ×
public

 

posted @ 2015-09-11 10:59  南极山  阅读(360)  评论(0)    收藏  举报