一、控制流程
if-else : 判断语句
while循环:循环体中可能一次都不执行
do-while循环:循环体至少执行一次
for循环
foreach循环:
for(元素类型type 元素变量value :遍历对象obj)
{
引用x的java语句
}
switch语句:如果在case分支语句的末尾没有break语句,那么就会接誉执行下—个case分枝语句。
:goto(java保留字,java中并未使用):break(跳出循环):continue(越过当前循环,跳到循环首部)
二、大数
大数不是java基本数据类型,而是类和对象
java.math中的BigInteger和BigDecimal这两个类可以处理任意长度序列的数值
BigInteger a = BigInteger.valueOf(100); //使用静态方法将普通数值转为大数值
BigInteger c = a.add(b); // c = a + b // 不能使用+-*/等算术运算符计算大数,要使用大数值“类”中的add,multiply方法
三、数组
- 数组浅拷贝:两个变量将引1用同一个数组(只是拷贝了引用,一变则全变)
- 数组深拷贝:使用Arrays类的copyOf方法,将一个数组的所有值考贝到一个新的数組中去(两个数组没什么关系,一个变另一个不变)
- 命令行参数
main中的String arg[] :arg[0]:"-g" ; arg[1]:"cruel"; arg[2]:"world"
使用Java Message -g cruel world运行程序时,Java的main方法中,程序名并没有存储在args数组中
快速打印数组原色
- 打印一维数组:Arrays.toString
- 打印二维数组:Arrays.deepToString
四、字符串
String存储原理
- String类型是不可变的
- Java中用双引号括起来的字符串,例如'abc','def',都是直接存储在“方法区”的“字符常量池”当中的,双引号中的内容相同的字符串只会在“字符串常量池”中保存一份。
- 因为字符申在实际的开发中使用太频繁。为了提喬执行效率,所以把字符律放到了方法区的字符串常量池当中。
- String、StringBuilder、StringBuffer
String底层数组用final修饰,不可变
StringBuilder底层数组没有用final修饰,可变;线程不安全,效率高(一般用的多)
StringBuffer底层数组没有用final修饰,可变;线程安全,效率低(一般用的少)
三种方法都采用synchronized修饰