博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【273天】我爱刷题系列(32)
阅读量:6290 次
发布时间:2019-06-22

本文共 9578 字,大约阅读时间需要 31 分钟。

叨叨两句

  1. 学到脑袋疼,看来必须时刻保持血糖稳定,不然身体没法持续战斗

牛客网——java专项练习012

1

在某个类A中存在一个方法:void set(int x),以下不能作为这个方法的重载的声明的是()

正确答案: A 你的答案: A (正确)

A void set(int y)

B int set(int x,double y)
C double set(int x,int y)
D void set(int x,int y)

方法重载满足的条件  1. 同一个类中,方法名相同,参数列表不同的2个或多个方法构成方法的重载   2.参数列表不同指参数的类型,参数的个数,参数的顺序至少一项不同    3.方法的返回值类型,方法的修饰符可以不同。

2

下列说法正确的有()

正确答案: C 你的答案: C (正确)

A class中的constructor不可省略

B constructor必须与class同名,但方法不能与class同名
C constructor在一个对象被new时执行
D 一个class只能定义一个constructor

B选项错在普通的类方法是可以和类名同名的,和构造方法唯一的区分就是,构造方法没有返回值

3

执行下列代码的输出结果是( C )

A 10
B 20
C 30
D 40

public class Demo{ public static void main(String args[]){   int num = 10;   System.out.println(test(num));}public static int test(int b){   try   {    b += 10;    return b;   }   catch(RuntimeException e)   {   }   catch(Exception e2)   {   }   finally   {    b += 10;    return b;   }  }}

推荐博文try-catch-finally执行顺序详解:

try块中抛出异常,try、catch和finally中都有return语句public static int WithException(){            int i=10;            try{                System.out.println("i in try block is : "+i);                i = i/0;                return --i;            }            catch(Exception e){                System.out.println("i in catch - form try block is : "+i);                --i;                System.out.println("i in catch block is : "+i);                return --i;            }            finally{                          System.out.println("i in finally - from try or catch block is--"+i);                --i;                System.out.println("i in finally block is--"+i);                return --i;            }}执行结果:============WithException==================i in try block is : 10i in catch - form try block is : 10i in catch block is : 9i in finally - from try or catch block is--8i in finally block is--76===============================执行顺序:抛出异常后,执行catch块,在catch块的return的--i执行完后,并不直接返回而是执行finally,因finally中有return语句,所以,执行,返回结果6。结论:try块中抛出异常,try、catch和finally中都有return语句,返回值是finally中的return。总体结论:结论一:return语句并不是函数的最终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在栈里面,等待finally执行后再返回)结论二:finally里面不建议放return语句,根据需要,return语句可以放在try和catch里面和函数的最后。可行的做法有四:(1)return语句只在函数最后出现一次。(2)return语句仅在try和catch里面都出现。(3)return语句仅在try和函数的最后都出现。(4)return语句仅在catch和函数的最后都出现。注意,除此之外的其他做法都是不可行的,编译器会报错

4

What will be printed when you execute the following code?

class C {    C() {        System.out.print("C");    }} class A {    C c = new C();     A() {        this("A");        System.out.print("A");    }     A(String s) {        System.out.print(s);    }} class Test extends A {    Test() {        super("B");        System.out.print("B");    }     public static void main(String[] args) {        new Test();    }}

正确答案: B 你的答案: B (正确)

A BB

B CBB
C BAB
D None of the above

初始化过程是这样的: 1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 3.其次,初始化父类的普通成员变量和代码块,在执行父类的构造方法;4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法;  (1)初始化父类的普通成员变量和代码块,执行 C c = new C(); 输出C (2)super("B"); 表示调用父类的构造方法,不调用父类的无参构造函数,输出B (3) System.out.print("B");  所以输出CBB

5

下面代码运行结果是()

public class Test{

public int add(int a,int b){        try {         return a+b;           }     catch (Exception e) {          System.out.println("catch语句块");     }     finally{          System.out.println("finally语句块");     }     return 0;}  public static void main(String argv[]){      Test test =new Test();      System.out.println("和是:"+test.add(9, 34));  }

}

正确答案: C 你的答案: C (正确)

A catch语句块

和是:43

B 编译异常

C finally语句块

和是:43

