牛客网专项练习java错题(二)

牛客网专项练习java错题(二)

2018/ 5 /13

这里写图片描述

解析:

优化Hibernate所鼓励的7大措施:
1.尽量使用many-to-one,避免使用单项one-to-many
2.灵活使用单向one-to-many
3.不用一对一,使用多对一代替一对一
4.配置对象缓存,不使用集合缓存
5.一对多使用Bag 多对一使用Set
6.继承使用显示多态 HQL:from object polymorphism="exlicit" 避免查处所有对象
7.消除大表,使用二级缓存

其中A选项:
Hibernate鼓励使用双向一对多关联,不使用单向一对多关联。单向一对多关联映射是在one端维护关系的,必须先保存many端后才可以保存one端,所以在保存many端时该端不知道one端是否存在相应的数据,所以只能将维护的关系字段设置为null,如果为非空则无法保存。因为是one端维护关系,所以在保存one端时,会发出多余的update语句维护many端的外键关系。

这里写图片描述

解析:

集合常考点:

这里写图片描述

这里写图片描述

解析:

ABC在java中会报错,D可以正常运行, 所以答案是ABC.
A. ‘a’是字符,’ a’这个是空格和a,是字符串,必须要用” a”才可以;
B.String有length()方法
C.int 无法直接转成String类型
D.尾部添加字符串”100“

这里写图片描述

解析:

mock对象:也成为伪对象,在测试中的利用mock对象来代替真实对象,方便测试的进行。
java的封装性:指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,通过该类提供的方法实现对内部信息的操作访问。
反射机制:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性

反射可以访问原类的私有方法,私有成员变量,因此,反射破坏了Java的封装性

这里写图片描述

解析:

明确java的值传递和引用传递的区别:
https://blog.csdn.net/yqlakers/article/details/70144766
评论区理解:
首先明确 这里str和数组都是对象都是引用传递 ,首先得清楚类中的str和change方法中的str都是指向堆中的new String(” good” )对象,但是它们不是同一个东西,类似于指向同一个对象的不同的指针。首先str=”test ok” 使得change()中的str指向”test ok”这个常量字符串(也可以说这个字符串对象),根本的原因就是 由于java字符串对象是不能修改的,无法像数组一样可以在原来的地址上对数组的值进行修改。 但是原来的类中的str指向的还是 new String(” good” )这个对象,chs[0] = ‘g’,把原来chs[0]中的’a’改为’g’。

这里写图片描述

解析:

这里写图片描述
1.clone方法
保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。

2.getClass方法
final方法,获得运行时类型。

3.toString方法
该方法用得比较多,一般子类都有覆盖。

4.finalize方法
该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。

5.equals方法
该方法是非常重要的一个方法。一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。

6.hashCode方法
该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。

一般必须满足obj1.equals(obj2)==true。可以推出obj1.hash- Code()==obj2.hashCode(),但是hashCode相等不一定就满足equals。不过为了提高效率,应该尽量使上面两个条件接近等价。

7.wait方法
wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。

调用该方法后当前线程进入睡眠状态,直到以下事件发生。

(1)其他线程调用了该对象的notify方法。

(2)其他线程调用了该对象的notifyAll方法。

(3)其他线程调用了interrupt中断该线程。

(4)时间间隔到了。

此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。

8.notify方法
该方法唤醒在该对象上等待的某个线程。

9.notifyAll方法
该方法唤醒在该对象上等待的所有线程。
这里写图片描述

解析:

instance是java的二元运算符,用来判断他左边的对象是否为右面类(接口,抽象类,父类)的实例

interface A{

}
class B implements A{

}
class C extends B{

}
public class Iinstanceof {

