牛客网题集

第一天:

  1. 选出返回真值的表达式
public class Cat
{
    long length;
    public Cat(long l)
    {
        length = 1;
    }
    public static void main(String arg[])
    {
        Cat c1, c2, c3;
        c1 = new Cat(10L);
        c2 = new Cat(10L);
        c3 = c2;
        long m = 21L;
    }
}

在这里插入图片描述
参考解析:
A. c1和c2是两个参数相同的不同对象,c1!=c2,返回false
B. c2和c3指向同一个引用,所以c2==c3,返回true
C. m与c1是不同类型,不相等,返回false
D. c1没有定义equals方法,默认调用Object类的equals方法,返回false

拓展知识:

== 的作用:   
基本类型:比较的就是值是否相同   
引用类型:比较的就是地址值是否相同
equals 的作用:
默认情况下,比较的是地址值,不过,我们可以根据情况自己重写该方法,一般重写都是自动生成,比较对象的成员变量值是否相同

  1. 下列关于Java中类的构造方法的描述,正确的是
    在这里插入图片描述
    参考解析:
    A . 构造器没有返回值,这个没有返回值和返回值为void不一样
    B. 每个类在没有自己显式声明构造器的时候,都会有一个默认的无参构造
    C. 构造器可以重载,而且可以使用this()相互调用
    D. 每个构造器的默认第一行都是super(),但是一旦父类中没有无参构造,必须在子类的第一行显式的声明调用哪一个构造

  2. 下面哪一项不是 java 类访问控制关键字
    在这里插入图片描述
    参考解析:
    在这里插入图片描述

  3. 一个抽象类并不需要其中所有的方法都是抽象的
    参考解析:
    抽象类可以包括抽象方法和非抽象方法
    如果类里面有抽象方法的话,那么类一定要声明为抽象的

  4. 以下关于集合类 ArrayList 、 LinkedList 、 HashMap 描述错误的是
    在这里插入图片描述
    参考解析:
    Hashtable不允许 null 值(key 和 value 都不可以)
    HashMap允许 null 值(key和value都可以)
    ArrayList和LinkedList均实现了List接口
    ArrayList基于数组实现,随机访问更快
    LinkedList基于链表实现,添加和删除更快

  5. 运行结果

String str1="hello";
String str2="he"+ new String("llo");
System.out.println(str1==str2);

参考解析:
String str1=“hello”;
创建字符串是存在于常量池中
String str2=new String(“hello”);
创建字符串是存在于堆中
两者内存地址不同
扩展知识:
变量存放的位置
在这里插入图片描述
程序代码区
常量区存放常量
**全局区(静态区)**存放全局变量和静态变量。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域
堆区存放的变量(用new,malloc,calloc,realloc等分配内存函数得到的变量)由程序员分配释放
栈区存放的变量(局部变量、函数参数等)由编译器自动分配释放

当代码中出现字面量形式创建字符串对象时,虚拟机首先会对这个字面量进行检查,如果字符串常量池中存在相同内容的字符串对象的引用,则将这个引用返回,否则新的字符串对象被创建,然后将这个引用放入字符串常量池,并返回该引用
String str1 = "hello";
这里的str1指的是方法区中的字符串常量池中的“hello”,编译时期就知道的;
String str2 = "he" + new String("llo");
这里的str2堆里定义的字符串“hello”,当我们使用了new来构造字符串对象的时候,不管字符串常量池中有没有相同内容的对象的引用,新的字符串对象都会创建,所以这两个引用是不一样的
如果用str1.equal(str2),那么返回的是true,因为String类重写了equals()方法
String test = "a" + "b" + "c";
只创建了一个对象,避免了创建多余的字符串对象,在常量池中也只保存一个引用
如果想将这个对象的引用加入到字符串常量池,可以使用intern方法

  1. 标识符命名
    参考解析:
    数字,字母,符号(只有_和$两种),数字不能开头,不能为关键字

  2. 关于依赖注入说法正确的是
    在这里插入图片描述
    参考解析:
    依赖注入是一种思想,或者说是一种设计模式,通过反射机制实现,与具体框架无关
    拓展知识:
    Spring依赖注入的三种方式
    1. 接口注入
    2. Setter 方法注入
    3. 构造方法注入

  3. 声明并初始化数组
    参考解析:
    两种方法

int score[] = new int[10];
int[] score = new int[10]; 
  1. 能单独和finally语句一起使用的块是
    参考解析:
    使用try…catch块捕获时可以没有catch块,但当没用catch块的时候必须得有finally块
    拓展知识:
    处理异常常用的两种方式:
    try…catch(捕获处理机制)
    throws(冒泡处理机制)

  2. java 语言使用的字符码集是Unicode

  3. 关于JAVA的垃圾回收机制,下面哪些结论是正确
    在这里插入图片描述
    参考解析:
    垃圾回收是完全自动的,不能确定具体的时间
    局部变量存放在栈上,栈上的垃圾回收,由finalize()来实现

  4. 运行结果

public class Test
{
    public static Test t1 = new Test();
    {
         System.out.println("blockA");
    }
    static
    {
        System.out.println("blockB");
    }
    public static void main(String[] args)
    {
        Test t2 = new Test();
    }
 }

参考解析:

拓展知识:
类的加载顺序
(1) 父类静态对象和静态代码块
(2) 子类静态对象和静态代码块
以上代码块仅执行一次,并优先于主函数
(3) 父类非静态对象和非静态代码块
(4) 父类构造函数
(5) 子类 非静态对象和非静态代码块
(6) 子类构造函数

  1. 运行结果
public class Test2
{
    public void add(Byte b)
    {
        b = b++;
    }
    public void test()
    {
        Byte a = 127;
        Byte b = 127;
        add(++a);
        System.out.print(a + " ");
        add(b);
        System.out.print(b + "");
    }
}

参考解析:
自动拆包成byte值传递类型,所以add函数不能实现自增功能
Byte类型值大小为-128~127之间,add(++a),这里++a会越界,a的值变为-128
拓展知识:
自动装包:基本类型自动转为包装类.(int >> Integer)
自动拆包:包装类自动转为基本类型.(Integer >> int)
自动装包/拆包大大方便了基本类型数据和它们包装类地使用

  1. 运行结果
public class Person{
    private String name = "Person";
    int age=0;
}
public class Child extends Person{
    public String grade;
    public static void main(String[] args){
        Person p = new Child();
        System.out.println(p.name);
    }
}

参考解析:
在子类中试图访问父类的private字段,所以编译不通过
扩展知识:
字段属性是静态绑定,方法成员是动态绑定
如果是在编译时期解析,那么就称之为静态绑定,如果方法的调用是在运行时期解析,那就是动态绑定(在运行时,虚拟机根据具体对象的类型进行绑定,或者说是只有对象在虚拟机中创建了之后,才能确定方法属于哪一个对象)

参考解析:
类的初始化过程也就是方法执行的过程 父类的静态变量-父类的静态代码块 子类的静态变量-子类的静态代码块 父类的非静态变量-父类的非静态代码块-父类的构造函数 子类的非静态变量-子类的非静态代码块-子类的构造函数 规律就是 父类先于子类 静态的先于非静态的 变量先于代码块

  1. 下面哪一项不是加载驱动程序的方法
    在这里插入图片描述
    参考解析:
    DriverManager.getConnection方法返回一个Connection对象,这是加载驱动之后才能进行的
    Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
    DriverManager.registerDriver(new com.mysql.jdbc.Driver());
    System.setProperty(“jdbc.drivers”, “com.mysql.jdbc.Driver”);

  2. 常用的servlet包的名称是
    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值