1. 安装JDK5.0后,(J2SE5.0)后,可以使用printf()方法了。与C语言类似!
2. 注释有三种:单行注释,多行注释,归档注释。但多行注释不能嵌套。仔细分析就可知道!归档注释是一种专用注释;当它放在类或类成员声明之前时,javadoc工具可以提取出这些注释并用它们来生成程序的HTML文档。归档注释通常放在类、接口、方法及字段定义之前。归档注释中可以使用几组特殊标记以提供更为特定的信息。这种注释从/**开始,至*/结束。
3. 元数据类型值并不是对象。
a) 整型:
i. 有符号整数:byte(8)short(16)int(32)long(64)
ii. 无符号字符值:char(16)
b) 浮点型:float(32) double(64)
c) 布尔型:boolean(不可用)
4. 在J2SE5.0中,可以使用java.util.Scanner类取得使用者的输入。
例:
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("please input your name:");
System.out.printf("Hello! %s!",scanner.next());
}
}
5. 也可以使用java.io.BufferedReader类输入一个中间有空格的字符串!
例:
import java.io.*;
public class BufferedReaderDemo {
//public BufferedReaderDemo() {
//}
public static void main(String[] args) throws IOException{
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));
System.out.print("please input a list words,can include blank:");
String text=bufferedReader.readLine();
System.out.println("Your words:"+text);
}
}
6. %n与/n有什么不一样? /n在print,println,printf中都是换行的作用。而%n只有在printf是换行的作用!
7. 区别throw ,throws
8. 区别print,println,printf:::
9. 输出格式控制:java.lang.Integer中toBinaryString()转为二进制-toHexString()转为十六进制-toOctalString()转为八进制
10. 输出格式转换字符:%d(十进制整数)%o(八进制)%x(十六进制)%n(换行)%f(十进制浮点数)%e%E(十进制浮点数科学记数法)%s%S(字符串格式化输出)%c%C(字符方式输出)%b%B(将true或false输出)%t%T(输出日期/时间的前置)
11. 在java中,一个中文字与一个英文字母都是用一个字符来表示。
12. 常数变量(A_B)即定义之后就不能再改变它的值了。用final关键词来限定!
13. 将精度大的值指定给精度小的变量时,精度有损失,是一个错误!!要对就要加上转换的限定符!如:testInteger=(int) testDouble ;
14. “+” 这个连接符?可以用于字符串的串联。
15. 一个用位运算判断是否为奇数的好例子:
import java.util.Scanner;
public class bitwiseOperator {
public static void main(String[] args)
{
Scanner scanner=new Scanner(System.in);
System.out.println("please input digital:");
int number=scanner.nextInt();
//System.out.println("Is it a odd number?/n"+((number&1)!=0?"YES":"NO"));
System.out.printf("Is it a odd number?%n"+((number&1)!=0?"YES":"NO"));
}
}
原理:奇数的数值若以二进制来表示,其最右边的位必为1,而偶数最右边的位必为0.所以使用1(00000001)与输入的数做AND运算!结果可想而知!(自己分析!)
16. 二元移位运算符在构造新值时,会分别对这两个操作数运用一元数值升级。返回值的类型将是左侧操作数升级后的类型。
17. 移位距离的计算是对右侧操作数和一个掩码求AND:如果左侧操作数升级后的类型为int,则这个掩码为0x1f(31);如果左侧操作数升级后的类型为long,则使用掩码0x3f(63).
18. 也就是说,一个int型数45=45<<32=45>>32. int型的移位轮回为31(00011111),而long型的移位轮回为63(00111111).
19. new运算符用于创建对象,对象也就是类实例或数组。
20. 二元布尔中缀运算符instanceof用于测试对象的类型。
21. do{…………}while(条件式);注意这里是有分号的!
22. break 和continue还可以配合标签使用。这是新的用法,可以学学!!下面用一个例子说明问题。
public class BreakTest {
public static void main(String[] args)
{
back:
{
for(int i=0;i<10;i++)
{
if(i==9)
{
System.out.println("break");
break back;
}
}
System.out.println("test");
}
System.out.println("success");
}
}
输出的结果为:break
success
说明什么自己分析吧!System.out.println("test");也被break了。因为它在back中了。
例子2:(continue)
public class ContiuneTest {
public static void main(String[] args)
{
back1:
for(int i=0;i<10;i++)
{
back2:
for(int j=0;j<10;j++)
{
if(j==9)
{
continue back2;
}
}
System.out.println("test");
}
System.out.println("success");
}
}
这种情况下是System.out.println("test");将会被执行10次。还有一种情况是continue back1.这时 System.out.println("test");不会被执行!
23. 在java中字符串就是对象。是java.lang.String类的一个实例。仔细想想看!!!
24. 基本数据(primitive)类型的自动装箱(autoboxing)、拆箱(unboxing)是J2SE5.0提供的新功能。
25. 由第3条可知,int/boolen/byte/short/char/long/float/double等基本数据类型不是对象。而对应的打包类型(wrapper types)Integer/Boolen/Byte/Short/Character/Long/Float/Double声明的变量是对象。
26. 看下面一个例子:
public class AutoBoxDemo2{
public static void main(String[] args){
Integer i1=100;
Integer i2=100;
if(i1==i2)
System.out.println("i1==i2");
else
System.out.println("i1!=i2");
}
}
输出结果为:i1==i2
public class AutoBoxDemo3{
public static void main(String[] args){
Integer i1=200;
Integer i2=200;
if(i1==i2)
System.out.println("i1==i2");
else
System.out.println("i1!=i2");
}
}
输出结果为:i1!=i2
原因:“==”是用来比较两个基本数据类型的变量值是否相等。事实上“==”也用于判断两个对象变量名称是否参考至同一个对象。
在自动装箱时对于值从-128到127之间的值。它们被装箱为Integer对象后,会存在内存中被重用,所以第一种情况中使用==进行比较时,i1与i2实际上参考至同一个对象。如果超过了从-128到127之间的值。被装箱后的Integer对象并不会被重用。即相当于每次装箱时都新建了一个Integer对象,所以第二种情况使用==进行比较时,i1与i2参考的是不同的对象。
所以不要过分信赖自动装箱与拆箱。必须知道基本数据类型与对象的差异。请看下面的一个例子:这样的写法可以放心一点,不是吗?
public class AutoBoxDemo3{
public static void main(String[] args){
Integer i1=200;
Integer i2=200;
if(i1.euqals(i2))
System.out.println("i1==i2");
else
System.out.println("i1!=i2");
}
}
输出结果为:i1==i2
27. 当定义一个数组时,也就是生成了一个数组对象,将数组当作对象 来操作,比传统上的一些程序语言只将数组当作数据群组多了不少好处。
28. 数组元素初始值:
数据类型 | byte | short | int | long | float | double | char | boolean |
初始值 | 0 | 0 | 0 | 0L | 0.0f | 0.0d | /u0000 | false |
29. 在存取数组元素时。如果指定的索引值超出数组范围时会发生:ArrayIndexOutOfBoundsException异常。如果不处理这个异常,程序将会终止。
30. 在二维数组中的length的意义:数组名后直接加上length(arr.length)所指的是有几行(Row);指定索引后加上length(arr[0].length)所指的是该行所拥有的元素,也就是列(Column)数目。
31. 不规则数组:每个维度的长度可以不相同的数组。(java中存在不规则数组。)
32. 在java中。“=“运算用于基本数据类型时,是将值复制给变量,但当它用于对象时,则是将对象指定给参考引用名称来参考引用。
33. J2SE 5.0新增了foreach语法:foreach语法如下:
For(type element : array)
{
System.out.println(element).............
}
每一次从array中取出的元素,会自动设定给element,您不用自行判断是否超出了数组的长度,注意element的类型必须与数组元素的类型相同。
下面的例子是一个二维数组的例子。
public class ForeachTest
{
public static void main(String[] args)
{
int [][] arr ={{1,2,3},{4,5,6},{7,8,9}};
for(int[ ] row : arr)
{
for(int element : row)
{
System.out.print(element);
}
}
}
}
34. 字条串的本质是(char)类型的数组,在java中则将字符串视为String类的一个实例,也就是将其视为存在于程序之中的对象。
35. 注意字符串的直接指定必须使用““来包括文字,字符串的每个字符是使用Unicode字符来构建的。
36. 将字符串分解为数值类型:
方法 | 说明 |
Byte.parseByte() | 将字符串分解为位 |
Short.parseShort() | 将字符串分解为short整数 |
Integer.parseInteger() | 将字符串分解为int整数 |
Long.parseLong() | 将字符串分解为long整数 |
Float.parseFloat() | 将字符串分解为float整数 |
Double.parseDouble() | 将字符串分解为double整数 |
37. 如果字符串无法分解为指定的数据类型数值。则会发生NumberFormatException异常。
38. 基本数据类型的声明方式声明字符串:String str=”caterpillar”;
配置对象的声明方式声明字符串: String str=new String(“caterpillar”);
39. 在java中,一个字符串对象一旦被配置,它的内容就是固定不可变的。
40. 看这个例子:
public class TrueTest{
public static void main(String[] args){
//Integer i1=200;
//Integer i2=200;
String i1="string";
String i2="string";
String i3=new String("string");
String i4=new String("string");
/*if(i1==i2)
System.out.println("i1==i2");
else
System.out.println("i1!=i2");
*/
System.out.println(i1==i2); //true
System.out.println(i3==i4); //false
//System.out.println(i1+i2);
}
}
为什么会这样呢?
在java中,使用“=”将一个字符串对象指定给一个变量名称,其意义为改变该名称所引用的对象,原来被引用的字符串对象若没有其他名称来引用它,就会在适当的时候被java的“垃圾回收”(GARBAGE COLLECTION)机制回收。
这是显示了<38>中两种声明方式的不同。日后仔细考虑一下。
41. “+”(串联字符串)会产生一个新的string实例。
42. “+”没有StringBuilder中的append方法效率高。
43. 在编写主程序时,在main()的参数中编写String[] args,目的就是用来接受一个字符串数组。
44. 在eclipse中,怎样运行带参数的程序。——这个我知道了!
45. 分离字符串: String 中 split()函数。
46. 正则表达式(Regular Expression)相关信息在:java.util.regex.Pattern类中。
47. 正则表达式中字符对比符号:
方法 | 说明 |
. | 符合任一字符 |
/d | 符合0---9任一个数字字符 |
/D | 符合0---9以外的字符 |
/s | 符合/t,/n,/x0B,/f,/r等空格符 |
/w | 符合a---z,A---Z,0---9等字符,也就是数字或是字母都符合 |
/W | 符合a---z,A---Z,0---9等之外的字符,也就是除数字与字母外都符合 |
48. 正则表达式中字符类范例:
范例 | 作用 |
[abc] | 符合a、b或c |
[^abc] | 符合a或b或c之外的字符 |
[a-zA-Z] | 符合a—z或者是A-Z的字符 |
[a-d[m-p]] | a—d或者是m—p,也可以是[a-dm-p] |
[a-z&&[def]] | a—z并且是d或e或f,结果就是d或e或f可以符合 |
[a-z&&[^bc]] | a—z并且不是b或c |
[a-z&&[^m-p]] | a—z并且不是m—p |
49. 指定一个字符之外,也可以加上“贪婪量词”(Greedy Quantifiers)来指定字符可能出现的次数。下面是Greedy Quantifiers table
范例 | 作用 |
X? | X可出现一次或完全没有 |
X* | X可出现零次或多次 |
X+ | X可出现一次或多次 |
X{n} | X可出现n次 |
X{n,} | X可出现至少n次 |
X{n,m} | X可出现至少n次,但不超过m次 |
50. 正则表达式的设计是一门学问。现在没有必要过多的学习