取整函数Math.round()
Math.round(11.5) / Math.round(-11.5)
事实证明:
Math.round(11.5) = 12
Math.round(-11.5) = -11
方法解释是返回参数最接近的int, 其中int四舍五入为正无穷
那么问题来了,怎么样叫做最近的int
实在不行就记向上取整就好
浮点数的默认类型
是double.
记忆方法:数字后面加后缀'f'才能被认为是float,而double没有相关规定
方法通常存储在进程中的哪一个区域
方法区
方法本身不占内存, 指令都会被放到JVM的方法区中
类成员变量static int i会被自动初始化为0吗
会的,毕竟也是随时会被使用的基础类型
何况static作为类成员,会在最开始就被初始化(对基本数据类型的成员而言)
使类拥有序列化能力应该实现的接口
java.io.Serializable
private修饰的类中的成员,可以在子类中被访问吗
不能,严格的只能在本类中被使用
子类被赋值为null时候,可以引用父类的static方法吗
可以的,因为static不依赖对象,所以即使子类没有指向对象,也可以引用父类的static方法
准确的说法是:一个成员变量(方法)被static关键字修饰表明,可以在没有所属类的实例变量的情况下被访问
abstract可以修饰字段吗?
不可以,因为没有意义,只能修饰方法和类
p.s.声明抽象方法不可以写出大括号
实例方法可以调用超类的(类/实例)方法吗
1.可以,超类的实例方法需要通过super关键字调用,超类的类方法也需要通过类名调用,反正说可以"直接调用"就不对
2.对本类的类方法,确实可以"直接调用"
3.对其他类的实例方法,只能通过其他类的实例去调用
注:实例方法=普通成员方法,不要混淆于实例代码块
在创建派生类对象时构造函数的执行顺序
错误答案❌:基类构造函数,派生类本身的构造函数,派生类对象成员构造函数
正确答案🐕:基类构造函数,派生类对象成员构造函数,派生类本身的构造函数
记忆为:有父才有子,父类一定第一.客人先行,成员的构造方法第二;自己最后,本类构造方法三
与队列结构关联的是
先到先服务的作业调度
关于接口有关的修饰符问题
修饰interface:final不行,final修饰表示被锁死,不能被扩展修改
public,abstract都可以
修饰interface里的方法:不能是final,private,protected
main函数一定是public static的吗
不是捏,不是public或者不是static或者不是public static都行
当然,假如不写static这就不是编译意义上的主函数了,只能算个普通的实例方法
整数%整数和%小数的结果有区别吗
数组复制的最高效方法
System.arraycopy()
Array.copyOf():本质也是调用System.arraycopy(),所以效率不如上者
for循环逐一复制:小数据还可以,数据量大之后被杀的片甲不留
clone方法:数据量大的时候不是最差的,但是不及copy系列
String.subString(int startIndex, int endIndex)
这个方法的区间是左闭右开的!!!!所以endIndex可以直接输入数组的长度
装箱和拆箱
Integer赋值给int == 拆箱; int赋值给Integer == 装箱
引用类型和基本类型之间的转换操作称为装箱拆箱
JDK1.5后, 可以实现
int i=0; Integer j = new Integer(0); System.out.println(i==j); System.out.println(j.equals(i));
输出true , true
泛型擦除是什么
擦除就是泛型在编译时候T全部当作Object看待,所以在运行时候不能动态获取T的实际类型
内存很有限,数据又比较大,用什么排序算法好使?(海量数据排序)
插入快排这些是不是都不行? 虽然他们不需要额外的空间复杂度, 但是也需要将所有的数据放进去,内存小不就放不进去了?
归并可以吗,分组归并????
归并就可以,多次分组就行
堆和冒泡都是n^2
希尔是n^1.5
快速是n^logn不变
代码块和静态代码块可以写在构造函数里吗??
怪怪的
finally和try中都有return的话,最终return的是哪一个
既然finally不论如何都会被执行,那finally的return会替换掉前面的return值
protected关键字
包和子类可见,即跨包的子类也可见
基本类型的赋值问题
long l = 012; 前面是0表示该数是8进制,编译通过
double d = 0x123456; 前面是0x表示该数是16进制,编译通过
float f = -412; 不加f也可以,就相当于隐式强制转换了(int转float)
注:会出现报错的情况的是float f = -412.2; 若赋值的数字带小数点则末尾一定要加上f
final
final表示最终,语法含义为使之不再被改变
1.final变量:对基本数据类型,则表示其值不再改变;若是引用数据类型,则表示其引用不再改变
2.final方法:方法只能被继承,被直接使用,不能被重写
3.final类:类的内容不能被修改,不能被拓展,因此也不能被继承(可以作最终子类)
抽象方法的正确声明格式
1.抽象方法不会有定义,只有一个声明,没有方法体(定义),所以不会有花括号
2.有抽象方法的类一定是抽象类
3.关于有抽象修饰符又有带花括号的方法的印象,指代的是抽象类可以有带定义的非普通方法
Java使用的字符码集是Unicode吗
好像是UTF8
double=3.0会规定double保留的小数点后一位嘛,还是说没有
我觉得没有限制
如何跳出Array的forEach循环???
break可以嘛
数组的大小可以任意改变? 不能啊 定义了就不能改变大小了
数组是个原生类吧?(我理解自带类==原生类)
错, 基本数据类型才是原生类(完全无法重写和改变)
A也是C的父类吧
常量池是在那个区域的? 堆区嘛
传入任意Object都return true??
abstract字段???
how do i know
AbstractSet和WeakMap是什么鬼
没学过啊艹
感觉是classcast, 检查发现没有类的映射
抽象类的普通成员变量是被初始化过的吗?
感觉是啊, 毕竟都constInt = 5了;
那执行constInt+=5好像也没什么问题?>
错, 抽象类中不能直接进行运算??? -> 那可以在抽象方法中进行运算吗(感觉可以, 因为类里只能存在全局变量和各种方法)
C选项错在抽象方法带方法体, 即花括号
D选项,虽然method看似重载, 多了一个abstract, 重载抽象方法是被允许的吗?
是允许的!!!!
volatile是什么吊
public class Main { public static void main(String[] args) { ((Main)null).tyt(); } public static void tyt() { System.out.println("test null"); } }
两个问题
1.一个exception被catch后是相当于被解决了吗, 就是之后不会再被重复catch
感觉是被处理了, 后面不会再被catch
2.假如不是, 那后面的catch中写的是前面的exception的父类exception, 那后面还会被catch吗
try里面可能会被捕捉到多段exception, 就是说程序会报出所有exception, 而非碰到一个exception就推出>>?
try中只能捕获一个异常!!!!!
搞清楚byte的范围
可以通过null调用静态方法!!
public class Main {
public static void main(String[] args) {
((Main)null).tyt();
}
public static void tyt() {
System.out.println("test null");
}
}