笔试强训做题笔记

本文详细探讨了Math.round函数的工作原理,特别关注正负数的取整规则,并深入讲解了浮点数类型、方法存储位置、类变量初始化、序列化接口、访问权限、构造函数执行顺序等Java基础知识。此外,涉及了内存管理、排序算法选择、泛型擦除、异常处理和数据类型转换等内容。
摘要由CSDN通过智能技术生成

取整函数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");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值