这几天在为实习作准备,打算系统地重新学一下java基础。这里是我在看《Java核心技术卷I》的时候记下的一些小点,比较杂乱,但是也有一定的参考价值,放在这里给后来者和自己以后参考。
如有纰漏敬请指教!
- java的“大数值”(big number)是一个Java对象,能够表示任意精度的值
- 用Double.isNaN()来判断是否为not a number,其他方法类似
- \n换行 \r回车
- 声明一个变量之后必须用赋值语句对变量进行显示初始化
- final常用作指常量(赋值一次后不可变)。习惯上,常量名称为全大写+下划线。例如:MAX_NUM。利用static final可以设置类常量。
- 标记strictfp将会使用严格的浮点计算,较少见
- 如果对负数直接使用%,所得结果可能为负数。这不符合最优(“欧几里德”)规则:余数总是≥0。使用floorMod(a, b)可以保证在除数为正的情况下,无论被除数的符号是什么,所得余数都为正数
- java.lang.Math类中提供了一些常用函数,例如:
- Math.sin
- Math.cos
- Math.tan
- Math.atan
- Math.atan2
- Math.exp //自然对数
- Math.log
- Math.log10
- Math.PI //π的近似常量
- Math.E //e的近似常量
- Math类的所有方法使用计算机浮点单元中的例程。如果一个完全可预测的结果比运行速度更重要的话,那么就应该使用由fdlibm(自由发布的Math库)实现的StrictMath类
- java中强转换采取截断的方法。所以当试图将一个数值进行强转换,这个数值又超过了目标类型的表达范围时,可能会产生不可预料的结果。如(byte)300结果为44
- 注意:使用+=(其他符号也一样)符号时,如果左右两边的类型不一致,将会被强制转换成左侧变量的类型。如int x = 1; x += 3.5;时,等价于(int)x + 3.5; 而不是采用自动类型转换的顺序
- &&和||采用“短路”计算方式
- &和&&在功能上相近,但在计算时不采用“短路”算法。|同
- String.substring(1, 3)的第二个参数是不想复制的第一个位置。也就是说,最终得到的字符串是原字符串中0-2的字符组成的字符串
- 字符串不可变。如果需要修改变量的字符串,即使使用=号,java内部也是修改变量引用指向新的字符串
- 字符串比较内容是否相等用String equals(String)或String equalsIgnoreCase(String)。由于在java字符串作为对象存在,所以如果在此处使用==比较,那么会只会判断这两个字符串在堆中是否放在同一个位置上(对象是否相同)
- String trim()返回一个删除了首尾空格的字符串
- StringBuilder的前身是StringBuffer,前者比后者效率更高,但是后者允许采用多线程的方式执行添加或者删除字符的操作。在单线程中,应该优先使用StringBuilder。
- 用Scanner.next()可以读取一个单词(以空格为分隔符),Scanner.nextLine()则读取下一整行
- Scanner.nextInt()/Scanner.nextDouble()
- 可以用System.out.printf()来进行格式化输出,%d十进制整数/%s字符串/%f定点浮点数
- java中使用相对路径注意:一般是相对于JVM路径或者IDE设置的路径,可以先使用System.getProperty(“user.dir”)来获取相对路径的绝对路径
- break可以带标签。跳出的标签最好是在希望跳出的循环的前一行,也可以使用代码块进行跳出(不推荐)
- BigInteger.valueof(long),如果要读取超过long能表达的字符串的数值,要使用new BigInteger(“123”)
- 数组初始化:数值=0,布尔值=false,对象=null
- Array.sort(type[] a)用优化的快速排序算法进行排序,Arrays.binarySearch(type[] a, type key)使用二分搜索法查找key。如果成功返回下标,如果不成功返回一个负数r。-r-1就是为保持a有序key应该插入的位置。注意:二分搜索只能针对有序数组。并且,在调用Array.binarySearch时不会自动排序,所以在搜索无序数组时结果很可能是错的
- Java中的数组是对象。数组保存的仅仅是对象的引用,而不是对象本身。数组对象本身是存在于堆中的。而对于基本类型数组而言,数组元素的值直接存储在对应的数组元素中