面试题

原创
2019/08/11 00:57
阅读数 104
package com.liuyuan.test05.exer2;

/*
 * (1)Fu类的类初始化
 * ①类变量显式赋值:
 * 		i = getNum("(1)i");
 * 		public static int getNum(String str){
			print(str);
				public static void print(String str){
					System.out.println(str + "->" + i);			(1)i -> 0(默认值)
				}
			return ++i;										i=1
		}
 * ②静态代码块
 * 	static{
		print("(3)父类静态代码块");
			public static void print(String str){
				System.out.println(str + "->" + i);			  (3)父类静态代码块 -> 1
			}
	}
 * (2)Zi类的类初始化
 * ①类变量显式赋值:
 * 	  k = getNum("(6)k");
	 * 	
		public static int getNum(String str){
			print(str);
				public static void print(String str){
					System.out.println(str + "->" + k);		(6)k -> 0(默认值)
				}
			return ++k;									k=1
		}
 * ②静态代码块
 * 	static{
		print("(8)子类静态代码块");
			public static void print(String str){
				System.out.println(str + "->" + k);		(8)子类静态代码块 -> 1
			}
	}	
 * 
 * (3)执行Fu类的是实参初始化方法<init>()
 * ①非静态成员变量的显式赋值:
 * 		j = getNum("(2)j");
	 * 	
		public static int getNum(String str){
			print(str);
					public static void print(String str){
						System.out.println(str + "->" + i);  (2)j -> 1
					}
			return ++i;								i=2
		}
 * ②非静态代码块:
 * 	{
		print("(4)父类非静态代码块,又称为构造代码块");
				public static void print(String str){
					System.out.println(str + "->" + i);  (4)父类非静态代码块,又称为构造代码块 -> 2
				}
	}	
 * ③父类的无参构造
 *	Fu(){
		print("(5)父类构造器");
				public static void print(String str){
					System.out.println(str + "->" + i);  (5)父类构造器 -> 2
				}
	} 		
 * 
 * (4)执行Zi类的实例初始化方法<init>()
 * ①非静态成员变量的显式赋值:
 * 	 h = getNum("(7)h");

	public static int getNum(String str){
		print(str);
			 * 	public static void print(String str){
					System.out.println(str + "->" + k);   (7)h ->1
				}
		return ++k;									k=2
	}
 * 
 * ②非静态代码块:
 * 	{
		print("(9)子类非静态代码块,又称为构造代码块");
			public static void print(String str){
					System.out.println(str + "->" + k);   (9)子类非静态代码块,又称为构造代码块 ->2
			}
	}	
 * ③子类的无参构造
 * 	Zi(){
		print("(10)子类构造器");
			public static void print(String str){
					System.out.println(str + "->" + k);   (10)子类构造器 ->2
			}
	}	
 */
public class TestExer2 {
	public static void main(String[] args) {
		Zi zi = new Zi();
	}
}
class Fu{
	private static int i = getNum("(1)i");
	private int j = getNum("(2)j");
	static{
		print("(3)父类静态代码块");
	}
	{
		print("(4)父类非静态代码块,又称为构造代码块");
	}
	Fu(){
		print("(5)父类构造器");
	}
	public static void print(String str){
		System.out.println(str + "->" + i);
	}
	public static int getNum(String str){
		print(str);
		return ++i;
	}
}
class Zi extends Fu{
	private static int k = getNum("(6)k");
	private int h = getNum("(7)h");
	static{
		print("(8)子类静态代码块");
	}
	{
		print("(9)子类非静态代码块,又称为构造代码块");
	}
	Zi(){
		print("(10)子类构造器");
	}
	public static void print(String str){
		System.out.println(str + "->" + k);
	}
	public static int getNum(String str){
		print(str);
		return ++k;
	}
}

(1)i->0
(3)父类静态代码块->1
(6)k->0
(8)子类静态代码块->1
(2)j->1
(4)父类非静态代码块,又称为构造代码块->2
(5)父类构造器->2
(7)h->1
(9)子类非静态代码块,又称为构造代码块->2
(10)子类构造器->2
 

package com.liuyuan.test02.review;

/*
 * (1)因为finally中没有return,最后结束是从try或catch中回去
 * (2)我们try或catch中的return 返回值;语句拆开来执行
 * ①先把返回值放到“操作数栈”,8的值放到操作数栈中
 * ②再去走finally
 * 此时虽然finally对result做了修改,但是没有影响操作数栈中值
 * ③回去执行return后半个动作,结束当前方法
 */
public class Test01 {
	public static void main(String[] args) {
		int test = test(3,5);
		System.out.println(test);
	}

	public static int test(int x, int y){
		int result = x;
		try{
			if(x<0 || y<0){
				return 0;
			}
			result = x + y;
			return result;
		}finally{
			result = x - y;
		}
	}
}

8

package com.liuyuan.test02.review;

/*
 * (1)因为finally有return,最终一定从finally的语句 回去
 * (2)但是try中的return也会走,只是执行它的第一个动作,把返回值放到“操作数栈”
 * 例如:把i=1先放到操作数栈中
 * (3)因为finally有return,这个时候,我们这里的return也有两个动作
 * ①再把它的返回值也放到操作数栈中,i=2,②结束当前方法
 */
public class Test04 {
	static int i = 0;
	public static void main(String[] args) {
		System.out.println(test());
	}

	public static int test(){
		try{
			return ++i;
		}finally{
			return ++i;
		}
	}
}

2

package com.liuyuan.test02.review;

public class Test06 {
	public static int fun(){
		int result = 5;
		try{
			result = result / 0;//会发生异常,发生算术异常ArithmeticException
			return result;
		}catch(Exception e){
			System.out.println("Exception");
			result = -1;
			return result;//(1)先把-1放到操作数栈(2)跳到finally中执行(3)回来结束当前方法
		}finally{
			result = 10;
			System.out.println("I am in finally.");
		}
	}
	public static void main(String[] args) {
		int x = fun();
		System.out.println(x);
	}
}

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部