    public static void main(String[] args) {
        A ab=new B();
        A ac=new C();
        B bc=new C();
        B bb=new B();
        C cc=new C();
        //对象实现一个接口,用这个对象和这个接口进行instanceof判断,都为true。
        System.out.println("ab instanceof A="+(ab instanceof A));
        System.out.println("ac instanceof A="+(ac instanceof A));
        System.out.println("bc instanceof A="+(bc instanceof A));
        System.out.println("bb instanceof A="+(bb instanceof A));
        System.out.println("cc instanceof A="+(cc instanceof A));
        //对象和父类进行instanceof判断,都为true
        System.out.println("ab instanceof B="+(ab instanceof B));
        System.out.println("ac instanceof B="+(ac instanceof B));
        System.out.println("bc instanceof B="+(bc instanceof B));
        System.out.println("bb instanceof B="+(bb instanceof B));
        System.out.println("cc instanceof B="+(cc instanceof B));
        //对象和他的子类进行instanceof判断为false
        System.out.println("ab instanceof C="+(ab instanceof C));
        System.out.println("ac instanceof C="+(ac instanceof C));
        System.out.println("bc instanceof C="+(bc instanceof C));
        System.out.println("bb instanceof C="+(bb instanceof C));
        System.out.println("cc instanceof C="+(cc instanceof C));
    }
}

输出:

ab instanceof A=true 
ac instanceof A=true 
bc instanceof A=true 
bb instanceof A=true 
cc instanceof A=true 
ab instanceof B=true 
ac instanceof B=true 
bc instanceof B=true 
bb instanceof B=true 
cc instanceof B=true 
ab instanceof C=false 
ac instanceof C=true 
bc instanceof C=true 
bb instanceof C=false 
cc instanceof C=true

这里写图片描述

解析:

链接:https://www.nowcoder.com/questionTerminal/8787ccb33c7a43e59e6b185971e4ee9b
来源:牛客网

A、Semaphore:类,控制某个资源可被同时访问的个数;
B、ReentrantLock:类,具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大;
C、 Future:接口,表示异步计算的结果;
D、 CountDownLatch: 类,可以用来在一个线程中等待多个线程完成任务的类。

(该解析有待完善)

这里写图片描述

解析:

在单行文本输入区(Textfield)构件上可能发生的事件包括FocusEvent焦点事件,所对应的事件监听器是FocusListener;
ActionEvent动作事件,所对应的事件监听器是ActionListener;
MouseEvent鼠标事件,所对应的事件监听器是MouseM!

这里写图片描述

解析:

javac.exe是编译.java文件
java.exe是执行编译好的.class文件
javadoc.exe是生成Java说明文档
jdb.exe是Java调试器
javaprof.exe是剖析工具

这里写图片描述

解析:

构造方法:
1.构造方法的方法名必须与类名相同;
2.构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型;
3.构造方法的主要作用是完成对象的初始化工作,能够把定义对象时的参数传给对象的域;
4.一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码;
5.构造方法可以重载,以参数的个数、类型、顺序。

补充:

子类不能继承父类的构造器(构造方法或构造函数),但父类的构造器带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表;
若父类有无参构造器,则在子类的构造器中用super调用父类构造器不是必须的。如果没有使用super关键字,系统会自动调用父类的无参构造器。
本地程序:/2018new/construction_method
package construnction_method;
/*
 * 构造器
子类不能继承父类的构造器(构造方法或者构造函数),但是父类的构造器带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表。
如果父类有无参构造器,则在子类的构造器中用super调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。
 *  
 */
public class Construction_method {
          public static void main (String args[]){
            SubClass sc = new SubClass();
            SubClass sc2 = new SubClass(200); 
          }
}
class SuperClass {
      private int n;
      //无参构造器
      SuperClass(){
        System.out.println("SuperClass()");
      }
      //有参构造器
      SuperClass(int n) {
        System.out.println("SuperClass(int n)");
        this.n = n;
      }
}
class SubClass extends SuperClass{
      private int n;      
      SubClass(){
        super(300);
        System.out.println("SubClass");
      }  

      public SubClass(int n){
        System.out.println("SubClass(int n):"+n);
        this.n = n;
      }
    }

输出:

SuperClass(int n)
SubClass
SuperClass()
SubClass(int n):200

猜你喜欢

转载自blog.csdn.net/weixin_38916872/article/details/80302333