一、标识符_关键字_数据类型
1、标识符
字母、数字和下划线“_”和美元符“$”组成,以字母、下划线或“$”开头,大小写敏感,长度无限制。
2、关键字
关键字都是小写,goto、const未被使用,但作为保留。
3、变量
成员变量:方法外部、类的内部定义的变量,Java作为纯面向对象的语言,区别C/C++,不能在类外面定义变量;
局部变量:方法或语句块(if循环,for循环等等)内部定义的变量。
4、数据类型
一共4类8种基本数据类型:
逻辑型:boolean;文本型:char;整数型:byte,short,int,long;浮点数型:float,double。
布尔(boolean)变量:区别于C语言,Java中的布尔变量只有两种取值:true和false,C语言中是0和任何非零均可表示布尔变量。
编码格式:Java字符型使用unicode编码,这是统一码,有很多的编码例如大陆使用的GBK国标码等等,unicode是一种编码规范,以此为规范的较好实现有UTF-8、UTF-16。
Unicode只是一个编码规范,目前实际实现的unicode编码只要有三种:UTF-8,UCS-2和UTF-16,三种unicode字符集之间可以按照规范进行转换。
UTF-8
UTF-8是一种8位的unicode字符集,编码长度是可变的,并且是ASCII字符集的严格超集,也就是说ASCII中每个字符的编码在UTF-8中是完全一样的。UTF-8字符集中,一个字符可能是1个字节,2个字节,3个字节或者4个字节长。一般来说,欧洲的字母字符长度为1到2个字节,而亚洲的大部分字符则是3个字节,附加字符为4个字节长。
Unix平台中普遍支持UTF-8字符集,HTML和大多数浏览器也支持UTF-8,而window和java则支持UCS-2。
UTF-8的主要优点:
- 对于欧洲字母字符需要较少的存储空间。
- 容易从ASCII字符集向UTF-8迁移。
UCS-2
UCS-2是固定长度为16位的unicode字符集。每个字符都是2个字节,UCS-2只支持unicode3.0,所以不支持附加字符。
UCS-2的优点:
- 对于亚洲字符的存储空间需求比UTF-8少,因为每个字符都是2个字节。
- 处理字符的速度比UTF-8更快,因为是固定长度编码的。
- 对于windows和java的支持更好。
UTF-16
UTF-16也是一种16位编码的字符集。实际上,UTF-16就是UCS-2加上附加字符的支持,也就是符合unicode4.0规范的UCS-2。所以UTF-16是UCS-2的严格超集。
UTF-16中的字符,要么是2个字节,要么是4个字节表示的。UTF-16主要在windows2000以上版本使用。
UTF-16相对UTF-8的优点,和UCS-2是一致的。
关于unicode编码参考博客:http://blog.sina.com.cn/s/blog_4b4409c30100vw9t.html
5、基本类型转换
1>、布尔类型不能转换;
2>、byte、short、char三者之间无法转换;三者在做运算的时候是首先将自身转成int类型,然后再做运算,例如byte=23;正确,可以把int类型直接复制给byte类型,但是超过127就不行了。
byte i = 34;
byte j = 37;
j = i+j;//错误
i和j在做运算的时候首先将自身变成int类型,相加之后结果是int类型,必须要类型转换才能复制给j;正确的是j=(byte)i+j;
3>、大数转小数要加强制类型转换,但可能造成精度降低或者溢出。
int i = 1,j;
float f1 = 0.1;float f2 = 123;
long i1 = 1234567,i2 = 8888888888;
double d1 = 2e18,d2=124;
byte b1 = 1,b2 = 2,b3 = 129;
j = j+10;
i = i/10;
i = i*0.1;
char c1 = 'a',c2 = 125;
byte b = b1-b2;
char c = c1+c2-1;
float f3 = f1+f2;
float f4 = f1+f2*0.1;
double d = d1*i+j;
float f = (float)(d1*5+d2);
L1正确;L2错误,0.1是double类型,要强制转换,f1=0.1F;L3错误,要加L,1234567是int类型可以表示的,但是i2要加L,i2=8888888888L;
L4正确;L5 b3溢出;L6需要先对j赋值;L7正确;L8,i*0.1是double类型,需要强制转换;L9正确;L10,错误,做运算的时候会自动转为int类型,计算结束以后也是int类型,需要强制转换为byte类型;
L11,错误,同理L10;L12,正确,两个float相加,最后赋值给float类型;L13,错误,有0.1,在运算的时候会转成double类型,赋值给float需要强制转换;
L14正确;L15正确。
6、小知识点
1>、无符号数在Java中不存在,全是有符号的;
2>、\u表示转换为unicode编码
3>、数据类型一般大的可以往小的转,比如int转到char或者byte,直接把int前面3个字节砍掉;但是有有一点要注意:double类型8字节,float类型4字节,当double类型的变量存的值超过4字节能表示的最大范围,那么double是不能直接强制转换成float类型的,会出现infinity的错误。这是由于浮点类型和整数类型内部的保存方式不一样,所以这一点要注意。例如double f1=1e200(超过float4字节能表示的范围了); float f2=(float)f1.这样强制类型转换是要出错的。
----------------------------------------- -- -- -- -- -- --- ----------------------------------- 以下为2016/7/8 更新
---------------------------------------- -- -- -- -- -- --- ------------------------------------
一、编程格式
1、大括号对齐;是右大括号和左大括号的那一行的行开头对齐,不是两个括号对齐;
2、遇到左大括号 { 的时候用Tab缩进;比如上一行结尾有左大括号,下一行开头的时候就要缩进一下;
3、程序块之间加空行;比如两个方法体之间加一个空行;
4、并排语句加空格;两条语句之间如果一定要放在同一行,那么加个空格;
5、一般来说运算符两端加空格,比如i = 8;
6、写左大括号之前{ 加一个空格;
7、成对编程。比如写了一个方法体以后,写了左大括号,先别急着写函数体,先把右大括号写出来,把框架写出来。
二、运算符
1、自增自减
++(--)在前面时先运算再取值;在后面时,先取值后运算;
2、逻辑运算符
只能有true和false。
逻辑与(&) 短路与(&&),二者在结果上不会产生影响,但是会对条件判断的运算产生影响,逻辑与要计算所有的式子,短路与一旦碰到有false就直接返回false,不再计算后面的式子。
逻辑与、或和短路与、或参考博客:http://www.cnblogs.com/livterjava/p/4684465.html
3、字符串连接符
“+”除了加号以外,还用于对字符串进行连接。
int i = 8 + 9;
String s = "hello" + "world";
任何类型在打印的时候都会转成字符串进行打印。
System.out.println(c);
4、三目运算符
x?y:z
x如果为true,这个三目运算符结果就是y,x为false时,这个三目运算符就是z。
---------------------------------------- -- -- -- -- -- --- ------------------------------------- 以下为2016/7/11 更新
--------------------------------------- -- -- -- -- -- --- --------------------------------------
一、语句1、条件语句
if 语句和switch语句和C一样。switch里面只能探测int类型,switch(i),i要是int类型,但是char、byte、short也能填,因为它们可以转换为int类型。
2、循环语句
for、while、do...while;
for(int i=0;i<10;i++)这条语句合法,C里面很多编译器不能把int i放在括号里面,需要事先定义好i。
while、do...while用法和C语言一样
3、break、continue语句
break跳出当前循环(只能break一层循环),即不再循环了,终止全部循环;continue是跳过该循环体continue后面的没有执行的语句(终止当前循环),直接进行下一次循环。和C一样。
二、方法
Java的方法其实就类似C语言里面的函数,是一段用来完成特定功能的代码片段。也包含形参实参,返回值,返回类型
三、递归
1、在一个方法内部对自身做调用
下面例子算阶乘,5的阶乘
public class Digui {
public static void main(String[] args) {
System.out.println(dg(5));
}
public static int dg(int n){
if(n == 1)
return 1;
else
return n*dg(n-1);
}
}
输出 120.
用递归计算斐波那契数列,输出第7个数
public class Fab {
public static void main(String[] args) {
System.out.println(dg(7));
}
public static int dg(int index){
if(index == 1 || index == 2){
return 1;
}
else{
return (dg(index-1)+dg(index-2));
}
}
}//输出13
来源:CSDN
作者:无扬人生
链接:https://blog.csdn.net/TheBlackbeard/article/details/51854208