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 | √ | √ | √ | √ |

浙公网安备 33010602011771号