精华内容
下载资源
问答
  • JAVA第一阶段考试试卷

    千次阅读 2020-06-16 08:37:48
    JAVA第一阶段考试试卷 第一阶段考试试卷 java public class Test { public static void main(String[] args) { int a = 12, b = 20; if (a++ == 13 && ++b ==...

    JAVA第一阶段考试试卷

    第一阶段考试试卷

    java

    public class Test {

    public static void main(String[] args) {

    int a = 12, b = 20;

    if (a++ == 13 && ++b == 21) {

    System.out.println("ok");

    }

    System.out.println("a=" + a);

    System.out.println("b=" + b);

    }

    }

    13  20

     

    赋值操作符:

    =   例如:   int x=0,i=1,j=1;

    *=  例如:   a*=b 等价于 a=a*b

    /=  例如:   a/=b 等价于 a=a/b;

    %=  例如:   a%=b 等价于 a=a%b;

    +=        例如:   a+=b 等价于 a=a+b;

    -=  例如:   a-=b 等价于 a=a-b;

    其他的都是类似情况

     

    a+=1; a++

    特殊情况:i++ 和 ++i

    i++表示先使用i的值,然后再让i自增1。

    ++i表示先让i的值自增1,然后再使用i的值。

    例如:

    int a = 1;

    System.out.println(a++);//1

    System.out.println(a);//2

    ---------------------------------

    int b = 1;

    System.out.println(++b);//2

    System.out.println(b);//2

     

     

    类似的i-- 和 --i也是一样的区别

     

    逻辑操作符

    短路操作符,如果能根据操作左边的布尔表达式就能推算出整个表达式的布尔值,将不执行操作符右边的布尔表达式;

     

    短路与

    && 左边的布尔表达式的值为false, 整个表达式值肯定为false, 此时会忽略执行右边的布尔表达式。

    false&&true

    int a = 1;

    int b = 2;

    int c = 3;

    a>b&&c>b

     

    //没有短路功能

    a>b&c>b

     

    短路或

    || 左边的布尔表达式的值为true, 整个表达式值肯定为true, 此时会忽略执行右边的布尔表达式。

     

    2. 请写出五个运行时异常(5分)

    NullPointerException:

     

    ClassCastException:

     

    ArrayIndexOutOfBoundsException:数组越界

    ArrayStoreException:

    (试图将错误类型的对象存储到一个对象数组时抛出的异常)

     

    ArithmeticException:

    (当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例)

     

    特点:不用try-catcch语句,都在java.lang.RuntimeException下面

     

    3.在java中,产生一个对象的时候,最终是否一定会调用该类中的构造方法?如果不是请举例说明(4分)

    不一定,当反序列化创建对象时就不会调用构造方法

     

    序列化和反序列化:

    Java中的序列化是指把Java对象转换为字节序列的过程

    对象---序列化--->01010101

    Java中的反序列化是指把字节序列恢复为Java对象的过程

    01010101---反序列化--->对象

     

    思考:为什么需要序列化和反序列化?

     

    2)如何实现序列化和反序列化

    使用对象流即可实现对象的序列化和反序列化

    ObjectOutputStream类中的方法可以完成对象的序列化:

    public final void writeObject(Object obj){..}

     

    ObjectInputStream类中的方法可以完成对象的反序列化:

    public final Object readObject(){..}

     

    注:这俩个对象流都属于字节流

     

    3)序列化的要求

    只有实现了java.io.Serializable接口的类的对象才可以被序列化,否则序列化时会报错

     

    思考:测试序列化版本号的作用是什么?

     

    4)transient关键字

    在对象序列化的时候,被transient修饰的属性的值,在序列化过程中是会被忽略掉的。

     

    4.以下代码运行的结果为:(4分)

    public class Test {

    public int test() {

    int a = 1;

    int[] arr = {90,5,6,7};

    try {

    a = arr[arr.length];

    return a;

    } catch (Exception e) {

    a = arr[0]++;

    return a++;

    } finally {

    a = 50;

    }

    }

    public static void main(String[] args) {

    System.out.println(new Test().test());

    }

    }

     

    90

     执行了finally里面的内容

    return表示跳出整个循环返回一个值。

    finally里面加一个return a 会把90给覆盖掉,变成50

    数组下标越界

    对于一个长度为n的数组对象,它的的下标取值范围是[0,n-1],这里的0和n-1就是这个数组对象的下标边界,使用下标的过程中不能超出这个边界。如果超出那么就会运行报错.

    例如:

    int[] a = new int[4];

    a[4] = 10;

     

    运行后结果:

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4

    at com.briup.test.ArrayTest.main(ArrayTest.java:7)

     

     

    5.以下程序运行结果为:(2分)

    public class Test {

    public static void main(String[] args) {

    int x = 127;

    int y = 127;

    Integer a = 127;

    Integer b = 127;

    System.out.println(x == y);

    System.out.println(a == b);

    }}

    true,true

           包装类中存储了:-128~127的地址值(byte范围),所以输出true,超过此范围则表示的对象内存地址值不同,输出false。

    包装类(Wrapper) Integer

    在java中,有八种基本的数据类,这八种类型所表示的数据只是一些简单的数值(8/16/32/64位的数字),它们都不是对象,所以在API又针对这八种类型提供了对于的类类型,也就是包装类型,它们分别是:

     

        Primitive-Type                 Wrapper-Class

    byte                        Byte

    short                        Short

    int                        Integer

    long                        Long

    float                        Float

    double                        Double

    boolean                Boolean

    char                        Character

     

    1)这些对应的包装类型都是java.lang下的类

    在代码中可以直接使用而不需要导入.

     

    2)每种包装类中都定义属性和方法供其对象使用

    这是从基本类型变为包装类型最明显的区别,现在指向的是对象了,可以访问对象中的属性和调用对象中的方法了,之前只是一个简单的数值,没有任何属性和方法。

    例如:

    //使用变量i不能访问任何属性和访问

    //因为变量i没有指向对象,也不能指向对象

    int i = 1;

     

    //查看API可知Integer类中的构造器如果使用

    //使用变量i可以访问Integer类中定义的属性和方法

    //因为变量i指向的是对象,这是一个引用类型的变量

    Integer i = new Integer(1);

    或者

    Integer i = new Integer("1");

     

    注:包装类中的属性和方法大都是静态的,可以使用类名直接访问。(也有非静态的方法,就需要使用对象调用了)

     

    例如:

    main:

    System.out.println(Integer.MAX_VALUE);

    System.out.println(Integer.MIN_VALUE);

    System.out.println(Integer.toBinaryString(100));

     

    3)JDK1.5增加了自动拆箱装箱的功能(低版本JDK中编译报错)

    注:针对八种基本类型及其包装类型,这里以int和Integer为例

     

    //自动装箱,把字面值1包装成Integer类型对象

    Integer i1 = 1;

     

    //自动拆箱,把Integer对象转变为一个简单的int类型值

    int i2 = new Integer(1);

     

    注:

    //编译通过

    Integer a = 1;

     

    //编译报错

    //1可以自动装箱为Integer类型对象

    //但是Integer和Long没有任何关系

    Long b = 1;

     

    //因为int是32位 long是64位

    int --可以自动转换为--> long

     

    //因为Integer和Long没有子父类关系

    Integer --不能转换为--> Long

     

    基本数据类型又可以分为:整型 浮点类型 布尔类型 字符类型

    整型

    byte                8位        1字节

    short                16位        2字节

    int                32位        4字节

    long                64位        8字节

     

    浮点类型

    float                32位        4字节

    double                64位        8字节

     

    布尔类型

    boolean        8位        1字节

     

    字符类型

    char                16位        2字节

     

    注意:java中采用unicode编码,用俩个字节表示一个字符,但是在其他字符编码中可能不是使用俩个字节表示一个字符

     

     

    ==和equals方法的区别

    这俩个都是对俩个变量做比较的。

    1)基本类型变量的比较

    基本类型变量指向的不是对象,不能调用方法,所以只能使用==进行比较,并且比较的是基本类型变量的简单数值是否相等。

     

    2)引用类型变量的比较

    引用类型变量指向的是对象,所以既可以使用==进行比较,也可以使用equals进行比较

     

    区别在于:

    equals是Object中的方法,每个对象都可以调用和其他对象比较是否相等,默认比较的是俩个引用所指向的对象内存地址值(和==号的作用一样),但是也可以在类中对equals方法进行重写,按照自己的逻辑来比较俩个对象。

     

    ==是java中的基本的操作符,是不能重写的,俩个引用使用==进行比较,那么比较的是引用所指向的内存地址值是否相同。

     

    6.方法的重载的要求是什么?方法的重写中,对方法的访问修饰符和抛出异常分别有什么要求?(5分)

    方法重载要求参数列表不同,并且只能发生在本类种,重写的方法的访问修饰符只能大或者同级,抛出的异常只能同级或者比原来的异常范围小

     

    方法重载

    类中有多个方法,有着相同的方法名,但是方法的参数各不相同,这种情况被称为方法的重载。

    方法的重载可以提供方法调用的灵活性。

     

    例如:System.out.println()中的println方法,为什么可以把不同类型的参数传给这个方法?

     

    例如:

    public class Test{

    public void test(String str){

     

    }

     

    public void test(int a){

    }

    }

     

     

    方法重载必须满足一下条件:

    1)方法名相同

    2)参数列表不同(参数的类型、个数、顺序的不同)

    public void test(Strig str){}

    public void test(int a){}

     

    public void test(Strig str,double d){}

    public void test(Strig str){}

     

    public void test(Strig str,double d){}

    public void test(double d,Strig str){}

    3)方法的返回值可以不同

     

    注:在java中,判断一个类中的俩个方法是否相同,主要参考俩个方面:方法名字和参数列表

     

    方法重写(方法覆盖)

    1)方法重写只存在于子类和父类(包括直接父类和间接父类)之间。在同一个类中方法只能被重载,不能被重写.

     

        2)静态方法不能重写

           a. 父类的静态方法不能被子类重写为非静态方法 //编译出错

           b. 父类的非静态方法不能被子类重写为静态方法;//编译出错

           c. 子类可以定义与父类的静态方法同名的静态方法(但是这个不是覆盖)

    例如:

     A类继承B类 A和B中都一个相同的静态方法test

     B a = new A();

     a.test();//调用到的时候B类中的静态方法test

     

     A a = new A();

     a.test();//调用到的时候A类中的静态方法test

     

         可以看出静态方法的调用只和变量声明的类型相关

     这个和非静态方法的重写之后的效果完全不同

     

        3)私有方法不能被子类重写

    子类继承父类后,是不能直接访问父类中的私有方法的,那么就更谈不上重写了。

     

    例如:

    public class Person{

    private void run(){}

    }

    //编译通过,但这不是重写,只是俩个类中分别有自己的私有方法

    public class Student extends Person{

    private void run(){}

    }

     

     

        4)重写的语法

    1.方法名必须相同

    2.参数列表必须相同

    3.访问控制修饰符可以被扩大,但是不能被缩小

    public protected default private

    4.抛出异常类型的范围可以被缩小,但是不能被扩大

    ClassNotFoundException ---> Exception 

    5.返回类型可以相同,也可以不同,如果不同的话,子类重写后的方法返回类型必须是父类方法返回类型的子类型

    例如:父类方法的返回类型是Person,子类重写后的返回类可以是Person也可以是Person的子类型

     

    注:一般情况下,重写的方法会和父类中的方法的声明完全保持一致,只有方法的实现不同。(也就是大括号中代码不一样)

     

    例如:

    public class Person{

    public void run(){}

     

    protected Object test()throws Exception{

    return null;

    }

    }

    //编译通过,子类继承父类,重写了run和test方法.

    public class Student extends Person{

    public void run(){}

     

    public String test(){

    return "";

    }

    }

     

     

        5)为什么要重写

    子类继承父类,继承了父类中的方法,但是父类中的方法并不一定能满足子类中的功能需要,所以子类中需要把方法进行重写。

     

    7.请写出Java中的基本数据类型和引用数据类型分别有哪些?,并指出基本数据类型的变量 和 引用数据类型的变量,俩者的核心区别是什么?(4分)

    基本数据类型:byte short int long float double char boolean 

    引用数据类型:类类型 接口 数组

    基本数据类型变量直接存储在栈上;引用数据类型变量,首先要在栈上给其引用分配一块内存,而对象的具体信息都存储在堆内存上,然后由栈上面的引用指向堆中对象的地址

     

    8.假如T1线程和T2线程出现了死锁的状况,那么请说明该状态下,线程和锁的持有情况。(5分)

    有两个锁,T1线程锁住第一个,T2线程锁住了第二个,同时T1试图锁第二个,失败,因为T2已经锁住了,T1只能等待.就在这时T2试图锁第一个,结果失败,因为T1已经锁住了,T2只好等待

     

    9.以下代码运行是否有错,如果没有报错,结果是什么?,如果报错应该怎么改?(2分)

     

    class Person {

     

    }

    public class Test {

    public static void main(String[] args) throws IOException, Exception {

    List<Person> persons = new ArrayList<>();

    persons.add(new Person());

    persons.add(new Person());

    persons.add(new Person());

    persons.add(new Person());

     

    FileOutputStream fos = new FileOutputStream("src/obj.txt");

    ObjectOutputStream oos = new ObjectOutputStream(fos);

    oos.writeObject(persons);

    oos.flush();

    oos.close();

             System.out.println(“保存成功”)

    }

    }

     

    报错,当容器被序列化时,容器里面的数据也要被序列化。因此需要将Person类实现序列化接口。

    class Person implements Serializable {

    }

     

    *10. 类A中有非静态方法x,类B中有非静态方法y,请问在x方法和y方法上直接使用synchronized关键字分别修饰这俩个方法,那么在多线程环境下,这个俩个方法x和y,是否可以实现线程同步的效果?如果不可以,请说明原因,并简单说明如果修改可以让它们实现线程同步的效果?(4分)

    不可以,当synchronized修饰非静态方法时,锁对象为this,因此不可以实现同步,将同步方法换成同步代码块并且使用同一个锁对象

     

        线程同步的实现

    在java中,使用synchronized关键字来实现线程同步的效果。

    synchronized关键字可以用来修饰方法,也可以直接作用到某段代码上

     

    例如:

    public class Test{

    private int x;

    public synchronized void test(){

    String name = Thread.currentThread().getName();

    for(int i=0;i<100;i++){

    x++;

    }

    System.out.println(name+": x="+x);

    }

    }

     

     

    例如:

    public class Test{

    private int x;

    public void test(){

    String name = Thread.currentThread().getName();

    synchronized(this){

    for(int i=0;i<100;i++){

    x++;

    }

    }

    System.out.println(name+": x="+x);

    }

    }

     

     

     

    synchronized关键字是加锁的意思,用它来修饰方法就表示给该方法加了锁,从而达到线程同步的效果;用它来修饰代码块就表示给该代码块加了锁,从而达到线程同步的效果。

     

    例如:一个方法test使用synchronized关键字修饰后加了锁,如果这个时候有俩个线程对象t1和t2要并发访问test方法,假设t1先抢到了CPU的执行权,从而率先拿到了test方法上的锁,然后就进到test方法中执行代码,一个时间片用完之后,就退回到就绪状态,但是t1线程却依然拿着锁,那么下次CPU的抢占即使是t2抢到了也没有办法执行test方法,因为t2拿不到锁就没有办法进到test方法中执行代码,这时候t2线程就会进入到锁池里面了。

     

    注:java中任何对象都可以当做锁,能否拿到锁就决定了一个线程是否能进入到被锁的代码块中去执行代码

     

     

    例如:

    public class Test{

    //默认使用this来充当这把锁,锁的是test1方法

    public synchronized void test1(){

    //代码

    }

    //默认使用this.getClass()来充当这把锁,锁的是test2方法

    public static synchronized void test2(){

    //代码

    }

     

    public void test3(){

    //这种形式可以使用任意对象充当锁,锁的是这个代码块

    synchronized(任意对象){

    //代码

    }

    }

    }

     

     

    11. byte类型的数字的最小值和最大值分别是多少?如果把数字-8进行先取反(~)然后再加1,那么结果打印出来是多少?(3分)

    最小值 -128,最大值 127    8

     

    12. java中的io流中,InputStream类是字节输入流中的父类型,类中有我们常用的非常重要的方法read,请说明一下三个read方法的作用:(3分)

    int read();

    int read(byte[] buf);

    int read(byte[] buf,int a,int b);

      read();

     从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节,

    返回读取得字节

     read(byte[] buf);

    从输入流中读取一定数量的字节,并将其存储在缓冲区数组 buf中。返回读取得字节数量。

     read(byte[] buf,int a,int b)

    将输入流中最多 len 个数据字节读入 byte 数组。尝试读取 len 个字节,但读取的字节也可能小于该值。以整数形式返回实际读取的字节数

     

    13. 拥有静态成员的内部类一定是静态内部类吗,如果不是,请举例说明。(2分)

    拥有静态成员的内部类一定是静态内部类

     

    14.以下代码是否会编译报错,如果报错请指出哪一行代码报错,并说明理由。(2分)

    public static void main(String[] args) {

    short a = 1; // 第一行

    a += 1;     // 第二行

    a = a + 1; // 第三行

    }

    a += 1;隐式强制转换

    第三行代码编译报错,在运算时会先将a自动转成int类型,两个int类型数据相加结果还是为int,然后将int类型数据赋给short类型就会编译报错。

     

    类型转换

    1)基本类型之间的转换

    隐式转换(自动转换)

    byte a = 1;

    //a是byte类型(8位),b是int类型的(32)

    //编译通过,类型自动转换(隐式转换)

    int b = a;

     

    特点:小的可以自动转换(隐式转换)为大的,因为无非就是在前面多补几个0而已,不会影响数据值

     

    显式转换

    //编译报错,32位的值给8位的变量

    int a = 100;

    byte b = a;

     

    //编译通过

    //这时候需要类型强制转换(俗称强转,也就是显式转换)

    int a = 100;

    byte b = (byte)a;

                0100 0000 0000 0000

                          0000 0000

    特点:大的值给小的变量,需要强制转换,但是转换后的结果JVM不会保证还是正确的,因为这是程序员自己的个人行为.

     

     

    2)引用类型之间的转换

    隐式转换

    //编译通过,类型自动转换(隐式转换)

    Student s = new Student();

    Object o = s;

     

    特点:子类类型的变量可以自动转换(隐式转换)为父类类型

     

    显式转换

    //编译通过,运行后也不报错

    //因为引用o本来指向的就是Student对象

    Object o = new Student();

    Student s = (Student)o;

     

    //编译通过,运行后报错

    //因为o本来指向的时候Teacher对象

    //而Teacher类型对象和Student类型没有任何关系

    Object o = new Teacher();

    Student s = (Student)o;

     

     

    15.请描述List集合、Set集合、Map集合的特点,Map集合中entrySet方法的返回值是什么?(4分)

    List集合能够存放有序可重复的数据

    Set集合存放无序不可重复的数据

    Map集合一次能够存两列数据,并且key不可重复

    Map集合中 entrySet返回的是Entry的Set集合(写键值对的Set集合也可以)。

     

    List接口和Set接口

    List和Set都是Collection接口的子接口,但它们各自的特点不同。

     

    List类型集合特点:集合中的元素有序且可重复

    Set类型集合特点 :集合中的元素不可重复,有没有序要看Set接口具体的实现类是谁。

     

    注:有序指的是元素放到集合中的顺序和循环遍历出来的顺序一致

     

    List接口常见的实现类有:ArrayList、LinkedList、Vector等

    1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构

    2.对于数据的随机访问,ArrayList效率优于LinkedList,因为LinkedList要移动指针

    3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据

    4.Vector是线程安全的集合,但是速度慢

    5.查看API可知,List接口中是这些集合中共有的方法,而且每个集合类中又有一些自己独有的方法。

     

    Set接口常见的实现类有:HashSet、LinkedHashSet

    HashSet集合中元素的特点 :无序不可重复

    LinkedHashSet集合中元素的特点:有序不可重复

     

    Map接口

    Map类型的集合与Collection类型的集合不同,Map类型的集合存储数据的时候,要使用Key-Value的形式(键值对),且Key值不能重复,否则会覆盖原来的键值对

     

    Map接口中的一些方法

    put                        方法

    get                        方法

    clear                        方法

    containsKey                方法

    containsValue                      方法

    isEmpty                        方法

    size                        方法

    remove                        方法

     

    Map接口的常用实现类

    HashMap类和Hashtable类

    1.HashMap是线程不安全的,Hashtable是线程安全的

    2.HashMap允许key值或者value值为null,但是Hashtable中的key值或者value值都不允许为null,否则报错.

     

    注:map中的key和value都必须是Object

     

    Map类型集合的遍历

    1.使用keySet方法,可以返回该Map集合中的所有key值的set类型集合

    例如:

    Map map = new HashMap();

    //调用put方法存值

     

    for(Object key:map.keySet()){

    System.out.println(key+" : "+map.get(key));

    }

     

    2.使用values方法,可以返回该Map集合中所有value值的Collection类型集合

    例如:

    Map map = new HashMap();

    //调用put方法存值

     

    for(Object value:map.values()){

    System.out.println(value);

    }

     

    3.使用entrySet方法,可以返回该Map集合中,包含所有Entry类型对象的Set集合

    Set<Map.Entry<K,V>> entrySet();

    注:Entry是声明Map接口中的内部接口(看API或源码可知),一个Entry类型对象就表示Map中的一组键值对(K-V)

     

    例如:

    Map map = new HashMap();

    //调用put方法存值

     

    Set entrySet = map.entrySet();

    for(Object obj:entrySet){

    Entry entry = (Entry)obj;

    System.out.println(entry.getKey());

    System.out.println(entry.getValue());

    }

     

    注意这里导入Entry接口的形式。

     

    SortedMap接口和TreeMap类

    SortedMap接口是Map的子接口,其进一步提供对于键的排序功能。

    TreeMap类就是SortedMap接口的实现类。

     

    TreeMap可以对key值进行自然排序或者比较器排序,其用法和TreeSet是一致的。

     

    *16.请问以下代码无论运行多少次一定是 ”test11..”打印在前,”test22..”打印在后吗,如果是请说明原因,如果不是也请说明原因。(3分)

     

    public static void main(String[] args) {

    Thread t1 = new Thread() {

    @Override

    public void run() {

    System.out.println("test11..");

    }

    };

    Thread t2 = new Thread() {

    @Override

    public void run() {

    System.out.println("test22..");

    }

    };

    t1.run();

    t2.run();

    }

    是的,因为没有启动线程,而是调用了线程里面得run方法,属于方法的调用是单线程,不是多线程。

     

    17.请问可以调用某些特定的方法让jvm强制性的进行垃圾回收吗,如果可以请说明理由,不可以也请说明理由。(2分)

    不可以,java开发人员可以调用特定的方法请求jvm去进行垃圾回收,具体回不回收还是由jvm去决定

     

    18.抽象方法是否可以为静态的,如果可以直接写可以,如果不可以请说明理由。(2分)

    不可以,因为如果可以,那么就可以通过类名去调用,而抽象方法没有方法体无法去执行该抽象方法 。或者 抽象方法就是用来被子类重写的,而静态方法不能够被重写,所以冲突。

     

    19.请写出获取一个类类型的Class对象的几种方式?基本数据类型是否可以获取其Class对象,如果不可以直接写不可以,如果可以,请举例说明。(4分)

    Class.forName(“全类名”);

    类名.class

    对象名.getClass();

    基本数据类型可以获取Class对象,方式为: 基本数据类型.class

     

    *20. Java中的泛型的上限和下限是什么意思,请使用List接口声明局部变量的方式,来举例说明该问题(4分)

    向下限定:

    List<? extends Object> list = new ArrayList<>();

    泛型只能为 Object或者Object的子类

    向上限:

    List<? super String> list = new ArrayList<>();

    泛型只能为:String以及String的父类

     

    21. 抽象类与接口的区别是什么?抽象类与接口是否都有构造器,为什么?(4分)

    抽象类:

    抽象类中可以拥有抽象方法也可以拥有非抽象方法

    抽象类中可以拥有普通变量也可以拥有常量

    抽象类中可以拥有着自己的构造器

    接口:

    接口里面所有得方法都是抽象方法

            接口里面所有得变量都是静态常量

    接口没有构造器

    抽象类有构造器,接口没有,因为类与类是继承关系,当创建子类对象时会调用父类中的构造器。而类与接口是实现关系,当创建该类对象时会调用该类的父类的构造器。

     

    22. 请对以下数组进行扩容,请写出代码(写出一种方式即可)(3分)

    int[] arr = {1,2,3,5};

    int[] arr = {1,2,3,5};

    int[] obj = new int[arr.length * 2 + 1];

    System.arraycopy(arr, 0, obj, 0, arr.length);

    arr = obj;

     

    *23. 以下代码执行结果为?(3分)

    class A {

    public A() {

    System.out.println(getName());//已经被子类重写l

    }

    public String getName() {

    return "lisi";

    }

    }

    public class Test extends A {

    public Test() {

    System.out.println(getName());

    }

    public String getName() {

    return "wangwu";

    }

    public static void main(String[] args) {

    new Test();

    }

    }

    wangwu  wangwu

     

    24. int a = 15;

       int b = 3;

    怎么能把变量a和变量b的值进行交换?(要求不使用第三个变量,至少写出【俩种】方案)(4分)

    第一种:

    a = a ^ b;

    b = a ^ b;

     a = a ^ b;

    第二种:

        a = a + b;

     b = a - b;

     a = a – b;

     

     

    *25.假设现在我们登录unix服务器后所处的位置在  /home/tom(4分)

      /home/tom目录下有来个子目录:

    /home/tom/src

    /home/tom/bin

      我们在当前/home/tom下使用vi命令分别编写俩个java源文件

      vi src/Student.java

      vi src/StudentTest.java

      在StudentTest.java中的主函数中测试Student类中的某个方法,这俩个类都是com.test包下面的类

      那么现在我们要如何用命令去*编译*这俩个类并且*运行*StudentTest类中的主函数?

      要求:这俩个类要一个一个编译,最后再运行StudentTest类的主函数,并且编译好的东西放到bin下面

     

    javac -d ./bin ./src/Student.java

    *javac -d ./bin -classpath ./bin/ ./src/StudentTest.java

    java -cp ./bin com.test.StudentTest

     

    *26.有以下代码(3分)

     

    public void test()throws Exception{

    synchronized (getClass()) {

    for(int i=0;i<100;i++){

    if(i==10){

    wait();

    }

    }

    }

    }

    代码编译运行的结果是什么?为什么?

    运行抛出异常

    锁对象为字节码对象,而wait()方法的调用是this

     

    27. 下列程序在1处是否会有异常,如果没有,输出是什么?是否会运行到2处,如果会,输出是什么?为什么会有这样的结果?(3分)

    public class TestClass {

    public static void main(String args[]) {

    List list = new ArrayList();

    test2(list);

    System.out.println(list.size()); // 1

    test3(list);

    System.out.println(list.size()); // 2

    }

    public static void test2(List list) {

    list = null;

    }

    public static void test3(List list) {

    list.add("aaaa");

    }

    }

     

    1处没有异常,输出结果为0

    可以运行到2处,结果为1

    *(为什么得出这个结论?)因为方法的传递为引用传递,传递的是地址,对地址操作就是对堆里面的内存进行操作

     

    28. 定义一个类Person,将多个Person对象存入TresSet中,此时有几种方式可以对集合中的对象进行排序?如果是把这些对象存放到List集合中,又该如何排序?(5分)

    将Person存入TreeSet排序有两种方式:

    List本身是有序的,按照放入先后顺序去进行排序

     

    TreeSet类的排序功能

    注:TreeSet排序永远都是从小到大排,但是谁大谁小是我们的方法说了算的

    1.自然排序

    核心:让元素自身具备比较性,需要实现Comparable接口,重写其compareTo方法,比较出大小后即可进行排序

    java.lang.Comparable接口

    例如:

    public class Student implements Comparable{

    private long id;

    public long getId() {

    return id;

    }

    public void setId(long id) {

    this.id = id;

    }

    public int compareTo(Object o) {

    Student s = (Student)o;

    if(this.id<s.id){

    return -1;

    }

    else if(this.id>s.id){

    return 1;

    }

    return 0;

    }

    }

     

    注:

    s1.compareTo(s2);

    返回正数说明s1大

    返回负数说明s1小

    返回0说明s1和s2相等

     

    2.比较器排序(定制排序、客户化排序)

    核心:使用比较器进行元素之间的比较,比较出大小后即可进行排序。

    java.util.Comparator接口

    例如:

    main:

    Set set = new TreeSet(new Comparator() {

    @Override

    public int compare(Object o1, Object o2) {

    Student s1 = (Student) o1;

    Student s2 = (Student) o2;

    return (int)(s1.getId()-s2.getId());

    }

    });

     

     

    注:比较器排序的优先级比自然排序的高

     

    29. 网络编程中(TCP),一般情况下,如何在客户端中连接服务器端,如何知道当前是否连接成功?(2分)

    在客户端创建sokcet对象并且指定ip与端口

    只要服务端正常执行完 accpect()方法,就代表经历过了三次握手,客户端与服务端连接成功

     

    *30. 有以下代码(5分)

    public interface Test{

    <T> T t(T t);//代码1

    }

    解释代码1的含义。

    泛型标识符为T,返回值为泛型T, 方法名为 t,形参的数据类型为泛型T,形参名为t

    • 第一种是自然排序,实现Comparable
    • 第二种是在创建TreeSet时传入一个比较器
    • 运行下面代码输出结果是: (4分)
    展开全文
  • 2016年10月份新开班的阶段测试,全国校区通用,里面的答案有部分是我自己写的,不全是正确答案,【仅供有多余的学习时间的同学以及在家自学的同学】,在读基础班的同学切勿用这套试卷作弊去拿高分,因为每次...
  • java学习s1阶段考试试卷(有答案),内容涉及java初级和高级内容(oracle,线程,异常,冒泡排序,单例模式)
  • JAVA第阶段考试试卷

    千次阅读 2020-06-16 08:49:05
    JAVA第阶段考试试卷 第四阶段考试 每题2分,50*2=100分 给分标准: 2分-全答对 1分-答对一半以上 0分-其他情况 ======================================================= ...

    JAVA第四阶段考试试卷

    第四阶段考试

     

    每题2分,50*2=100分

     

    给分标准:

    2分-全答对

    1分-答对一半以上

    0分-其他情况

    =======================================================

     

    1.HTML4.01的文档类型声明有三种:strict,loose,frameset,这三种分别表示的含义是什么?

     

    答案:

    strict                严格的文档类型

    loose                宽松的文档类型

    frameset        框架文档类型

     

     

    2.HTML页面中的meta元素的作用是什么?

     

    答案:

    定义元数据关键字

    例如描述页面作者、版权信息、关键字信息等

    <meta name="Author" content="licy">

    <meta name="Copyright" content="版权信息">

    <meta name="Description" content="描述信息">

    <meta name="keywords" lang="zh-cn" content="精品图书">        

    设置请求报头

    例如设置Content-Type,设置Cache-Control等

    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">

     

     

    3.什么是C/S架构,什么是B/S架构,他们之间的联系是?

     

    答案:

    C/S架构:Client-Server 客户端-服务器端模式

    B/S架构:Browser-Server 浏览器-服务器模式

    B/S特殊的C/S架构,对C/S结构的一种变化或者改进的架构。

     

    4.软件开发的三层架构是哪三层?各个层级的作用分别是什么?

     

    答案:

    dao层                数据访问层/数据交互层                与数据库进行增删改查操作

    service层        业务逻辑层                                        处理业务逻辑,如登录的判断

    web层                表现层/用户访问层                        接收请求,反馈(页面/数据)

     

    5.<div id="dd" class="header">hello</div>,分别使用标签选择器/类选择器/ID选择器来选中

    这个div,并且改变div中文字的颜色为红色

     

    答案:

    标签选择器:

    div{

    color:red;

    }

    类选择器:

    .header{

    color:red;

    }

    ID选择器:

    #dd{

    color:red;

    }

     

    6.jsp的全称是什么?jsp和html的区别是什么?

     

    答案:

    jsp的全称为: java server page

    jsp是动态页面,其中可以嵌入java代码,其本质是一个servlet

    html是静态页面,其中不能嵌入java代码

     

     

    7.hello.jsp页面将来被翻译成的java文件的名字叫什么?hello.jsp页面中有如下代码,这三种情况的代码分别会被翻译到java类中的什么位置?

     

    jsp语法

    <%=代码1  %>

    <% 代码2  %>

    <%!代码3  %>

     

    答案:

    hello.jsp被翻译成的java类的名字为: hello_jsp.java

    代码1 被翻译成hello_jsp类中的_jspService方法里面的out.print(..)的参数.

    代码2 被翻译成hello_jsp类中的_jspService方法中的代码

    代码3 被翻译成hello_jsp类中代码

     

    8.jsp的指令元素分别有哪些,他们的作用是什么?

     

    答案:

    page指令:                设置jsp页面的相关信息

    include指令:        在jsp页面中完成静态包含的效果

    taglib指令:                在jsp中引入标签库

     

    9.列出三个常见到的jsp动作元素,并且说明其作用?

     

    答案:

    <jsp:useBean> 使用javabean对象

    <jsp:forward> 进行服务器内部跳转

    <jsp:param>          进行参数传递

     

     

    10.jsp中的内置对象有哪些,分别列举出来

     

    答案:

    PageContext         pageContext

    HttpServletRequest  request

    HttpSession                        session

    ServletContext            application

    Object                                page

    HttpServletResponse response

    JspWriter                        out

    ServletConfig            config

    Throwable                        exception

     

    11.JSP页面四大容器对象(域对象)及作用范围?

     

    答案:

    容器对象                        作用范围

    pageContext                 当前页面(一个页面)

    request                 一次请求

    session                 一次会话

    application                整个web应用/整个项目

     

    12.jsp页面中直接嵌入java代码会让页面慢慢变得难以维护,所以我们常常会采用另外一种方式来处理,这种方式是什么?

     

    答案:

    JSTL标签库+EL表达式

     

    13.servlet接口中的方法有些,请列出至少三种

     

    答案:

    void         init(ServletConfig config)        当Servlet对象被服务器创建时调用,仅调用一次。

    void         destroy()        服务器关闭连接之前调用,仅一次。

    void         service(ServletRequest req, ServletResponse res)        可被服务器调用多次。

    String         getServletInfo()        方法返回这个Servlet对象的信息例如作者,版本和版权

    ServletConfig         getServletConfig()        返回一个包含了该Servlet的初始化和启动了的参数的ServletConfig 对象

     

    14.在后台封装好了一个List集合students,现有一个JSP页面。

    需求:通过访问该页面,展示所有学生的学号和姓名。

    提示:实现JSP页面中核心代码,如果实现困难,可写流程步骤

     

    答案:

    项目引入jstl的jar包,JSP声明引入jstl标签库

    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

     

    //List集合students:students

    <c:forEach items="${students}" var="s/studnent">

    ${student.id},

    ${student.name}

    </c:forEach>

     

    15.servlet中,解决get方式和post方式传参有乱码的方案是什么?

     

    答案:

    get方式乱码:

    在tomcat服务器中server.xml文件<Connector>标签中加入新的属性URIEncoding="UTF-8"

     

    post方式乱码:

    在使用request获取参数之前,把request中的编码进行设置

    request.setCharacterEncoding("UTF-8");

     

     

    16.servlet中的服务器跳转和客户端重定向的区别?

     

    答案:

    转发在服务器端完成的,重定向是在客户端完成的

    服务器跳转

    使用request对象来完成,本质是让同一个请求在服务器内部的资源之间进行转发

     

    重定向的区别

    使用response对象来完成,本质是让浏览器再重新发送一个新的请求

     

    17.请说明request.getAttribute()和request.getParameter()区别

    request.getAttribute(),获取容器对象request的值,返回值为Object;

    request.getParameter(),获取请求中参数的值,返回值为String。

     

    18.在路径中最左边的"/",让服务器解析和让客户端解析分别是什么含义?        

     

    答案:

    服务器解析

    路径中最左边的/代表的是url中项目名后面的/

     

    客户端解析

    路径中最左边的/代表的是url中端口号后面的/

     

     

    19.浏览器每次发送请求,服务器是怎么根据cookie中的值来找到其对应的session对象的?

     

    答案:

    1)客户端访问服务器的时候,假设服务器创建了一个session对象,服务器端的内存里面同时可能有好多个session对象,分别对应的不同客户端的

    访问,每一个session对象都有一个唯一的id值,叫做JSESSIONID。

     

    2)服务器端给客户端产生一个session对象后,会通过这次访问的response对象把这个session的JSESSIONID的值返回给浏览器,浏览器接收到后会

    把这个值以一个cookie文件的形式保存起来.

     

    3)在此之后,这个浏览器再发请求到服务器的时候,就会把之前保存在cookie文件中的JSESSIONID的值传给服务器,服务器通过这个JESSIONID的

    值就能够知道服务器内存中是哪一个session对象和当前这个客户端对应.

     

     

    20.过滤器filter在拦截到请求之后,会调用哪个方法?filter和filter直接进行请求的传递应该调用哪个方法?

     

    答案:

    filter在拦截到请求之后,调用的方法是doFilter

    filter和filter直接进行请求的传递,调用的方法是chain.doFilter

     

     

    21.Servlet的生命周期?

     

    答案:

    1.初始化阶段:调用init()方法

    2.响应客户请求阶段:调用service()方法,根据请求参数的不同调用doGet()或者doPost()

    3.终止阶段:调用destroy()方法

     

    22.描述Cookie和Session的作用,区别和各自的应用范围。

     

    答案:

    cookie记录在客户端,session记录在服务器端;

    cookie因为保存在客户端,所以不是很安全,保存在服务器端会更安全。

    cookie有长度限制,session没有。

    每一个session在服务端有一个sessionID作一个标识。存储的数据量大;浏览器的Cookies 不能超过300个,并且每个不能超过4KB,因此总Cookie 文件大小限制在1200KB 之内。

    Cookie是在客户端开辟的一块可长期存储用户信息的地方;Session是在服务器内存中开辟的一块存储用户信息的地方;

     

    23.手机号码为11位,假设开头只能是158和159,写出其对应的正则表达式。

     

    答案:

    var reg = /^(158|159)\d{8}$/;

     

     

    24.mybatis中配置文件,映射文件,映射接口三者是如何关联的?

     

    答案:

    配置文件关联映射文件:mapper标签的resource属性

    映射文件关联映射接口:mapper标签的namespace属性

     

    25.mybatis一对一映射和一对多映射使用的标签分别是?

     

    答案:

    [resultMap] association

    [resultMap] collection

     

    26.spring中的DI、IOC和AOP分别指的是什么?

     

    答案:

    DI (Dependency Injection) 依赖注入

    IOC(Inversion of Control) 控制反转

    AOP(Aspect Oriented Programming) 面向切面编程

     

    27.在spring的注解配置中,项目里的web层、service层、dao层的类分别使用什么注解进行配置?

     

    答案:

    web 层使用@Controller

    service 层使用@Service

    dao层使用@Repository

     

    28.Java中代理模式分为几类,有什么区别?

     

    答案:

    静态代理:由程序员创建代理类或特定工具自动生成源代码再对其编译。在程序运行前代理类的.class文件就已经存在了。【即 在程序运行前,目标类完成,代理类完成。】

    动态代理:在程序运行时运用反射机制动态创建而成。【即 在程序运行前,目标类完成,代理类未完成。】

     

    29.在spring的AOP中,joinPoint和pointCut俩个概念分别是什么意思?

     

    答案:

    joinPoint表示连接点

    在spring的aop中只有 类中的方法 可以做连接点,每一个方法都可以是一个连接点.

    pointCut表示切入点

     

    30.什么是Spring MVC ?简单介绍下你对springMVC的理解?                

     

    答案:

    Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。

     

    31.Springmvc的优点。

     

    答案:

    (1)可以支持各种视图技术,而不仅仅局限于JSP;

    (2)与Spring框架集成(如IoC容器、AOP等);

    (3)清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。

    (4) 支持各种请求资源的映射策略。

     

    32.在SpringMVC中完成一次请求,所涉及到的核心组件有哪些?

     

    答案:

    1)DispatcherServlet:    前端控制器        请求入口

    2)Controller/Headler:   控制器/处理器        

    3)HandlerMapping:                处理器映射器        请求派发,负责请求和控制器建立一一对应的关系

    4)HandlerAdaptor:                处理器适配器        

    5)ViewResolver:                        视图解析器        定位页面

     

    33.Controller中的功能处理方法的返回值类型一般都有哪些,分别表示什么?

     

    答案:

    1)ModelAndView  表示模型和视图的结合体

    2)String                表示逻辑视图名

    3)void                        表示方法内部自己处理影响内容

     

    34.注解@Controller和@RestController有什么异同?

     

    答案:

    相同点:都写在类名上,标识着这是一个控制器

    不同点:

    @RestController是restful开发风格,相当于        

    @Controller + 类中每个方法都有注解@ResponseBody

     

     

    35.springMVC中,我们可以使用哪些对象将数据带到页面?

     

    答案:

    HttpServletRequest, HttpSession, ServletContext, Map, Model, ModelMap

     

    36.@RequestBody和@ResponseBody分别表示什么意思

     

    答案:

    @RequestBody表示从请求的正文中取值 // spring就会将request body中的json/xml对象解析成该参数类型的Javabean对象。

    @ResponseBody表示当前功能处理方法的返回值作为响应的正文

     

    37.如下配置,表示的含义是什么?

    <mvc:view-controller path="/hello" view-name="hello"></mvc:view-controller>

     

    答案:

    当前浏览器访问的url为/hello的时候,SpringMVC内部则直接返回名字为hello的逻辑视图给视图解析器

     

    38.如下配置表示什么意思?请写出符合url。

         

    @RequestMapping(value="/user/{userId:^\\d{4}-[a-z]{2}$}")

     

    答案:

    该url采用的时候正则表达式风格的映射,浏览器只有发送符合表达式规则的请求才会被处理,例如: /user/1234-ab

     

     

    39.@RequestMapping注解中的consumes属性和produces属性,分别和请求头信息中的哪个key对应

     

    答案:

    consumes对应请求头信息中的Content-Type        代表发送端(客户端|服务器)发送的实体数据的数据类型

    produces对应请求头信息中的Accept        代表发送端(客户端)希望接受的数据类型。

     

     

    40.@InitBinder注解可以解决什么问题?

     

    答案:

    浏览器传值给Controller中的功能处理方法,需要把传的值按照自己定义的规则转换为指定的对象,这时候可以在该Controller中使用@InitBinder注解来进行处理.例如:把浏览器传的字符串转换为日期对象

     

    41.@Scope注解的作用。

     

    答案:

    SpringMVC中的Controller对象默认是单例,可以使用@Scope注解将其变为非单例.

     

    42.在SpringMVC中如何使用返回字符串的形式来表示服务器内部跳转/hello,以及然后表示客户端重定向到/hello。

     

    答案:

    服务器内部跳转

    return "forward:/hello";

     

    客户端重定向

    return "redirect:/hello";

     

    43.SpringMVC中一般实现拦截器的方式有几种?分别介绍下。

     

    答案:

    第一种方式是要定义的Interceptor类要实现了Spring的HandlerInterceptor 接口

    第二种方式是继承实现了HandlerInterceptor接口的类,比如Spring已经提供的实现了HandlerInterceptor接口的抽象类HandlerInterceptorAdapter

     

    44.Spring Boot 需要独立的容器运行吗?

     

    答案:

    可以不需要,内置了 Tomcat/Jetty 等容器。

     

    45.运行 Spring Boot 有哪几种方式?

     

    答案:

    1)打包用命令或者放到容器中运行

    2)用 Maven/Gradle 插件运行

    3)直接执行 main 方法运行

     

    46.简述Spring Boot的优点.

     

    答案:

    简化编码

    简化配置

    简化构建

    简化部署

    简化监控

     

    spring boot 可以快速的开发出 restful 风格的系统架构。

    方便的自动化,非常适合做微服务架构的搭建

    单一 jar 包运行的方式让部署和管理也非常方便。

    除了精简配置这方面, 另外还可以让 spring 生态圈和其他工具链进行方便快速的整合(比如 redis, email, hibernate,mybatis,amqp 等)

     

    47.Spring Boot 的配置文件有哪几种格式?它们有什么区别?

     

    答案:

    .properties 和 .yml,它们的区别主要是书写格式不同。另外,.yml 格式不支持 @PropertySource 注解导入配置。

     

    48.Sping Boot 自动配置是如何实现的。

     

    答案:        

    @ComponentScan将扫描和加载一些自定义的类,@EnableAutoConfiguration将导入一些自动配置的类。

    这些自动配置的类很多,并且他们都处于org.springframework.boot.autoconfigure这个包下面。

    这些配置类都会被导入并处于备用状态。假如你在maven文件当中引入了相关的包的时候,相关功能将被启用。

    自动配置在加载一个类的时候,会首先去读取项目当中的配置文件(application.properties),假如没有,就会启用默认值

     

     

    49.为什么要使用Spring Data。

     

    答案:

    Spring Data JPA为Java Persistence API(JPA)提供了存储库支持。它简化了需要访问JPA数据源的应用程序的开发。

     

    50.使用 Spring Data JPA 进行持久层开发需要继承什么接口?

     

    答案:

    JpaRepositories

    展开全文
  • CoreJava第一阶段内容考试
    CoreJava第一阶段内容考试
    package Test;
    /*
    1.说一下 &和&& 的区别
    & 是非短路与, 第一个逻辑表达式为false,第二个表达式依然会执行判断
    && 是短路与,第一个表达式为 false ,第二个表达式不会判断执行
    2.方法覆盖和方法重载的语法要求
    方法覆盖:
    访问修饰符 子类与父类的访问修饰符相同或者更宽
    返回值类型  子类与父类的返回值类型相同或是其子类型
    函数名相同 形参列表相同
    异常  子类抛出的异常不可以比父类的异常更宽或者更大
    方法重载
    访问修饰符 返回值类型无要求
    函数名相同 形参列表不同
    3. 说明 HashMap和Hashtable的区别 ,ArrayList 和LinkedList的区别
    HashMap 可以使用null作为键和值 ,线程不安全,并发效率高
    Hashtable 不可以使用 null 作为键和值 ,线程安全,并发效率低
    
    ArrayList 底层使用数组实现 查询快,增删慢 线程不安全,并发率高
    LinkedList 底层使用链表实现,查询慢,增删快
    
    4.List Map Set  三个接口,存取元素时,各有什么特点
    List  有序 有下标  元素可以重复
    Map   键值对形式存储  key value  key  不可以重复 无序  value 可以重复
    Set  无序  无下表  元素不可以重复
    5. 什么是对象序列化?对象序列化的要求是什么?
    将对象放在流上传输就是对象序列化
    要求
      1只有实现了Serializable接口,支持序列化
      2若传输的对象具有对象类型的属性 ,则要求该属性的所属类型也是可序列化的,若该属性为集合或者数组,要求集合或者数组元素也是可序列化的
      3被transient修饰的属性,变为临时属性,对应的对象属性值不参与序列化
    6.String类型的值“123”,转换为对应的int值
    String  s1 = “123”;
    int a = Integer.perseInt(s1);
    7.final,finally,finalize的区别
    final 是最终不可修改的意思,修饰类 该类不可以被继承,修饰属性没有默认值,值一旦给定不可以修改,修饰方法不可以被覆盖值可以被继承
    finally  中的代码无论异常产生与否,都会执行,return中的语句总是会被执行,主要作用是关闭资源
    finalize  销毁垃圾时,释放内存空间调用的方法
    8.请说出访问修饰符public,private,protected,以及default的区别
    访问修饰符      本类内部      本包非本类      非同包子类              非同包非子类              继承性
    public          √               √              √                   √                   可以继承
    protected       √               √              √                   √                  可以继承
    default         √               √                                                    同包子类可以继承
    private         √                                                                     不可以继承
    9.请简述异常的分类和各自的特点
    Throwable 所有异常的直接父类或者间接父类,分为 Error和Exception,Error 属于程序中无法处理的错误,Exception属于可以处理的异常,分为
    RuntimeException(运行时异常):未检查异常,可以处理也可以不处理 ;和CheckedException(已检查异常):编译时异常不可避免,必须处理
    10.获取Class对象的3种方式
       1 类名.class  2 类对象  引用名.getClass  3  Class.forNmae("类的全限定名")--进行类加载
      如 1 Class c1 = ArrayList.class   2 ArrayList  list = new ArrayList();   Class  c2 = list.getClass
      3 Class.forNmae("java.util.ArrayList");
    11请写出eauals和==的区别
    equals : 判断当前引用中保存的对象与引用中保存的对象是否一样(内容是否一致)
    ==  : 判断引用的对象地址是否相同, 判断基本类型的值是否相等
    12局部变量和实例变量的区别
                        局部变量                成员变量
    位置                 在函数以内            函数以外 内的内部
    默认值       没有默认值需先赋值在使用       与数组的默认值相同
    作用范围   从定义行开始到定义它的代码快结束     整个类内部
    命名冲突    作用范围内不可以命名重复       与局部变量命名冲突时,优先使用局部变量
    13 this和super的区别
    this 指带当前对象  super 指带当前父类
    14 什么是类加载
    当JVM第一次使用类的信息时,需要将字节码文件中描述的信息读取到程序中保存
    15字节流和字符流的区别
    字节流是以字节为单位进行数据传输 可以传输任意类型的文件
    字符流是以字符为单位进行数据传输 可以传输文本文件(使用编辑器打开人还可以看的懂)
    16写出实现线程的两种方式,两种方式的区别是什么?
        继承Thread类,把自身当做任务对象
        实现Runnable接口,实现类充任务对象
    17 线程中sleep()和wait()方法的区别
     sleep :当前线程会持有锁标记进入睡眠状态,此时线程会释放时间片,时间到期以后会回到就绪状态,等待再一次被OS选中
     wait : 当前线程会进入阻塞状态,线程会释放锁标记等待通知。
    18 abstract和 interface 的区别
    相同点
    1都可以生成字码文件
    2都是java的一种数据类型
    3都无法实例化对象,只能声明引用
    不同点
    1接口没有构造函数,抽象类可以有构造函数
    2关键词不同
    3接口的属性都是公开静态常量 pubilc static final
    接口中的方法都是公开抽象方法  public abstrac
    
    * */
    
    import sun.text.normalizer.UCharacter;
    
    import java.io.*;
    import java.util.*;
    import java.util.function.Consumer;
    
    public class CoreJava1 {
    }
    
    /*
    程序填空:完成getAllDog方法,从一个Animal 集合中挑选出 所有的Dog对象,并把这些对象放在一个Dog集合中返回
    */
    class Animal{}
    class  Do extends Animal{}
    class Cat extends Animal{}
    class TestAnimal{
        public static void main(String[] args) {
            List<Animal> as = new ArrayList<Animal>();
            as.add(new Do());
            as.add(new Cat());
            as.add(new Do());
            as.add(new Cat());
    
            List<Do> dogs =getAllDo(as);
            for(Do d:dogs){
                System.out.println(d);
            }
        }
        public static List<Do> getAllDo(List<Animal> animal){
            List <Do> dog = new ArrayList<Do>();
            for(Animal a: animal){
                if(a instanceof Do){
                    dog.add((Do)a);
                }
            }
            return dog;
        }
    }
    /*
    * 匿名内部类 使用匿名内部类创建IA 接口实现类的对象*/
    interface IA{
        void m();
    }
    class Test2{
        public static void main(String[] args) {
             new IA(){
                public void m(){
                }
            };
        }
    }
    /*
    3.给定一个由字符串,如“abcdefghijkiacedfjk”统计出每个字符出现的次数
    * */
    
    class Test3{
        public static void main(String[] args) {
            String s ="abcdefghijkiacedfjk";
            Map<Character, Integer> map = new HashMap<>();
            for (int i = 0; i < s.length(); i++) {
                char  c  = s.charAt(i);
                if(map.containsKey(c)){
                  Integer cout = map.get(c);
                  map.put(c,++cout);
              }else{
                    map.put(c,1);
                }
            }
            Set<Character> zimu = map.keySet();
            for(Character k: zimu){
                System.out.println("key:"+k+" value:"+map.get(k));
            }
        }
    }
    
    // 4.定义一个学生类(属性:年龄 姓名) 在List 集合中存储 5名学生的信息,并采用两种遍历的方法遍历List集合【加泛型】
    class Test4{
        public static void main(String[] args) {
            List<Student_1> list = new ArrayList<Student_1>();
            list.add(new Student_1(18,"大宝"));
            list.add(new Student_1(13,"二宝"));
            list.add(new Student_1(11,"三宝"));
            list.add(new Student_1(12,"四宝"));
            list.add(new Student_1(17,"五宝"));
            for(Student_1 s: list){
                System.out.println(s);
            }
            System.out.println();
            Iterator it = list.iterator();
            while(it.hasNext()){
                System.out.println(it.next());
            }
            System.out.println();
            for (int i = 0; i <list.size(); i++) {
                System.out.println(list.get(i));
            }
            System.out.println();
            list.forEach(new Consumer<Student_1>() {
                @Override
                public void accept(Student_1 student_1) {
                    System.out.println(student_1);
                }
            });
            System.out.println();
            list.forEach((student_1)->System.out.println(student_1));
        }
    }
    class Student_1{
        int age;
        String name;
    
        @Override
        public String toString() {
            return "Student_1{" +
                    "age=" + age +
                    ", name='" + name + '\'' +
                    '}';
        }
    
        public Student_1() {
        }
    
        public Student_1(int age, String name) {
            this.age = age;
            this.name = name;
        }
    }
    
    //5.int[]a = {2,4,3,1,6,8,7};
    // 请用冒泡或选择排序法,将数组中的元素从小到大重新排列,写出代码
    
    class Test5{
        public static void main(String[] args) {
            int[] a= {2,4,3,1,6,8,7};
            //Jdk排序
            java.util.Arrays.sort(a);
            for (int i = 0; i < a.length; i++) {
                System.out.println(a[i]);
            }
            //冒泡排序
            for (int i = 1; i < a.length; i++) {
                for(int j = 0;j< a.length-i;j++){
                    if(a[j]>a[j+1]){
                        int b = a[j+1];
                        a[j+1]=a[j];
                        a[j]=b;
                    }
                }
            }
            for (int i = 0; i < a.length; i++) {
                System.out.println(a[i]);
            }
    
            for (int i = 1; i < a.length; i++) {
                for (int j = i; j < a.length; j++) {
                    if(a[i-1]>a[j]){
                        int b = a[j];
                        a[j]=a[i-1];
                        a[j]=b;
                    }
                }
            }
        }
    }
    
    // 使用缓冲流,完成文件复制,D盘根目录下有文件test.png 复制到E盘下
    class Test6{
        public static void main(String[] args) {
            try(InputStream in = new FileInputStream("D:/自己.jfif");
                BufferedInputStream bis =new BufferedInputStream(in);
                OutputStream ot = new FileOutputStream("D:/自己人.jfif");
                BufferedOutputStream bos = new BufferedOutputStream(ot)){
                byte[] ss =new byte[10];
                while(true){
                    int r  = bis.read(ss);
                    if(r==-1)break;
                    bos.write(ss,0,r);
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
    /*设计一个类型用来描述产品(Product),属性有编号(id);产品名称 (name);产品价钱
    (price);产品描述 (message);有一个方法叫show方法,用来展示产品相关信息(输出格式
    id name price message)
    要求 1完成类的封装 提供 get set
     2提供无参以及有有参的构造方法给必要的属性赋值
     3覆盖 toString 方法,要求返回值以如下的方式现实
       编号1 名称 鲜花 价钱 12.5 详细描述 玫瑰鲜花1朵
     4 覆盖equals方法 比较各个属性的内容
     5 实现show方法
    * */
    class Product{
        private String id;
        private String name;
        private double price;
        private String message;
    
        public void setId(String id) {
            this.id = id;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setPrice(double price) {
            this.price = price;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    
        public String getId() {
            return id;
        }
    
        public String getName() {
            return name;
        }
    
        public double getPrice() {
            return price;
        }
    
        public String getMessage() {
            return message;
        }
    
        public Product() {
        }
    
        public Product(String id, String name, double price, String message) {
            this.id = id;
            this.name = name;
            this.price = price;
            this.message = message;
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Product product = (Product) o;
            return id == product.id && Double.compare(product.price, price) == 0 && Objects.equals(name, product.name) && Objects.equals(message, product.message);
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(id, name, price, message);
        }
    
        @Override
        public String toString() {
            return "编号:"+id+" 名称:"+name+" 价钱:"+" 详细描述:"+message;
        }
        void show(){
            System.out.println("编号:"+getId()+" 名称:"+getName()+" 价钱:"+getPrice()+" 详细描述:"+getMessage());
        }
    }
    
    // 已知在相对路径下有一个test.txt文件 ,内容如下
    /*1/鲜花/12.5/玫瑰鲜花一朵
    2/手机/1999.0/三星手机一部
    3/电脑/13000.0/苹果电脑一台
    请完成如下要求
    1 利用UTF-8的解码方式,读取文件,将所有的内容读取出来
    2 将读取到的内容进行字符串解析并保存在Map集合中(Map<Integer,Product>)
     key 是产品的编号 value 是上题中的 Product 对象
     3遍历集合 输出以下内容 (key 编号 value 是对象的toString 方法的返回值)
     key1: Value :编号:1    名称 : 鲜花  价钱:12.5  详细描述 : 玫瑰鲜花一朵
     key2: Value :编号:2    名称 : 手机  价钱:1999.0  详细描述 : 三星手机一部
     key3: Value :编号:3    名称 : 电脑  价钱:13000.0  详细描述 : 苹果电脑一台
     4.修改Product类,并将key为3对应的Product对象序列化到 test.obj文件中
    * */
    class Test8{
        public static void main(String[] args) {
            try(InputStream  in = new FileInputStream("D:/test.txt");
                InputStreamReader isr = new InputStreamReader(in,"UTF-8");
                BufferedReader br = new BufferedReader(isr);
                OutputStream ot = new FileOutputStream("D:/test2.obj");
                ObjectOutputStream oi = new ObjectOutputStream(ot);){
                Map<Integer,Product> map = new HashMap();
                while(true){
                    String s = br.readLine();
                    if(s==null)break;
                    System.out.println(s);
                    String[] ss =s.split("/");
                    Product p = new Product();
                    p.setId(ss[0]);
                    p.setName(ss[1]);
                    p.setPrice(Double.parseDouble(ss[2]));
                    p.setMessage(ss[3]);
                    map.put(Integer.parseInt(p.getId()),p);
                }
                Set<Integer> ss = map.keySet();
                for(Integer sss:ss){
                    System.out.println(map.get(sss));
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
    
    
    展开全文
  • 达内jsd1606第一次月考题-java第一阶段面向对象语法基础考试试题.doc还剩22页未读,继续阅读下载文档到电脑,马上远离加班熬夜!亲,喜欢就下载吧,价低环保!内容要点:* t; }正确答案:AC49.(多选)下列赋值语句中...

    达内jsd1606第一次月考题-java第一阶段面向对象语法基础考试试题.doc

    4fc55af06d21eeb36c0b7cef7fa661a9.gif

    还剩

    22页未读,

    继续阅读

    下载文档到电脑,马上远离加班熬夜!

    亲,喜欢就下载吧,价低环保!

    内容要点:

    * t; }正确答案:AC49.(多选)下列赋值语句中,会有编译错误的是()。A.int a = 8888888888;B.char b = 1000+300;C.byte c = 100+30;D.int d = 'a'+'b'+'c';正确答案:AC50.(多选)下列逻辑表达式,值为 false 的是()。A."abc,,,bcd,,def,efg,,".split("[,]+").lengt(多选)请看下列代码: class One { public One foo() { return this; } } class Two extends One { public One foo() { return this; } } class Three extends Two { } 下列选项中的代码,放置在处无编译错误的是:A.public void foo() { }B.pub C.deleteD.length正确答案:BCD45.(多选)请看下列代码: public class Old { public static Object get(List list) { return list.get(0); } } 以下选项调用 get 方法,能编译通过的是:A.Object o = Old.get(new LinkedList());B.Object o = Old.max_length = length - strNew.length(); str = strNew; System.out.println(first+":"+max_length); }D.int length = str.length(); String first = str.substring(0, 1); String strNew = str.replaceAll(first, "{ return 0; } } 下列选项中,可以在 A 的子类中使用的是()。A.public int method (int a, int b) { return 0; }B.private int method(int a, int b) { return 0; }C.private int method(int a, long b) { return 0; }D.public short mhalfway(){ return Geodetics.DIAMETER/2.0; } }D.import com.tarena.*; public class TerraCarta { public double halfway(){ return Geodetics.DIAMETER/2.0; } }正确答案:AD39.(多选)请看下列代码 public class Foo { public B.public abstract class Circle extends Shape { private int radius; }C.public class Circle extends Shape { private int radius; public void draw(); }D.public class Circle extends Shape { private int ra A.p.setWeight(420);B.Payload.setWeight(420);C.p = new Payload(420);D.p = new Payload(); p.setWeight(420);正确答案:A35.(单选)下列代码运行的结果是()。 public class Base { public static final String FOO = "foo"; public

    发表评论

    暂无评论,赶快抢占沙发吧。

    展开全文
  • 初级部分阶段测试 选择题 1) 在Java类中使用以下 声明语句来定义公有的int型常量MAX A. public int MAX = 100; B. final int MAX = 100; C. public static int MAX = 100; D. public static final int MAX = 100; ...
  • 达内第一JAVA考试

    2021-03-06 03:12:15
    关于下列代码说法不正确的是:()10. interface Foo {11. int bar();12. }13.14. public class Beta {15.16.... public int bar() { return 1; }18. }19.20. public int fubar( Foo foo) { return foo.bar...
  • 蜗牛学院-试卷-阶段划分.zip
  • part 1Java基础核心技术总结 万事都离不开根基,Java基础对于一些老鸟来说可能已经很熟悉了,但是对于很多开发5年以下的朋友掌握的或许不是很牢固,因此这份笔记更适合温故而知新。 Part 2并发编程(架构师筑基...
  • 蜗牛学院-第一阶段java开发班笔记.zip
  • Java第一阶段考试

    千次阅读 2018-11-30 19:29:43
    java基础: 简述对JVM的理解; Java中的数据类型有哪些,分别是什么; 基本数据类型和引用数据类型有哪些区别; 标识符的命名规范是什么; A++和++a的区别是什么; 简述&amp;和&amp;&amp;的区别,| 和 ...
  • [java]第一阶段测试题-含答案第一阶段测试题1、以下是冒泡排序算法,从大到小的排序,请在相应空格地方进行填空:public class BubbleSort{public static void main(String[] args){int score[] = {67, 69, 75, 87, ...
  • 本来写个是想每天做一次简单的技术总结,但是写着写着感觉写成了学习的...来到这里已经是第三周,预计是第五周结束第一阶段课时,第一阶段的内容就是JAVA的基本知识,第二阶段JAVA_WEB的,然后数据库,框架循序渐进。
  • 蜗牛学院-蜗牛5.0阶段考试题.zip
  • 前言本次博客是针对java第一阶段学习(java基本语法 面向对象基础 类与类之间的关系--包含 依赖)的总结,以及前三次作业的自我总结。作业过程总结第一阶段三次作业之间的关系:1)第一次作业:第一次作业的5道编程题...
  • java第一阶段考试

    千次阅读 2017-02-28 19:29:56
    、 选择题(每题1.5分*50=75分) 1.下面的方法,当输入为2的时候返回值是多少?(D)  public static int getValue(int i) {  int result = 0;  switch (i) {  case 1:  result = result + i;
  • 达内科技项目经理入职考试(JAVA方向 A)考试说明:本考试为达内科技JAVA产品线项目经理入职考试考试使用闭卷、笔试的形式。满分100分,考试时间120分钟。考试期间不允许使用电脑,不可打开任何开发和调试工具以及...
  • Java 就业班考试选择题每题 1 分并且每题为单选共 10 分 1假设在名称为 helloapp 的 Web应用中有个 hello.jsp 它的文件路径如下 : C %CATALINA_HOME%/webapps/helloapp/hello/hello.jsp 那么在浏览器端访问 ...
  • Java就业班考试选择题(每题1分并且每题为单选共10分) 1 假设在名称为 helloapp的Web应用中有个hello.jsp 它的文件路径如下C %CATALINA_HOME%/webapps/helloapp/hello/hello.jsp 那么在浏览器端访问 hello.jsp...
  • 本资源适合大学生学习java课程时,期末考试复习使用,题目经典
  • Java 就业班考试选择题每题 1 分并且每题为单选共 10 分 1假设在名称为 helloapp 的 Web应用中有个 hello.jsp 它的文件路径如下 : C %CATALINA_HOME%/webapps/helloapp/hello/hello.jsp 那么在浏览器端访问 ...
  • 1.在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不能通过;  this和super关键字不可以出现在同一个构造函数中 2.方法重载与方法重写  方法重载:同一个类中,...
  • 2021年109日开始正式学习,专业为相关专业19年专科软件技术毕业,19年-21年,做了一年半左右的技术支持工作。我对JAVA还是有一定的基础,前面的基础知识比较了解,到后面的接口的知识就会比较吃力。于是在开始阶段...
  • 转眼之间,来千锋就要了,转眼回首这虽然辛苦但也值得。从最开始讲一些循环分支的从容,到现在面向对象编程,用接口、继承实现抽象的紧迫。感觉自己的思维跟不上虚拟、抽象的节奏了啊!五子棋建类:...
  • 今天进行了第一JAVA基础考试,考查了课本上前面三章和方法的知识,基本没有涉及到数组。通过这次的考试,暴露了自己在学习中的很多问题。机试题是编写一个学员状态转换器,主要运用的是选择语句和方法,而没有用到...
  • 达内java1512二次月考(附答案)doc.doc 在线考试本次考试得分:98.01.(单选)查询cost表中资费名称,固定费用,包在线时长,单位费用,下列sql语句正确的是:oA.selectname/base_duration/base_cost/unit_...
  • 、选择题(以下选项中,ABCD四项中至少有项或多项是正确的(多选、少选、错选均没分),共30题,每题2分,共60分) 1Java源文件和编译后的文件扩展名分别为( ) A、.class和.java B、.java和.class C、....
  • javaee阶段测试题

    2017-09-14 16:07:04
    javaee阶段测试题,在Java中,欲成功更新表course中数据(hours字段为int型,coursethitle为nvarchar型),假设已经获得了数据库连接,Connection的对象con,则在以下程序段的下划线处应该填写的代码是
  • 在线考试 本次考试得分:98.01.(单选)查询cost表中资费名称,固定费用,包在线时长,单位费用,下列sql语句正确的是:?A.select name/base_duration/base_cost/unit_cost from cost?B.select name,base_cost,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,044
精华内容 4,817
关键字:

java第一阶段月考试卷

java 订阅