我是靠谱客的博主 耍酷麦片,最近开发中收集的这篇文章主要介绍举例说明:笔试常常考的小细节代码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

虽然看了编程思想,但自己还是会忘记,最近看到一个例子,觉得适合记录,哈哈

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

哈哈

最后

以上就是耍酷麦片为你收集整理的举例说明:笔试常常考的小细节代码的全部内容,希望文章能够帮你解决举例说明:笔试常常考的小细节代码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部