Java对大小写敏感
类名必须以字母开头,后面跟字母和数字随意组合。标准命名规范,类名是以大写字母开头的名词
4种整型:
int 4字节
short 2字节
long 8字节
byte 1字节
2 种浮点类型:
float 4字节
double 8字节
char类型
在Java中,char类型用UTF-16编码描述一个代码单元
建议不要在程序中使用char类型,除非确实需要对UTF-16代码单元进行操作
转义字符:
\b 退格
\t 制表
\n 换行
\r 回车
\” 双引号
\ 反斜杠
boolean类型
false 和 true, 用来判定逻辑条件
整型值和布尔值之间不能进行相互转换
在Java中,所有的数值类型所占的字节数量与平台无关
变量名必须是一个以字母开头的,由字母和数字构成的序列
可以在一行中声明多个变量
例如:
int i,j;
不过,不提倡使用这种风格。逐一声明变量可以提高程序的可读性
声明一个变量之后,必须用赋值语句对变量进行显式初始化。千万不要使用未被初始化的变量。
在Java中,变量的声明尽可能地靠近第一次使用的地方。这是一种良好的编程风格
C++中区分变量的声明和定义。
例如:int i = 10;
这是定义一个变量,而
extern int i;
这是声明一个变量。
在Java中,不区分变量的声明和定义。
关键字final声明常量,表示这个常量只能被赋值一次。一旦被赋值之后,就不能再更改了。
习惯上,常量名使用大写。
可以使用关键字static final设置一个类常量。
例如:
public static final double CM_PER_INCH = 2.54;
需要注意,类常量的定义位于main方法的外部。因此,在同一个类中的其他方法也可以使用这个常量。而且,如果一个常量被声明为public,那么其他类的方法也可以使用这个常量。
前缀式 ++n
先进行加1运算,再使用变量n
后缀式 n++
先使用变量n,再进行加1运算
建议不要在其他表达式的内部使用++
Java提供了两个用于表示π和e常量的近似值
Math.PI
Math.E
当然,这需要 import static java.lang.Math.*;
数值类型之间的转换
虚线是可能有精度丢失的转换
强制类型转换(cast)
如果试图将一个数值从一种类型强制转换为另一种类型,而又超出了目标类型的表示范围,结果就会被截断成一个完全不同的值。
例如,(byte)300 的实际值是44。
还有运算符优先级,这个要清楚一下
标准Java类库中提供了一个类String。每个用双引号引起来的字符串都是String类的一个实例。
String e = "";
String greeting = "Hello";
子串 substring
String s = greeting.substring(0,3);
在substring中从0开始计算,直到3为止(从0到2)。但不包括3。
substring的优点:容易计算子串的长度。字符串substring(a,b)的长度为b-a。例如:greeting.substring(0,3)的长度为3-0 = 3。
拼接
Java中允许使用+号拼接两个字符
当将一个字符串和一个非字符串的值进行拼接时,后者会被传换成字符串
例如:
int age = 13;
String rating = "PG"+age;
rating得到“PG13”。
这种特性通常使用在输出语句中。
例如:
System.out.println("The answer is " + answer);
单词is后面加一个空格,也会输出。
不可变字符串
String类没有提供用于修改字符串的方法。
但是,不可变字符串却有一个优点:编译器可以让字符串共享
可以想象将各种字符串存放在公共的存储池中。字符串变量指向存储池中相应的位置。如果复制了一个字符串变量,原始字符串与复制的字符串共享相同的字符。
检测字符串是否相等,可以使用equals方法
想要检测两个字符串是否相等,而不区分大小写,可以使用equalsIgnoreCase方法
注意,一定不能使用==运算符来检测两个字符串是否相等!!!!
这个==运算符只能够确定两个字符串是不是放在同一个位置上。当然,如果字符串放置在同一个位置上,那它们肯定相等啦。
如果虚拟机始终将相同的字符串共享,就可以使用==检测是否相等。但是!但是,实际上只有字符串常量是共享的!只有字符串常量!而+或者substring等操作产生的结果并不是共享的。
C++的stirng类重载了==运算符方便检测字符串内容的相等,但是Java没有采用这种方式。
Java也可以使用compareTo方法检测是否相等
例如:
if(greeting.compareTo(“Hello”) == 0)…
不过,使用equals看起来更为清晰。
关于字符串的其他方法,就去查询API了。、
构建字符串
需要又较短的字符串构建字符串时,采用字符串连接的方式效率比较低。因为每次连接字符串,都会创建一个新的String对象,浪费空间和时间。
所以,应该使用StringBuilder类。
首先,构造一个新的字符串构造器:
StringBuilder builder = new StringBuilder();
当每次需要添加一部分内容时,就调用:
builder.append(ch);
builder.append(str);
在需要构建字符串时就调用toSting方法:
String completeString = builder.toString();
JDK5.0引入StringBuilder类,这个类的前身是StringBuffer,其效率略微有些低,但允许采用多线程的方式执行添加和删除字符的操作。如果所有字符串在一个单线程中编辑,则应该用StringBuiler代替它。
Java SE 5.0沿用了C语言库函数中的printf方法。
例如:
System.out.printf("Hello,%s. Next year, you’ll be %d", name, age);
每一个以%字符开始的格式说明符都用相应的参数替换。
可以使用静态的String.format方法创建一个格式化的字符串,而不打印出来:
String message = String.format("Hello, %s. Next year, you’ll be %d", name, age);
常见的转换符:
%d 十进制整型
%f 定点浮点型
%s 字符串
还有好多好多。。。
for(int i = 1; i <= 10; i++);
System.out.println(i);
与C++一样,尽管Java允许在for循环的各个部分放置任何表达式,但是for语句中的3个部分应该对同一个计数器变量进行初始化、检测和更新,提高可读性。
如果在for语句内部定义一个变量,则这个变量就不能在循环体外面使用。因此,如果希望在for循环之外使用循环计数器的最终值,这个变量就要在循环体外声明。
Java有一个与C/C++完全一样的switch语句。但是有可能触发多个case分支。如果在case分支语句的末尾没有break语句,那么就会接着执行下一个case分支。这种情况很危险,常常引发错误。所以,使用的时候要注意。
java.math包中有两个可以出来包含任意长度数字序列数值的类:BigInteger和B**igDecimal**。
BigInteger类实现了任意精度的整数运算
BigDecimal类实现了任意精度的浮点数运算
使用静态的valueOf方法可以将普通的数值转换成大数值
BigInteger a = BigInteger.valueOf(100);
但是!不能使用+或*等平时熟悉的运算符,而需要使用大数值类中的add和mulitiply
BigInteger c = a.add(b);// c = a + b
BigInteger d = c.mulitiply(b.add(BigInteger.valueOf(2))); // d=c*(b+2)
int[] a;
只声明变量a,并没有将a初始化。应该使用new运算符创建数组:
int[] a = new int[100];
可以利用Arrays类的toString方法,简单地打印数组中的值出来。
例如:
int[] a = {2,3,5,7,11,13};
System.out.println(Arrays.toString(a));
结果会显示为“[2,3,5,7,11,13]”
Java实际上没有多维数组,只有一维数组。多维数组被解释为”数组的数组”