D 和是:43

finally语句块

先来看一段代码:public abstract class Test {    public static void main(String[] args) {        System.out.println(beforeFinally());    }         public static int beforeFinally(){        int a = 0;        try{            a = 1;            return a;        }finally{            a = 2;        }    }}/**output:1*/从结果上看,貌似`finally` 里的语句是在`return` 之后执行的,其实不然,实际上`finally` 里的语句是在在`return` 之前执行的。那么问题来了,既然是在之前执行,那为什么`a` 的值没有被覆盖了?实际过程是这样的:当程序执行到try{}语句中的return方法时,它会干这么一件事,将要返回的结果存储到一个临时栈中,然后程序不会立即返回,而是去执行finally{}中的程序, 在执行`a = 2`时,程序仅仅是覆盖了a的值,但不会去更新临时栈中的那个要返回的值 。执行完之后,就会通知主程序“finally的程序执行完毕,可以请求返回了”,这时,就会将临时栈中的值取出来返回。这下应该清楚了,要返回的值是保存至临时栈中的。再来看一个例子,稍微改下上面的程序:public abstract class Test {    public static void main(String[] args) {        System.out.println(beforeFinally());    }         public static int beforeFinally(){        int a = 0;        try{            a = 1;            return a;        }finally{            a = 2;            return a;        }    }}/**output:2*/在这里,finally{}里也有一个return,那么在执行这个return时,就会更新临时栈中的值。同样,在执行完finally之后,就会通知主程序请求返回了,即将临时栈中的值取出来返回。故返回值是2.

6

往OuterClass类的代码段中插入内部类声明, 哪一个是错误的:

public class OuterClass{

private float f=1.0f;//插入代码到这里

}

正确答案: A B C D 你的答案: 空 (错误)

A class InnerClass{

public static float func(){return f;}
}

B abstract class InnerClass{

public abstract float func(){}
}

C static class InnerClass{

protected static float func(){return f;}
}

D public class InnerClass{

static float func(){return f;}
}

