public class Test {
/**
* 谓类的方法就是指类中用static 修饰的方法(非static 为实例方法),比如main 方法,那么可以以main
* 方法为例,可直接调用其他类方法,必须通过实例调用实例方法,this 关键字不是这么用的
*
*
* Java数据库连接库JDBC用到哪种设计模式?
* 桥接模式
*
*下面关于静态方法说明正确的是 在静态方法中调用本类的静态方法时可直接调用
*静态方法中没有this关键词,因为静态方法是和类同时被加载的,而this是随着对象的创建存在的,静态比对象优先存在
*
*下面哪些类可以被继承? Java.lang.Thread、java.lang.Number、java.lang.Double、java.lang.Math、 java.lang.ClassLoader
* Thread可以被继承,用于创建新的线程
* B,Number类可以被继承,
* Integer,Float,Double等都继承自Number类
* C,Double类的声明为
* public final class Doubleextends Numberimplements Comparable<Double>
* final生明的类不能被继承
* D,Math类的声明为 public final class Mathextends Object
* 不能被继承
* E,ClassLoader可以被继承,用户可以自定义类加载器
*
*
*
*
* java.lang包中不能被继承的类:
*
* public final class Byte
*
* public final class Character
*
* public static final class Character.UnicodeBlock
*
* public final class Class<T>
*
* public final class Compile
*
* public final class Double
*
* public final class Float
*
* public final class Integer
*
* public final class Long
*
* public final class Math
*
* public final class ProcessBuilder
*
* public final class RuntimePermission
*
* public final class Short
*
* public final class StackTraceElement
*
* public final class StrictMath
*
* public final class String
*
* public final class StringBuffer
*
* public final class StringBuilder
*
* public final class System
*
* public final class Void
* @param args
*/
public static void main(String[] args) {
String a = new String("A");
String b = new String("B");
System.out.println("a"+System.identityHashCode(a));//地址
System.out.println("b"+System.identityHashCode(b));//地址
// System.out.println(b+"");
oper(a,b);//x,y是a,b的副本,x.append(y)使得AB在一起,
// 而y=x后,y指向AB,方法结束后x,y消亡,故a-AB,b-B;
System.out.println("a"+System.identityHashCode(a));//地址
System.out.println("b"+System.identityHashCode(b));//地址
System.out.println(a+","+b);
}
public static void oper(String x,String y){
System.out.println("x"+System.identityHashCode(x));//地址
System.out.println("y"+System.identityHashCode(y));//地址
// x.append(y);
x = x+y;
y = x;
System.out.println("x"+System.identityHashCode(x));//地址
System.out.println("y"+System.identityHashCode(y));//地址
}
}
HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。
HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行)。
HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。
另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。
由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。
HashMap不能保证随着时间的推移Map中的元素次序是不变的
hash采用拉链法解决冲突,hashmap ,Hashtable采用拉链法解决冲突
public A foo(B b){return b;}
重写 要求两同两小一大原则, 方法名相同,参数类型相同,子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类方法访问权限。[注意:这里的返回类型必须要在有继承关系的前提下比较]
重载 方法名必须相同,参数类型必须不同,包括但不限于一项,参数数目,参数类型,参数顺序
再来说说这道题 A B 都是方法名和参数相同,是重写,但是返回类型没与父类返回类型有继承关系,错误 D 返回一个类错误 c的参数类型与父类不同,所以不是重写,可以理解为广义上的重载访问权限小于父类,都会显示错误
虽然题目没点明一定要重载或者重写,但是当你的方法名与参数类型与父类相同时,已经是重写了,这时候如果返回类型或者异常类型比父类大,或者访问权限比父类小都会编译错误
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机
服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或OS环境。
1.new
2.对象克隆clone()方法
3.反射Constructor类的newInstance()方法
4.反射的Class类的newInstance()方法
5.反序列化的readObject()方法