java基本点_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java基本点

java基本点

 2017/2/15 5:32:09  苍穹神剑  程序员俱乐部  我要评论(0)
  • 摘要:今天面试遇到两个问题:1.java类加载问题packagetest;classFatherA{static{System.out.println("父类静态块");}{System.out.println("父类动态块1");}{System.out.println("父类动态块3");}{System.out.println("父类动态块2");}publicFatherA(){System.out.println("父类构造函数");}
  • 标签:Java

今天面试遇到两个问题:

1.java类加载问题

class="java">package test;

class FatherA {
	static {
		System.out.println("父类静态块");
	}
	{
		System.out.println("父类动态块1");
	}
	{
		System.out.println("父类动态块3");
	}
	{
		System.out.println("父类动态块2");
	}

	public FatherA() {
		System.out.println("父类构造函数");
	}
}

public class SonB extends FatherA{
	static {
		System.out.println("子类静态块");
	}
	{
		System.out.println("子类动态块");
	}

	public SonB() {
		System.out.println("子类构造函数");
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new SonB();
	}

}

?输出结果:

父类静态块

子类静态块

父类动态块1

父类动态块3

父类动态块2

父类构造函数

子类动态块

子类构造函数

原因分析:类加载机制,先加载父类static块,子类static块,之后加载父类动态块、构造函数,最后加载子类动态块、构造函数

?

2.参数传递问题

package test;

public class MethodParms {
	String str="abcd";
	char[] cs=new char[]{'a','b','c'};
	
	public void ex(String a,char[] b) {
		a="test";
		b[0]='s';
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		MethodParms mm=new MethodParms();
		mm.ex(mm.str, mm.cs);
		
		System.out.println(mm.str+":::");
		System.out.println(mm.cs);
	}

}

?输出结果:

abcd:::

sbc

原因分析:由于java方法的参数传递都可以看为是值传递,都会传递一份拷贝的值(引用值,数值)给函数。这里的String、char[]传递的都是引用值,这里char[]参数通过拷贝的引用可以直接修改值,而String对象是不可变的,通过拷贝的引用不能直接修改值,所有这里未变。

其他:这里String的不可变性通过final char[] value保证,而StringBuffer和StringBuider通过AbstractStringBuilder的char[] value是可变的,具体可见源码。



?

  • 大小: 39.2 KB
  • 查看图片附件
发表评论
用户名: 匿名