JavaSE基础语法
一 注释
注释是写给人看的,一定要多写注释,注释包含了你对自己写的代码的介绍和理解。
1. 单行注释
// 这是一行注释
2. 多行注释
/*
多行注释
多行注释
*/
3. 文档注释
/**
* @Description 文档注释
* Author Coder
*/
二 标识符
必须使用 $ 或 _ 或字母开头,不能使用关键字!
百度百科:Java关键字
String _a = "Hello"; // 合法
String $A = "Hi"; // 合法
String a = "nihao"; // 合法
String _1a = "good"; // 合法
// String 1a = "error"; 报错,标识符以数字开头不合法!
// String public = "error"; 报错,不能使用关键字!
三 数据类型-强类型语言
要求变量的使用必须严格符合规定,所有的变量都必须先定义并声明类型后才能使用!
1. 基本类型
Primitive type,包括数值类型和boolean类型。
数值类型
- 整数类型
- byte,占一个字节,-27~27-1
- short,占两个字节,-215~215-1
- int,占四个字节,-231~231-1
- long,占八个字节,-263~263-1
- 浮点类型
- float,占四个字节
- double,占八个字节
- 字符类型
- char,占两个字节
布尔类型
boolean,占一位,值只有 true 和 false
2. 引用类型
Reference type,包括类、数组、接口。
public class Demo02 {
public static void main(String[] args) {
// 八大数据类型
// 整数
byte a = 10;
short b = 100;
int c = 10000;
long d = 100000L; // long类型要在数字后面加 L
// 小数
float e = 50.1F; // float类型要在后面加F
double f = 3.14159265358979;
// 字符类型
char name = '朱';
// 字符串 String不是关键字,是一个类
String name2 = "CoderZb";
// 布尔值
boolean flag = true;
boolean flag1 = false;
}
}
四 数据类型拓展
public class Demo {
public static void main(String[] args) {
// 整数拓展 二进制0b 八进制0 十六进制0x
int i = 10;
int i2 = 010;
int i3 = 0x10;
int i4 = 0b10;
System.out.println(i); // 10
System.out.println(i2); // 8
System.out.println(i3); // 16
System.out.println(i4); // 2
System.out.println("==============================");
// 浮点数拓展,银行业务如何表示,钱 BigDecimal
// float double
// float 存在舍入误差,接近但不等于
// 最好完全避免使用浮点数进行比较
// 最好完全避免使用浮点数进行比较
// 最好完全避免使用浮点数进行比较
float f = 0.1f;
double d = 1.0/10;
System.out.println(f==d); // false
System.out.println(f); // 0.1
System.out.println(d); // 0.1
float m1 = 2342635453235f;
float m2 = m1 + 1;
System.out.println(m1 == m2); // true
System.out.println("==============================");
// 字符拓展
char c1 = 'a';
char c2 = '朱';
System.out.println((int)c1); //97
System.out.println((int)c2); // 26417
// 所有的字符本质还是数字,编码问题
char c3 = '\u0061';
System.out.println(c3); // a
// 转义字符
// \t制表符 \n换行 \'单引号 \"双引号 \\反斜线
System.out.println("Hello\tWorld");
System.out.println("==============================");
// String 对象和变量
String str1 = new String("Hello World");
String str2 = new String("Hello World");
System.out.println(str1 == str2); // false
String str3 = "Hello World";
String str4 = "Hello World";
System.out.println(str3 == str4); // true
// Boolean 拓展 Less is More! 代码要精简!
boolean flag = true;
if (flag){} // 老手
if (flag == true){} // 新手
}
}
五 类型转换
容量从低到高:
byte、char、short、int、long、float、double
注意:byte、char、short 三种类型互相或自身运算,结果是 int。
1. 自动转换
将低容量的数据转换成高容量的。
int i = 128;
double j = i;
System.out.println(j); // 128.0
2. 强制转换
将高容量的数据转换成低容量的。
int i = 128;
byte j = (byte)i; // 容量不够,内存溢出
System.out.println(j); // -128,出现问题
3. 字符转换
char c = 'a';
int d = c + 1;
System.out.println(d); // 98
System.out.println((char)d); // b
4. 注意点
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干的类型
- 高容量转换到低容量,使用强制转换
- 转换的时候可能会存在内存溢出,或者精度问题!
System.out.println((int)23.7); // 23
System.out.println((int)-45.89f); // -45
六 变量和常量
变量大致分为三种:类变量、实例变量、局部变量
1. 类变量
类变量,修饰符 static,可以在类的方法内直接调用
2. 实例变量
在类的内部、类的方法外部定义的变量。
通过 new 创建对象的实例,再进行访问。
3. 局部变量
在类的方法内部定义的变量,必须进行初始化!!!方法外部无法访问。
public class Demo08 {
// 类变量 static
static double salary = 2500;
// 属性: 变量
// 实例变量:从属于对象,在方法外部,不初始化,数值默认值为 0
// 布尔值默认是 false
// 除了基本类型,其余的默认值都是 null
String name;
int age;
// main方法
public static void main(String[] args) {
// 局部变量; 必须声明和初始化值
int i = 100;
System.out.println(i);
Demo08 demo08 = new Demo08();
System.out.println(demo08.age); // 0
System.out.println(demo08.name); // null
System.out.println(salary); // 2500.0
}
// 其他方法
public void add() {
//System.out.println(i); // 无法访问局部变量
}
}
4. 常量
通过修饰符 final 定义,一经定义,不再更改。
注意:final、static、public 之类的都属于修饰符,无先后顺序;
但是,int、double 之类的属于数据类型,必须写在变量前面。
七 运算符
- 数值运算符
加+、减-、乘*、除/、取余%
注意:public class Demo02 { public static void main(String[] args) { long a = 12372130793212L; int b = 123; short c = 10; byte d = 8; // 有一个变量是 double,得到的结果就是 double类型 // 有一个变量是 long,得到的结果就是 long // 变量都是 short、byte,得到的结果是 int System.out.println(a+b+c+d); // long System.out.println(b+c+d); // int System.out.println(c+d); // int System.out.println(10&3); // 1 } }
- 偷懒运算符
a += b; // a = a + b; a *= b; // a = a * b;
- 自增++、自减–
public class Demo04 { public static void main(String[] args) { // ++ -- 自增,自减 int a = 10; int b = a++; // 本质:1.b=a; 2.a=a+1; 结束后 a=11, b=11 int c = ++a; // 本质:1.a=a+1; 2.c=a; 结束后 a=12, c=12 System.out.println(a); // 12 System.out.println(b); // 10 System.out.println(c); // 12 } }
- 关系运算符
<、>、是否相等==、是否不等!=、instanceofpublic class Demo03 { public static void main(String[] args) { // 关系运算符的结果:正确、错误 int a = 10; int b = 20; int c = 3; System.out.println(a>b); // false System.out.println(a<b); // true System.out.println(a==b); // false System.out.println(a!=b); // true System.out.println(b%c); } }
- 逻辑运算符
与and&&、或or||、非not !// 逻辑运算符 public class Demo05 { public static void main(String[] args) { // &&与and ||或or !非not boolean a = true; boolean b = false; System.out.println(a&&b); // false System.out.println(a||b); // true System.out.println(!a); // false // 短路运算 int c = 5; // c<4不成立,&&之后的代码直接忽略 boolean d = (c<4) && (c++<5); System.out.println(d); // false System.out.println(c); // 5 } }
- 位运算符
按位与&、按位或|、按位异或^、取反~、左移<<、右移>>public class Demo06 { public static void main(String[] args) { /* A = 0100 1001 B = 1010 0101 A&B = 0000 0001 按位与,只有都为1,结果才为1,否则为0 A|B = 1110 1101 按位或,只要有一个为1,结果就是1,没有1就是0 A^B = 1110 1100 按位异或,两个相等,结果为0;不等,结果为1 ~A = 1011 0110 取反,1变为0,0变为1 位运算 左移<<相当于*2 右移>>相当于/2 2<<3 = 16 0000 0010 << 3 => 0001 0000 */ System.out.println(2<<3); // 16 } }
- 三元运算符
public class Demo08 { public static void main(String[] args) { // 三元运算 // x?y:z // 如果x为true,结果为y,否则结果为z int score = 20; String level = score < 60 ? "不及格" : "及格"; System.out.println(level); // 不及格 } }