exam1-java
双重检查锁的单例模式
public class Singleton {
private static volatile Singleton singleton;
private Singleton() {
}
public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}HashMap 取值 一个value有三个abc字符串
public class CountABC {
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<>();
map.put(1, "abcdabcabc");
map.put(2, "abcdabc2abc");
map.put(3, "abcdabc3232abc");
map.put(4, "123abcdabcabc213123");
map.put(5, "asdsfasdf");
map.put(6, "asdabc,dfasabcabcasds");
System.out.println(countABC(map));
}
private static int countABC(HashMap<Integer, String> map) {
int i = 0;
// HashMap 遍历方式
// Iterator iterator = map.keySet().iterator();
// while (iterator.hasNext()) {
// Integer key = (Integer) iterator.next();
// String value = map.get(key);
//
// }
// // 遍历方式2
Iterator<Map.Entry<Integer, String>> iterator1 = map.entrySet().iterator();
while (iterator1.hasNext()) {
Map.Entry<Integer, String> entry = iterator1.next();
String value1 = entry.getValue();
int j;
// 我想的一个方法是每遇到一个abc就把字符串截取一下。
for (j=0; j < 3; j++) {
int result = value1.indexOf("abc");
if (result != -1) {
value1 = value1.substring(result + 3);
} else {
break;
}
}
if (j == 3) {
i++;
}
}
// 遍历方式3 jdk1.8
// map.forEach((key,value)->{
// Integer key3 = key;
// System.out.println(key);
// String value3 = value;
// System.out.println(value3);
//
//
// });
return i;
}
}编译错误与运行时错误
编译错误 一般指逻辑错误,比如缺少括号,缺分号等,还有一类如局部变量没赋初始值、调用不存在的方法等
一般编译器如Eclipse、idea会帮我们识别这类错误。
运行时错误 一般指我们出现的exception,如NullPointerException,ArrayIndexBoundOutOfRangeException选择题
子类调用从父类继承过来的方法
这里要区分
继承和多态的概念,多态分为运行时多态和编译时多态。方法重载都是编译时多态。根据实际参数的数据类型、个数和次序, Java在编译时能够确定执行重载方法中的哪一个。方法覆盖表现出两种多态性,当对象引用本类实例时,为编译时多态,否则为运行时多态。运行时多态是多指父类指向子类的引用,并且子类重写父类的方法 ,当父类指向子类的引用调用子类独有的方法时会报编译时错误,不管构造方式是什么修饰符,当我们初始化这个类的实例时,都会调用他的构造方法
单例模式的构造方法就是使用private修饰符修饰, Singleton模式,指的是一个类,在一个JVM里,只有一个实例存在。单例模式又分为懒汉式和饿汉式。懒汉式是延时加载,只有使用的时候才会加载;并且有线程安全的考量。饿汉式是立即加载,论是否会用到这个对象,都会加载初始化顺序
父类静态变量-父类静态初始化块-子类静态变量-子类静态初始化块 父类初始化快,构造方法-子类初始化快,构造方法
静态代码块只会
初始化一次,初始化子类时也会调用父类的非静态代码块和构造方法静态变量是所有
对象共享的i++;++i;return i++; return ++i; i=i++;i=++i;
i++: 先赋值后运算
++i: 先运算后赋值
TODO 待办
Last updated
Was this helpful?