概述
虽然看了编程思想,但自己还是会忘记,最近看到一个例子,觉得适合记录,哈哈
1、类的加载过程
先看列子,再说过程
package book;
class A{
A(){
System.out.println("A construct");
}
static{
System.out.println("A in static");
}
{
System.out.println("A not in static");
}
}
class B extends A{
B(){
System.out.println("B construct");
}
static{
System.out.println("B in static");
}
{
System.out.println("B not in static");
}
}
public class TestTryTry1
{
public static void main(String[] args)
{
B b=new B();
}
}
运行结果如下:
A in static
B in static
A not in static
A construct
B not in static
B construct
通过这个也能看出1、加载父类的静态变量或者静态代码块。2、创建对象:先初始化变量或者代码块,在初始化构造器。
package book;
public class TESTTry2
{
public static void main(String[] args)
{
System.out.println(B.c);
}
}
class A{
static{
System.out.println("A");
}
}
class B extends A{
static{
System.out.println("B");
}
public static String c="C";
}
结果是ABC
下面这个是静态常量:
package book;
public class TESTTry2
{
public static void main(String[] args)
{
System.out.println(B.c);
}
}
class A{
static{
System.out.println("A");
}
}
class B extends A{
static{
System.out.println("B");
}
public final static String c="C";
}
输出的结果是C
静态常量,是在连接过程中初始化的,即准备阶段。
package book;
public class TESTTry2
{
public static void main(String[] args)
{
System.out.println(B.c);
}
}
class A{
public static String c="C";
static{
System.out.println("A");
}
}
class B extends A{
static{
System.out.println("B");
}
}
输出的AC,通过子类访问父类的静态字段不会导致子类初始化。
package book;
public class TESTTry2
{
public static void main(String[] args)
{
System.out.println(B.a);
}
}
class B{
static{
System.out.println("B");
}
public static final String a= "JD";//JD
//public static final String a= new String("JD");//B JD
}
一个是常量池,一个是常量池对象。
2.switch 语句
package book;
public class TestTryTry1
{
public static void main(String[] args)
{
int i = 3;
switch (i)
{
case 1: System.out.println("1");break;
case 2: System.out.println("2");break;
case 3: System.out.println("3");break;
default: System.out.println("me");
}
}
}
正常输出都是3;但是下面这种情况就不是了:
package book;
public class TestTryTry1
{
public static void main(String[] args)
{
int i = 3;
switch (i)
{
case 1: System.out.println("1");
case 2: System.out.println("2");
case 3: System.out.println("3");
default: System.out.println("me");
}
}
}
输出的结果是 3 me;注意到细节是没有了break,哈哈;
3、exception
package book;
public class TestTryTry1
{
public static void main(String[] args)
{
int x=3;
int y=0;
try{
int z=getPass(x,y);
System.out.println(z);
}catch(Exception e){
e.printStackTrace();
}
}
public static int getPass(int x,int y ) throws Exception{
try{
int c=x+y;
int z=x/y;
System.out.println("in try");
return c;
}catch(Exception e){
throw new Exception(e);
}
finally{
System.out.println("in finally");
}
}
}
不知道咋回事,以前特比的知道出错就跳出,但是最近特别怀疑自己哈哈,这个代码运行的结果如下:
in finally
java.lang.Exception: java.lang.ArithmeticException: / by zero
at book.TestTryTry1.getPass(TestTryTry1.java:25)
at book.TestTryTry1.main(TestTryTry1.java:11)
Caused by: java.lang.ArithmeticException: / by zero
at book.TestTryTry1.getPass(TestTryTry1.java:21)
... 1 more
当然即使return语句可以执行,fiannly还是会执行的。比如这个:
package book;
public class TestTryTry1
{
public static void main(String[] args)
{
int x=3;
int y=0;
try{
int z=getPass(x,y);
System.out.println(z);
}catch(Exception e){
e.printStackTrace();
}
}
public static int getPass(int x,int y ) throws Exception{
try{
int c=x+y;
System.out.println("in try");
return c;
}catch(Exception e){
throw new Exception(e);
}
finally{
System.out.println("in finally");
return 5;
}
}
}
输出结果如下:
in try
in finally
5
哈哈
最后
以上就是耍酷麦片为你收集整理的举例说明:笔试常常考的小细节代码的全部内容,希望文章能够帮你解决举例说明:笔试常常考的小细节代码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复