Java语言基础

回归基础。

类型

Java类型必定是class, abstract class,interface, enum ,annotation之一.

基本类型

变量的类型有:

primitive/基本数据类型: byte/char/short/int/long/float/double/boolean 占用字节—————–8 —16 –16—32–64—-32—-64———– 对应封装类型: Byte/Character/Short/Integer/Long/Float/Double/String (不可变)

当变量指向一个对象时,变量被称作对象的引用

注:float和double类型不应该用于精确计算,在需要的场合要使用BigDecimal类

String/字符串

不可变对象。在Java内部使用bytes表示,使用UTF-16编码(即双字节)。

把一系列字符放在双引号中创建"字面量/literal"字符串对象。

在实现上,println() 方法没有直接使用toString() 方法, 而使用了静态方法 valueOf(),这么做是为了避免obj 为null 时抛出NullPointerException异常。

  • substring(包含的,不包含的)
  • trim():去掉头尾部空白,包括空格、Tab、换行符
  • 很多次的字符串连接要使用StringBuilder
  • +运算符用作字符串连接,会先创建一个StringBuilder对象表示的工作区,其内容和原始字符串中的字符序列一样.
String three = new StringBuilder(one).append(two).toString();

数字和数学运算

整数的表示方式采用二进制补码,带符号的正数最常使用这种方式:

  • 所有位都为1的的位组合表示-1;
  • 如果设定了高位,表示的是负数;
  • Integer.MAX_VALUE = 2147483647

浮点数表示时机会都会丢失精度,而且根本无法避免舍入误差。

java.util.Random是个伪随机数生成器(PRNG/Pseudorandom Number Generator),如果伪随机数序列总是从同一个地方开始,那么就会生成完全相同的数字流。

伪随机数能满足大多数要求,但对密码应用等需要通过提供随机的种子值(通常使用CPU计数器中的值)增强安全性。

数组/Arrays

数组用以存储同一类型的对象,一旦创建后后无法改变大小

  • length是数组对象的一个属性
  • Arrays是针对数组对象进行操作的工具类
  • Arrays.binarySearch 返回插入位置的索引-1
// 初始化,{}被称为array literal
int[]   ints = { 1,2,3,4,5,6,7,8,9,10 };


// 装箱
Integer boxedValue = Integer.valueOf(18);
// 拆箱
int intValue = boxedValue.intValue();
// 注:Java虽然支持自动装箱和拆箱,但以上显式的写法可读性更好

// 解析字符串
Integer convertedValue = Integer.parseInt("123");
String characterNumeric = convertedValue.toString();
// 注:在String表达式中使用串联运算符时会自动装箱并调用toString()

逻辑结构

for

for(Loop initializer;Loop condition;Post iteration operation)

  • continue: 直接跳到下一迭代,而不继续执行之后的循环体
  • break: 立即跳出循环,即使循环条件仍满足

注:do while循环在条件被测前至少执行一次

foreach

for的增强简化版本。一般结合泛型使用,适用于不需要引用数组或者集合的索引的情况。

for(元素类型t 元素变量x : 遍历对象obj){
     引用了x的java语句;
}

switch

支持类型有 byte, short, char, int, String, enum

break跳出switch语句.

修饰符static

  • 静态类意味着在类加载时(类第一个被引用时)执行,并且只运行一次
  • 静态方法或字段属于类,而不是类实例

修饰符final

final字段不能更改它的值,通常与static连用,表示常量

Final关键字的使用场合

  1. 不允许被继承的类,如:String类。
  2. 不允许修改引用的域对象,如:POJO类的域变量。
  3. 不允许被重写的方法,如:POJO类的setter方法。
  4. 不允许运行过程中重新赋值的局部变量。
  5. 避免上下文重复使用一个变量,使用final描述可以强制重新定义一个变量,方便更好地进行重构。

访问修饰符

protected 类似于包修饰符,除了子类可以访问(即使子类在包外)

构造函数

  • 扩展类不需要集成构造函数
  • 子类必须在构造函数调用父类的构造函数

变量

四类变量:

  • Non-static fields ( instance variables)
  • Static fields ( class variables)
  • Local variables ( declared inside a method)
  • Parameters

资源