不是从头开始,先记下来部分,以后再写
一、数据类型和运算符
1.只有浮点类型的的数值才可以使用科学计数法的形式来表示;
例:51200是一个int型的值,但512E2则是一个浮点型的值!
2.Java语言默认的浮点类型为double,例如:float a=5.6;运行时将会报错,因为5.6 默认为double类型,必须进行强制类型转换才能赋值。
3.Java还提供了三个特殊的浮点型数值:正无穷大、负无穷大和非数,用于表示溢出和出错。 例如使用一个正数除以0将得到正无穷(用Double或Float类的POSITIVE_INFINITY表示),负数则得到负无穷(用D或F类的NEGATIVE_INFINITY表示),0.0除以0.0或对负数开方将得到非数(使用D\F类的NaN表示)。
注意:所有的正无穷相等、所有的负无穷相等,而NaN不与任何值相等,包括NaN。只有浮点数除以0才能得到正负无穷,因为Java会自动将0装换为0.0来计算,使用正\负整数则会报错。/by zero
4.java7中引入了数值下划线,避免程序员看花眼,例如:int binVa1=0B1000_0000_0000_0000_0000_0010_0000_0011;
5.boolean变量或值只需一位即可保存,但计算机通常以最小内存单元字节byte来分配内存,因此大部分时候bit实际上占八位。
6.将任何基本类型的值与字符串进行连接运算的时候,基本类型的值会自动转换为字符串类型。如果希望将基本类型的值转换为对应的字符串的时候,可以把基本类型的值和一个空字符串进行连接运算,即可得到想要的结果。
例:System.out.println(3+4+"hello");输出7hello System.out.println("hello"+3+4);输出hello34
7.表达式类型的自动提升
当一个算术表达式含有多个基本类型的值时,整个算术表达式的数据类型会发生自动提升。
规则:1.所有的byte、short、char将被自动提升至int类型。2.整个算术表达式的数据类型自动提升到与表达式最高等级操作数的同样的类型。
8.字符串直接量
当程序第一次使用某个字符串直接量的时候,Java会使用常量池(constant pool)来缓存该字符串直接量,如果程序后面的部分还需要用到该字符串直接量的时候,Java会直接使用常量池中的字符串直接量而不会创建新的。
例: String s0="hello";
String s1="hello";
String s2="he"+"llo';
System.out.println(s0==s1);
System.out.println(s0==s2);
输出结果都为true;
9.求余运算
因为求余运算也需要进行除法运算,故同除法运算一样,如果求余运算的 两个操作数 中至少有一个是浮点数,则允许第二个操作数为0或者0.0,只是求余运算的结果是非数:NaN;0或0.0对任何数求余都会得到0或0.0;
10.Math类
11.位运算符
按位非只需要一个操作数,这个运算符将把操作数在计算机底层的二进制码按位取反(包括符号位);
进行移位运算时还要遵循以下规则:
1.对于低于int类型的(byte、short、char)的操作数总是先转换为int类型后再移位;
2.对于int类型的整数移位a>>b,,当b>32时,总是先用b对32求余,得到的数才是真正移位的位数,例如;a>>33与a>>1的结果是完全一样的。而a>>32的结果与a相 同。对于long也一样,对64求余。
12.扩展运算符
-=、+=。。。。。,,只要能使用这种扩展运算符的时候尽量使用,因为这种运算符不仅有良好的性能,还可以增加程序的健壮性。
例:public class test{
public static void main(String[] args){
byte b=2;
b=b+5;
//报错,因为5是int型,
byte b=5;
b+=5;
//不会报错
}
}
a=a+5;与a+=5,虽然一般情况下结果是相同的,但底层的运行机制还是存在一定差异的。故推荐多使用扩展运算符。
13.逻辑运算符
==,如果进行比较的两个操作数都是数值类型,即使他们的数据类型不同,只要他们的值相同,也会返回true。例如 97==‘a’,5.0==5;都会返回true;如果两个操作数为引用类型,那么只有两个引用变量的类型具有父子关系时才可以比较,这两个引用必须指向同一个对象才会返回true。
14.三目运算符
三目运算符只有一个 ?: ,语法格式如下:
(expression) ? if-true-statement : if_false-statement;
三目 运算的规则:先对expression逻辑表达式求值,如果逻辑表达式 返回true,则返回第二个操作数的值,如果逻辑表达式返回false,则返回第三个操作数的值。
三目运算符可以嵌套使用。
15.运算符优先级
16.Java7增强后的switch分支语句
与if语句不同,switch语句后的控制表达式的数据类型只能是byte,short,char,int,四种整数类型,枚举类型和Java.lang.String类型(从Java7才开始允许),不能是boolean类型。
17.循环语句
break语句不仅可以结束其所在的循环,还可以直接结束其外层循环,此时需要在break后紧跟一个标签,这个标签用于标识一个外层循环。
标签:Java中的标签就是紧跟着英文冒号(:)的标识符,与其他语言不通,Java 中只有将标签放在循环语句之前才有用。
例: //外层循环,outer作为标识符
outer:
for(int i=0;i<5;i++){
for(int j=0;j<3;j++){
System.out.println("i的值为:"+i+"j的值为:"+j);
if(j==1){
//跳出outer标签所标识的循环
break outer;
}
}
与break类似,continue后面也可以跟一个标签,用来跳过标签所标识循环的当次循环的剩下语句,重新开始下一次循环。
18.数组
数组的定义; 1. type [] arrayName; 2.type arrayName[ ];
建议使用第一种定义方式,越来越多的语言已经不支持第二种定义方式了。
定义数组时不能指定数组长度。
19.数组的初始化
所谓初始化就是为数组分配内存空间并未每个数组元素赋初始值。
数组的初始化有两种方式:
静态初始化:初始化时有程序员显式的指定每个数组元素的初始值,由系统决定数组长度。
动态初始化:程序员只指定数组长度,由系统为数组元素分配初始值。
静态: arrayName=new type[]{element1,element2,...}
简化形式:type [] arrayName={element1, element2,..}
动态: arrayName=new tyep[length];
简化形式: type [] arrayName=new type[length];
指定初始值时,系统按一下规则分配:
整数类型:0;
浮点型:0.0;
char:'\u0000';
boolean: false;
引用类型: null;
不要同时使用静态初始化与动态初始化,即不能指定长度的同时又为每个元素赋初始值。