这是我学习Java内部类的笔记1.为什么使用内部类?使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响1.1.使用内部类最大的优点就在于它能够非常好的解决多重继承的问题,使用内部类还能够为我们带来如下特性:(1)、内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独。(2)、在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。(3)、创建内部类对象的时刻并不依赖于外围类对象的创建。(4)、内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。(5)、内部类提供了更好的封装,除了该外围类,其他类都不能访问。2.内部类分类:(一).成员内部类:public class Outer{        private int age = 99;        String name = "Coco";        public class Inner{            String name = "Jayden";            public void show(){                System.out.println(Outer.this.name);                System.out.println(name);                System.out.println(age);            }        }        public Inner getInnerClass(){            return new Inner();        }        public static void main(String[] args){            Outer o = new Outer();            Inner in = o.new Inner();            in.show();        }    }1.Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,Inner 类可以使用任意访问控制符,如 public 、 protected 、 private 等2.Inner 类中定义的 show() 方法可以直接访问 Outer 类中的数据,而不受访问控制符的影响,如直接访问 Outer 类中的私有属性age3.定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );4.编译上面的程序后,会发现产生了两个 .class 文件: Outer.class,Outer$Inner.class{}5.成员内部类中不能存在任何 static 的变量和方法,可以定义常量:(1).因为非静态内部类是要依赖于外部类的实例,而静态变量和方法是不依赖于对象的,仅与类相关,简而言之:在加载静态域时,根本没有外部类,所在在非静态内部类中不能定义静态域或方法,编译不通过;非静态内部类的作用域是实例级别(2).常量是在编译器就确定的,放到所谓的常量池了★★友情提示:1.外部类是不能直接使用内部类的成员和方法的,可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法;2.如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字,如:Outer.this.name(二).静态内部类: 是 static 修饰的内部类,1.静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问 2.如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员3.创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名 = new 内部类();public class Outer{            private int age = 99;            static String name = "Coco";            public static class Inner{                String name = "Jayden";                public void show(){                    System.out.println(Outer.name);                    System.out.println(name);                                  }            }            public static void main(String[] args){                Inner i = new Inner();                i.show();            }        }(三).方法内部类:访问仅限于方法内或者该作用域内 (1).局部内部类就像是方法里面的一个局部变量一样,是不能有 public、protected、private 以及 static 修饰符的(2).只能访问方法中定义的 final 类型的局部变量,因为:当方法被调用运行完毕之后,局部变量就已消亡了。但内部类对象可能还存在,直到没有被引用时才会消亡。此时就会出现一种情况,就是内部类要访问一个不存在的局部变量;==>使用final修饰符不仅会保持对象的引用不会改变,而且编译器还会持续维护这个对象在回调方法中的生命周期.局部内部类并不是直接调用方法传进来的参数,而是内部类将传进来的参数通过自己的构造器备份到了自己的内部,自己内部的方法调用的实际是自己的属性而不是外部类方法的参数;防止被篡改数据,而导致内部类得到的值不一致   /*        使用的形参为何要为 final???         在内部类中的属性和外部方法的参数两者从外表上看是同一个东西,但实际上却不是,所以他们两者是可以任意变化的,         也就是说在内部类中我对属性的改变并不会影响到外部的形参,而然这从程序员的角度来看这是不可行的,         毕竟站在程序的角度来看这两个根本就是同一个,如果内部类该变了,而外部方法的形参却没有改变这是难以理解         和不可接受的,所以为了保持参数的一致性,就规定使用 final 来避免形参的不改变         */        public class Outer{            public void Show(){                final int a = 25;                int b = 13;                class Inner{                    int c = 2;                    public void print(){                        System.out.println("访问外部类:" + a);                        System.out.println("访问内部类:" + c);                    }                }                Inner i = new Inner();                i.print();            }            public static void main(String[] args){                Outer o = new Outer();                o.show();            }        }    (3).注意:在JDK8版本之中,方法内部类中调用方法中的局部变量,可以不需要修饰为 final,匿名内部类也是一样的,主要是JDK8之后增加了 Effectively final 功能http://docs.oracle.com/javase/tutorial/java/javaOO/localclasses.html反编译jdk8编译之后的class文件,发现内部类引用外部的局部变量都是 final 修饰的 (四).匿名内部类:(1).匿名内部类是直接使用 new 来生成一个对象的引用;(2).对于匿名内部类的使用它是存在一个缺陷的,就是它仅能被使用一次,创建匿名内部类时它会立即创建一个该类的实例,该类的定义会立即消失,所以匿名内部类是不能够被重复使用;(3).使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口;(4).匿名内部类中是不能定义构造函数的,匿名内部类中不能存在任何的静态成员变量和静态方法;(5).匿名内部类中不能存在任何的静态成员变量和静态方法,匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法(6).匿名内部类初始化:使用构造代码块!利用构造代码块能够达到为匿名内部类创建一个构造器的效果  public class OuterClass {            public InnerClass getInnerClass(final int   num,String str2){                return new InnerClass(){                    int number = num + 3;                    public int getNumber(){                        return number;                    }                };        /* 注意:分号不能省 */            }            public static void main(String[] args) {                OuterClass out = new OuterClass();                InnerClass inner = out.getInnerClass(2, "chenssy");                System.out.println(inner.getNumber());            }        }        interface InnerClass {            int getNumber();        }

转载地址:http://vgkta.baihongyu.com/

你可能感兴趣的文章
80后创业的经验谈(转,朴实但实用!推荐)
查看>>
让Windows图片查看器和windows资源管理器显示WebP格式
查看>>
我的友情链接
查看>>
vim使用点滴
查看>>
embedded linux学习中几个需要明确的概念
查看>>
mysql常用语法
查看>>
Morris ajax
查看>>
【Docker学习笔记(四)】通过Nginx镜像快速搭建静态网站
查看>>
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
查看>>
<转>云主机配置OpenStack使用spice的方法
查看>>
java jvm GC 各个区内存参数设置
查看>>
[使用帮助] PHPCMS V9内容模块PC标签调用说明
查看>>
关于FreeBSD的CVSROOT的配置
查看>>
基于RBAC权限管理
查看>>
数学公式的英语读法
查看>>
留德十年
查看>>
迷人的卡耐基说话术
查看>>
PHP导出table为xls出现乱码解决方法
查看>>
PHP问题 —— 丢失SESSION
查看>>
Java中Object类的equals()和hashCode()方法深入解析
查看>>