Java 几大特性
- 简单性1. 面型对象2. 网络技能3. 健壮性4. 安全性5. 体系结构中立6. 可移植性7. 解释性8. 高性能9. 多线程10. 动态性
使用eclipse注意
有时候我们既想看Java中类库的源码,又想看说明文档,但是又不想只看英文说明文档
Java的基本程序设计结构
- 注释
- 数据类型
强类型语言:必须为每一个变量声明一种类型。
1. 整数
int 4字节 -2147 483 648~2147 483 647 (正好超过二十亿)
short 2字节 -32768~32767
long 8字节 -9 223 372 036 854 775 808~9 223 372 036 854 775 807
byte 1字节 -128~127
2. 浮点数
float 4字节(有效位数6~7位)
double 8字节(有效位数15位)
3. char类型(UTF-16)
表示单个字符。
Unicode编码表。
4. boolean类型(布尔类型)
强烈建议不使用char类型
false true
对于条件判断,必须最后转换为布尔型。
C++中。
if(x=0) // 可编译运行,结果总是false
Java中
if(x=0) // 不能通过编译,因为x=0 无法转换为布尔型。
float f = 3.14F; 没有后缀F的浮点数默认为double类型
double d = 3.14;//3.14D;
Java无unsigned无符号类型
int bitNum = 0b1111_1111_1111_1111_0000_0000_1111_0120;
int bitNum = 0xCAFEABCD;
long longNum = 40000000000000L;
**注意**
System.out.println(2.0-1.1); // 输出 0.8999999999999999
- 变量
Java中不区分变量的声明(declaration)和定义(defination)
注意
1. 变量声明尽可能靠近第一次使用。- 变量使用前必须初始化(可以声明时候也可以赋值方式)。
final int finalValue = 10;// 只能赋值一次,声明时赋值,一旦赋值不能修改。
- 运算符
Java
int a = 0;
int b = (a++) + (a++) + (++a); // 不推荐++ -- 参加内部运算,容易产生bug。
System.out.println(b); // 4
System.out.println(a); // 3
c++
int a=0;
cout << (a++) + (a++) + (++a) << '\n'; // 3 变态的C++
cout << a <<'\n'; // 输出3
位运算符
int n = 0xABCDEFBA;
int fourthBitFromRight = (n & 0b1000)/0b1000; // 整数在位模式下工作。
// 或者 (n & (1<<3))>>3
// fourthBitFromRight 为0或1
**关系运算**`&& 、|| 、 !=、>、
public class Test {
public static void main(String[] args) {
B b = new B();
A a = b;
if(a==b){
System.out.println("a==b"); // 即使用一个基类引用,照样指向相同的对象,依旧成立。
} else
System.out.println("a!=b");
Object object = new Object();
Object object2 = new Object();
if(object==object2)
System.out.println("Point to the same object!"); // 判断两个引用是否相等的本质是 这两个引用是否引用同一个对象。
}
}
class A{}
class B extends A{
public void putout(){
System.out.println("B");
}
}
- 字符串
// 空串是长度为0的字符串。
// null 是指当前引用没有指向(引用)任何对象。
String str = "";
if(str.length()==0) // 判断是否空串
if(str.equals("")) // 或者
if(str.length()==0 && str!=null) // 既不是空串也不是null
- 输入输出
Scanner in = new Scanner(System.in); // Scanner 一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。
// get first input
System.out.println("What is your name?");
String name = in.nextLine();
// get second input
System.out.print("How old are you?");
int age = in.nextInt();
System.out.println("Hello, " + name+ ". Next year, you will be " + (age+1));
String string = in.nextLine();
Vector<String> vec = new Vector<>(10);
while (!string.isEmpty()) {
vec.add(string);
string = in.nextLine();
}
for (String string2 : vec) {
System.out.println(string2);
}
- 控制流
char c = 123;
System.out.println(c); // {
System.out.println((byte)c); // 123
System.out.println((short)c); // 123
System.out.println((int)c); // 123
System.out.println((float)c); // 123.0
System.out.println((double)c); // 123.0
char c = 123; // 123 -> '{'
switch (c) {
case '{':
System.out.println("{");
case 122:
System.out.println(c);
break; // 如果省掉,输出 { { A
case 'a':
System.out.println("A");
break;
default:
break;
}
// 输出 { {
- 大数值
BigDecimal
- 数组
public static void main(String[] args) {
final int COLS = 7;
final int ROWS = 5;
int[][] arrays = new int[ROWS][COLS];
System.out.println(arrays.length); // 5
// 将 [A][B] A理解为“一维”元素类型,B理解为“元素类型是什么”<由A个长度为B的元素组成的向量>
for(int i=0; i<arrays.length; i++){
for(int j=0; j<arrays[i].length; j++){
arrays[i][j] = i*COLS + j;
}
}
System.out.println(Arrays.deepToString(arrays));
}
不规则数组
final int MAX = 5;
int[][] odds = new int[MAX+1][];
for (int i = 0; i < odds.length; i++) {
odds[i] = new int[i+1];
}
for (int i = 0; i < odds.length; i++) {
for (int j = 0; j < odds[i].length; j++) {
odds[i][j] = 1;
}
}
for (int[] is : odds) {
for(int i=0; i<is.length; i++)
System.out.print(is[i] + "\t");
System.out.println();
}