1.常见API
1.1 Math类
向上取整是向着数轴右边走的意思, 负数也是. 也可以叫进一法, 不论正数负数都会往右走一.
向下取整是向着数轴左边走. 也可以叫去尾法, 不论正负数都会将小数点后的数字去掉.
1.1.2 练习
// 判断有多少水仙花数
int count = 0;
for (int i = 100; i < 1000; i++) {
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100 % 10;
if (i == Math.pow(ge, 3) + Math.pow(shi, 3) + Math.pow(bai, 3)){
count++;
}
}
System.out.println("有" + count + "个水仙花数");
1.2 System类
System.exit(), 里面写0表示虚拟机正常停止, 写1表示虚拟机异常停止.
如果源数组和目的地数组都是基本数据类型, 那么两者的数据类型必须一致. 否则会报错.
源数组和目的地数组的长度也必须考虑, 如果超出则会报错.
如果数据源数组和目的地数组都是引用数据类型,那么子类类型可以赋值给父类类型.
1.3Runtime
Runtime表示当前虚拟机的运行环境
1.4 Object
Object只有无参构造方法
1.4.1 常用方法
(1) toString
方法返回的字符串是: 包名+类名+@+地址值.
细节:
System.out.println和toString一样也能打印出地址值
system:类名out:静态变量
system.out:获取打印的对象println( ):方法
参数:表示打印的内容核心逻辑:
当我们打印一个对象的时候,底层会调用对象的toString方法,把对象变成字符串。然后再打印在控制台上,打印完毕换行处理。
如果不想打印地址值的话, 我们可以重写toString方法.(ptg插件可以在生成javabean的时候生成toString方法)
当sout中传递过来是一个对象时,会在底层使用toString方法
(2) equals()
只能比较地址值是否相同, 如果相比属性值, 可以重写equals方法. alt+insert中可以选择自动生成.
(3) clone
把A对象的属性值完全拷贝给B对象,也叫对象拷贝,对象复制
细节 : 我们不能直接使用clone, 因为它是protect的, 所以我们需要在封装的类中重写clone方法, 并且在开头要implements一个cloneable接口(该接口中不含抽象方法).
Cloneable
如果一个接口里面没有抽象方法
表示当前的接口是一个标记性接口
现在Cloneable表示一旦了实现,那么当前类的对象就可以被克隆
如果没有实现,当前类的对象就不能克隆
实现clone的步骤:
1.重写0bject中的clone方法
2.让javabean类实现Cloneable接口
3.创建原对象并调用clone就可以了。
浅克隆
浅克隆是只克隆地址值, 缺点是当其中任一对象的字符串或数组中的值发生变化, 另一个也发生相应的变化.
深克隆
深克隆是直接创建一个新的数据, 将新的数组的地址值赋给新的对象. 字符串的地址值相同是因为串池复用.
object的clone方法是浅克隆.
想要实现深克隆需要用到第三方工具
1.5 objects
Objects是一个工具类,提供了一些方法去完成一些功能。
1.6 BigInteger
1.6.1 构造方法
(1) BigInteger(4, r), 表示[0, 15]中的随机数, 15 = 2^4 - 1.
(2) 第二个构造方法中的参数必须是整数
(3) 1.字符串中的数字必须是整数 2.字符串中的数字必须要跟进制吻合。比如二进制中,那么只能写0和1,写其他的就报错。
(4) 静态方法获取BigInteger的对象, 内部有优化
细节:
1.能表示范围比较小,只能在1ong的取值范围之内,如果超出1ong的范围就不行了。
2.在内部对常用的数字:-16~16进行了优化。提前把-16 ~ 16先创建好BigInteger的对象,如果多次获取不会重新创建新的。
1.6.2 基本使用
biginteger是对象, 是不能使用加减乘除的.
1.6.3 存储方式
将大整数对应的二进制数以32位进行分组, 再将3组的二进制值转为各自对应的十进制值, 最后再按照顺序放入数组当中.
signum表示大整数的正负, 为-1则是负数, 0则是0, 1则是正数.
1.6.4 总结
1.7 BigDecima
1.7.1构造方法
二进制的整数部分我们知道是通过每一位的二进制数乘以2的次方后的数相加得到, 次幂从右往左递减, 小数也是如此, 次幂从右往左递减(-1, -2, -3...), 所以有些特定的小数部分很难表达出来, 需要占用很多字节. 但是long和double的字节数都有限, 所以会出现计算不准确的情况.
细节:
1.如果要表示的数字不大,没有超出double的取值范围, 建议使用静态方法
2.如果要表示的数字比较大,超出了double的取值范围,建议使用构造方法
3.如果我们传递的是0~10之间的整数,包含0,包含10,那么方法会返回已经创建好的对象,不会重新new
1.7.2基本使用
1.7.3 存储方式
先将String中每一个符号进行拆分, 然后查找对应的ASCII码表对应的数字放入数组当中.