Day8
Day9
A选项: 优先级高的线程进入就绪态不会终止当前线程的运行, 他只是在下一次时间片轮转的时候, 有较高的优先级会让系统调度优先它
B选项: 抛出一个异常时, 程序停止, 线程也就被终止了
C选项: sleep()只是会阻塞一个线程, 题目中要求的是终止线程, 也就是线程处于死亡状态, 并不是阻塞态
D选项: 新建一个线程也不会终止当前线程, 他只会在就绪态等待时间片轮转.
子类在执行构造方法的时候, 会默认调用父类的构造方法, 如果父类的构造方法是有参的构造方法, 那么就得在构造方法的第一行使用super(xx)来调用.
这个题应该在public Employee(String id){} 构造方法的第一行先使用super(id)调用父类的构造方法
本题不会抛异常是因为null可以转换为任何类型, 并且testMethod方法是一个静态方法, 可以通过类名.方法名调用
如果去掉static这道题就会抛空指针异常
import java.util.Scanner;
// 输入一个整数, 求阶乘后末尾有几个0
public class Main {
// 输入数字过大, 超过时间限制, 作废!!!! 此题不能用递归实现!!!!!
// public static void main(String[] args) {
// Scanner sc = new Scanner(System.in);
// while (sc.hasNextInt()) {
// int n = sc.nextInt();
// long tmp = jiecheng(n);
// System.out.println(tmp);
// int count = 0;
// while (tmp % 10 == 0) {
// count++;
// tmp /= 10;
// }
// System.out.println(count);
// }
// }
//
// private static long jiecheng(int n) {
// if (n == 1) {
// return 1;
// }
// return n * jiecheng(n - 1);
// }
// 重新采取一种方法, 末尾有几个0, 就是阶乘的这些数里有多少个是5的倍数, 统计一下即可
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()) {
int n = sc.nextInt();
int count = 0;
for (int i = 0; i < n; i++) {
n /= 5;
count += n;
}
System.out.println(count);
}
}
}
Day10
结构型模式是描述如何将类对象结合在一起, 形成一个更大的结构
结构模式描述两种不同的东西: 类和类的实例
详细讲解:
https://blog.youkuaiyun.com/weixin_43392489/article/details/103294692
这是一个沙雕错误
try-catch-finally语句中, 如果try和catch中有return语句, 那就先执行finally中的语句, 然后再执行try或者catch中的语句.
“aa”“bb”"cc"这种字符串存在于堆区的字符串常量池, 而 a, b, c这三个是创建的指向字符串常量池的三个引用, 而不是字符串本身.
a是成员变量的引用, 存在于堆区
b和c都是方法的局部变量, 在方法开始时, 栈帧启动, 变量也存在于栈帧中, 在方法结束时销毁.
所以选择C
A选项 变量不能被default修饰
B选项 native修饰方法, 简单来说就是一个java方法调用一个非java代码的接口. 定义native方法时, 并不提供方法体, 因为其实现是用非java语言在外实现的. native可以和任何修饰符连用, abstract除外(因为abstract修饰方法的时候, 方法不能有方法体)
C选项 abstract只能修饰类和方法, 不能修饰属性
D选项是一个很矛盾的存在, final修饰的方法不能被重写, 而abstract修饰的方法不能有方法体, 必须被重写才能使用, 所以这两个不能搭配在一起使用
try语句执行出错, 被catch捕捉到, 执行catch中的语句, 打印1后, 下一个语句是抛出一个异常, 结束这个线程,但是注意还有finally语句, 所以得先执行finally中的语句, 然后直接抛出异常, 中断线程, 最终打印 12
*当使用算术运算符(+, -, , /, %)时, 只要两个数中有一个是double/float/long类型, 另一个数也会被转换成double/float/long类型, 并且结果也是double/float/long类型, 除了这三个, 其他的类型(byte, short, int, char), 两个数都会被强制转换为int类型, 并且结果也会被转换为int类型.
因为b4和b5是由final修饰的, 所以类型不会转换
而b1和b2都会被转换为int类型, 所以得加上强制类型转化(int), 或者把b1+b2强制转化为byte类型, 否则会编译出错
Day11
- 在HashMap中,当put(key, value)后,将key的hashcode作为下标在table这个数组上判断当前下标是否有value值,如果有value值,就将以链表的形式,在这个数组上的链表尾部加上这个value值,如果当前下标的value值为空,则直接赋值。新加入的放在链表头,后加入的放在链表尾。
- HashMap是允许以null作为key和value值的,hashtable不允许。
- size()方法是获得key不为null的Entry个数。
Statement 对象用于将 SQL 语句发送到数据库中。
实际上有三种 Statement 对象,它们都作为在给定连接上执行 SQL语句的包容器:
- Statement
- PreparedStatement(它从 Statement 继承而来)
- CallableStatement(它从 PreparedStatement 继承而来)
A选项: LinkedList实现了List接口,但是继承的是AbstractSequentiaList(抽象类,实现了List接口)。
B选项: AbstractSet实现了Set接口,它本身就是个抽象类,继承自AbstractCollection(抽象类,实现了Collection接口)。
C选项:HashSet实现了Set接口,继承自AbstractSet。
D选项:WeakMap不存在与java集合框架。只有一个WeakHashMap(继承自AbstractMap)。
ArrayList list = new ArrayList();这种是默认创建大小为10的数组,每次扩容大小为1.5倍。
ArrayList list = new ArrayList(20);这种是指定数组大小为20进行创建,创建时直接分配其大小,没有扩容。
Day12
方法的重载规则:
- 方法名相同
- 方法的参数列表不同(参数类型或者参数类型)
- 方法的返回值类型不影响重载
- 当两个方法名字相同,参数列表相同,但是返回值不相同,不构成重载
方法重写规则:
- 方法名称,参数列表和返回值类型全部都相同
- 被重写的方法不能拥有比父类更严格的访问权限控制
- 重写方法所在的类与原来方法所在的类是继承关系
try中包含的是会导致一个异常,但没有说是什么异常。
异常的捕获顺序是先捕获子类异常,再捕获父类异常。 - 如果抛出的异常是FileNotFoundException(或其子类),那么打印的就是FileNotFoundException!
- 如果抛出的异常是IOException或其子类(不包含FileNotFoundException及其子类),最终打印的结果就是IOException!
- 如果抛出的异常是Exception或其子类(不包含IOException及其子类), 最终打印的结果就是Exception!
- 上述三种可能都存在, 但是无论哪种情况都只会输出其中一个,所以从答案上来看,应该是A选项
Java异常通常分为两大类:Runtime Exception(运行时异常)和Checked Exception(受查异常)
- 常见的Runtime Exception:NullPointerException(空指针异常)、ClassNotFoundException(指定类没找到)、IndexOutOfBoundException(下标越界异常)、SQLException(SQL异常)、ClassCastException(数据类型转换异常)、NumberFormatException(字符串转化为数字异常)等
- FileNotFoundException属于受查异常,在编译时就要处理(使用try…catch…语句包裹或者用throws语句声明抛出),否则编译不通过。
java中原始数据类型的传递都是值传递,而包装类在传递的时候是引用传递。
这道题Byte是byte的包装类,但是执行了基本数据运算又自动拆包成byte,所以还是值传递,add方法不会对原本的变量造成什么影响,但是++a执行以后,由于byte类型的范围是-128~127,所以a的值变成了-128,所以应该输出-128,127。所以不选D