Java 基本语法

来源:互联网 发布:it领袖峰会 编辑:程序博客网 时间:2024/04/29 07:14

Java 一共8种基本类型,4种整型,2种浮点类型,1种表示unicode编码的字符单元的字符类型char,1种表示真值的boolean类型。

4种整数类型

int, 4 字节

short,2字节

long,8字节

byte,1字节

 

2种浮点类型

float,4字节,很少情况适合使用float,数值有一个后缀F,没有后缀的浮点数值默认为double.也可以在浮点数值后面添加后缀D则是double类型了

double,8字节

计算中,用来表示溢出和出错情况的3个特殊浮点数值,正无穷大,负无穷大,NaN(不是一个数字) 不能这样来检测是不是一个数子,X==Double.NaN,因为非数值的值都认为是不相同的。可以用Double.isNaN来检测。

 

Char类型用于表示单个字符,通常来表示字符常量,'A' 是编码为65所对应的字符常量,"A"是表示一个字符串。原来设计unicode的时候认为16位可以表示全部的字符,但是自从增加了很多亚洲文字后,16位就不够用了,所以16位char就描述所有的unicode的需要了。强烈建议不要再程序中使用char类型。除非确实需要针对UTF16代码单元进行操作。

 

运算符

当参与除法运算的两个操作数都是整数时,就表示整数除法,否则表示浮点除法。

 

自增运算符,自减运算符

在表达式中,前缀后缀方式有所区别,前缀是先进行加一或减一然后再参加运算,后缀是使用变量原来的值,然后参与运算完毕后再加一减一,其他情况都一样前缀后缀。

 

位运算

& | ^ ~ 表示与,或异或,非。他们都是在位模式下工作的。<<>>向左向右将二进制位进行左移,右移。>>>用0填充高位,>>用符号位填充高位。

 

数值类型之间的转换

 

实心箭头表示转换没有信息损失,否则就为精度可能损失。

2元运算的时候,要先将两个操作数转换为同一类型:

如果两个操作数有一个是double,那么另外一个操作数会被转化为double。

如果其中一个是float,那么另外一个将为转为float.

如果其中一个是long,那么另外一个就转化为long.

否则两个操作数都被转化为int.

上面四种转换不是强制性,如果从double往int就是要强制转换(int)

 

枚举类型

enum size{SMALL, MEDIUM,LARGE,EXTRA_LARGE}

声明这样一种类型的变量

Size s = Size.MEDIUM;

变量里面只能存储枚举的值,或者null,表示这个变量没有设置任何一个值

 

检验字符串是否相等

一定不能使用==检测两个字符串相等,这个只能检测两个字符串是否放在同一个位置上。当然如果在同一位置,应该相等,但是也有可能将内容相同的多个字符串的拷贝放置在不同的位置上。比如

String greeting = "hello";

if ( greeting == "hello")

//maybe true

if(greeting.substring(0,3) == "hel")

//maybe false

 

代码点与代码单元

char是一个用UTF 16表示的代码单元,是16位的。大部分unicode字符用一个代码单元也就是16位就能表示,但是辅助字符需要2个代码单元表示。String的length返回采用utf16表示的字符串所需要的代码单元数量。

代码点code point是指与一个编码表中的某个字符对应的代码值,大部分字符的代码点可以16位表示,但是一些辅助字符的代码点就是2个16位也就是2个代码单元表示。如果要得到实际长度就要使用代码点数量,codePointCount

charAt将返回位置n的代码单元。要想得到第i个代码点,就应该使用String.offsetByCodePoints,codePointAt

 

字符串采用相加的形式拼接效率过低,因为每次连接字符串,都会构建一个新的string对象,耗时,又浪费空间。stringBuilder就可以避免这类问题。stringBuilder的前身是stringBuffer,效率有点低,不过是线程安全的。

 

文件名中如果包括反斜杠 / 那么要在反斜杠之前再加一个额外的反斜杠。如果使用集成开发环境,启动路径将有IDE控制,使用下面的调用方式可以找到路径位置

String dir = System.getProperty("user.dir");

 

else子句与最邻近的if构成一组。

 

switch语句将从与选项值先匹配的case标签处开始执行知道遇到break语句,或者执行到switch语句的结束为止。如果没有匹配的case标签,那就执行default这个子句。case标签必须是整数或者枚举常量。不能测试字符串。

 

不带标签的break语句可以直接退出switch循环,带标签的break语句,用于跳出多重嵌套的循环语句。

另外还有一个continue语句,与break语句一样,他将中断正常的控制流程。continue语句将控制转移到最内层循环的首部。continue跳到for循环的更新部分,也就是count++语句。

 

基本的整数和浮点数精度不能够满足去求得时候那么java.math包中的两个很有用的泪,BigInteger和BigDecimal可以处理包含任意长度数字序列的值。静态的valueof方法可以把普通数转移为大数值。但是普通的熟悉的运算符如加号乘号不能使用了而是使用大数值类中的add和multipy方法。BigInterger c = a.add(b) // c = a+b ; BigInteger d = c.multiply(b.add(BigInteger.valueOf(2))) //d=c*(b+2)

 

声明数组的多种方式int[] a = new int[100]; int a[]; new int[]{17,19,23,29,31,37}; int[] smallPrimes = {2,3,5,7,8}; Arrays.copyOf将一个数组的所有值拷贝到一个新的数组中去,如果数组元素为数值型,那么多余的元素被赋予0,如果是布尔型那就是false。如果新数组长度小于原始数组,那么就只拷贝最前面的数据。JAVA SE 6前 用System.arraycopy方法将一个数组的元素拷贝到另外一个数组中。

 

多维数组

double[][] balances;

int[][] ,agocSquare={

{16,2,3,4},

{34,45,6,7},

{9,6,7,13},

{4,5,7,8}

};

for each循环不能自动处理二维数组的每一个元素。如果要想遍历所有元素,就要两个嵌套的循环,遍历2维数组

 

不规则数组

在Java里面实际上是没有多维数组的,只有一维数组,多维数组被解释为数组的数组。

balances[i]引用第i子数组,也就是二维数组的第i行。balance[i][j]是指这个第i个数组的第j个元素。每一行可以单独的存取。所以可以让两行交换。

还可以构造一个不规则数组。每一行的元素都不相等。

int[][] odds = new int[MAX+1][];//先分配一个具有所含行数的数组

然后分配这些行。

for(int n=0;n<=MAX;n++)

{

   odds[n]=new int[n+1];

}

分配完每一行的数组后,就可以采用通常的方式访问其中的元素了。

odds[n][k]=lotteryOdds;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击