2.基础语法

一. 语法结构

img

1
2
3
4
5
public class Demo{
public static void main(String[] args) {
System.out.println("你好,java");
}
}

说明:

  • Demo :表示一个类,类名为 Demo,与文件名相同
  • public: 表示一个公有的类
  • public static void main:表示一个主方法,即程序的入口(固定写法)
  • System.out.println("你好,java"); : 表示输出到屏幕,“;”表示语句结束
  1. Java 语言严格区分大小写;
  2. 每个语句都必须以 “ ” 结束;
  3. 括号都是成对出现的;
  4. 一个源文件只能有 一个 public类,其他类的数量不限;
  5. 每一个类在编译完成后,都会生成一个 “ .class ” 文件
  6. 如果原文件包含 public 类,则文件名必须与 类名相同;

二. 常用的转义字符

字符说明案例运行结果
\t制表符System.out.println(“北京\t天津\t上海”);北京 天津 上海
\n换行符System.out.println(“北京\n天津\n上海”);北京天津上海
\\System.out.println(“北京\n天津\t上海”);北京\n天津\t上海
\”System.out.println(“\”北京\””);“北京”
\’System.out.println(“\’北京\’”);‘北京’
\r回车System.out.println(“北\r京”);

三. 注释

文档注释

Javadoc是Sun公司提供的一个技术,从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档

1
2
3
4
5
/**
* @author Pupper
* @version 1.0
* @......
*/
标签说明
@author作者
@version版本号
@return函数返回值
@see引用,查看相关的内容,如类,方法,变量等,必须顶头写
@throws构造函数或方法会抛出的异常
@param方法的参数

单行、多行注释

1
2
3
4
// 这是一段注释
/*
这是一段多行注释
*/

四、变量

1
2
3
4
int a;
a = 12;

int b = 3;
  1. 变量:表示内存中的一个存储区域

    1. 不同的变量,类型不同,占用的区域大小也不用
  2. 变量必须先声明,后使用

  3. 变量在同一个作用域内不能重名

五、+ 号的使用

  1. 当左右两边都是 数值 类型时,则做 加法运算
  2. 当左右两边有一方为 字符串 类型时,则做 拼接运算
1
2
3
4
5
6
7
8
9
10
public class demo01{
public static void main(String[] args) {
System.out.println(10 + 20);
System.out.println("10" + 20);
System.out.println(10 + "20");
}
}
30
1020
1020

六、数据类型

img

1. 整数(byte、short、int、long)

类型占用空间(字节)范围
byte(字节)1-128 ~ 127
short(短整型)2-215 ~ 215 - 1(-32768 ~ 32767)
int(整型)4-231 ~ 231 - 1(-2147483648 ~ 2147483647)
long(长整型)8-263 ~ 263 - 1
  1. 一般的整型变量 默认为 int 类型

    1. int a = 10;
  2. long 整型的写法 “ L” 一般为大写

    1. long a = 100L;
    2. 错误写法: int a = 100L;

2. 浮点型(flost、double)

类型占用空间(字节)范围
flost(单精度)4-3.403E38 ~ 3.403E38
double(双精度)8-1.798E308 ~ 1.798E308
  1. 浮点型常量默认为 double 类型

    1. 声明 flost 类型时,需要加 “F”
    2. flost a = 3.14F;
  2. double 的精度大于 flost 的精度,通常采用 double 类型

不要直接使用计算结果为小数的值进行判断,应该是以小数差值的绝对值,在某个精度范围内做判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class demo01{
public static void main(String[] args) {
double a = 2.7;
double b = 8.1 / 3;
if( a == b ){
System.out.println("相对");
}else if(Math.abs(a - b) < 0.000001){
System.out.println("绝对值的差值足够小,可以看做是相等的");
}else{
System.out.println(a);
System.out.println(b);
}
}
}

// 运行结果
绝对值的差值足够小,可以看做是相等的

3. 字符类型(char)

char 表示单个字符,多个字符时使用 String 类型

ASCII 码 :a : 97 A: 65

1
2
3
char a = 'a';
char b = '\t';
char c = '汉';
  1. 字符常量是用 单引号(’’)括起来的单个字符

    1. 不能使用 双引号(””),所有使用双引号的都表示字符串
  2. 可以直接给 char 赋一个整数,输出时会按照 unicode 编码 输出字符

4. 布尔型(boolean)

  1. boolean 类型 的数据只有 true 和 false
  2. 在运算符中,true 相当于 1, false 相当于 0

七. 基本类型转换

1. 自动类型转换

自动类型转换: 当 java 程序在进行赋值或运算时,精度小的类型自动转换为精度大的数据类型。

img

自动类型转换细节:

  1. 多种类型的数据混合运算时,系统会将所有数据转换成容量最大的数据类型,然后进行计算。
  2. 把精度大的数据类型赋值给精度小的数据类型时,会报错
  3. byte 、short 和 char 之间不能进行数据转换
  4. byte、short、char 三者在计算时,首先转换为 int 类型
  5. boolean 不参与转换
  6. 自动提升原则:表达式结果的类型自动提升为 操作数中最大的类型

2. 强制类型转换

强制类型转换: 将容量大的数据类型转换为容量小的数据类型

使用时需要加上 强制类型转换符(),可能会造成数据 精度降低溢出

1
2
3
4
5
6
7
8
// 精度降低
int i = (int)1.9;
System.out.println(i); // 1

// 数据溢出
int j = 130;
byte b1 = (byte)j;
System.out.println(b1); // -126
  1. 强转符号只对最近的操作数有效,可以使用小括号提升优先级
  2. char 类型可以保存 int 的常量值,不能保存 int 的变量值,需要强转
  3. byte 和 short 类型在进行运算时,当做 int 类型处理
1
2
3
4
5
int x = (int)10*3.5 + 6*1.5;
int y = (int)(10*3.5 + 6*1.5);

System.out.println(x); // 报错,flost 转 int 需要强转
System.out.println(y); // 44

八. 基本数据类型和 String 类型的转换

1. 基本类型转 String 类型

格式: 基本数据类型 + “”;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class StringToBasic {
public static void main(String[] args){
int n1 = 100;
float f1 = 1.1F;
double d1 = 4.1;
boolean b1 = true;

String s1 = n1 + "";
String s2 = f1 + "";
String s3 = d1 + "";
String s4 = b1 + "";

System.out.println(s1+s2+s3+s4); // 1001.14.1true
}
}

2. String 类型 转 基本数据类型

String 类型转基本类型,需要 包装类调用 parse 方法 即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class demo01{
public static void main(String[] args) {
String s1 = "123";
String s2 = "3.14";
String s3 = "true";

int n1 = Integer.parseInt(s1);
float f1 = Float.parseFloat(s2);
boolean c1 = Boolean.parseBoolean(s3);

System.out.println(n1); // 123
System.out.println(f1); // 3.14
System.out.println(c1); // true
}
}

九、运算符

1. 算术运算符

运算符说明案例结果
%取余11%92
++x自增:先运算后取值a = 2;b = ++a;a = 3, b = 3
x++自增:先取值后运算a = 2;b = ++a;a = 3, b = 2
—x自减: 先运算后取值a = 2; b = —a;a = 1; b = 1
x—自减: 先取值后运算a = 2; b = a—;a = 1; b = 2

2. 关系运算符

关系运算符的运算结果 为 true 和 false

运算符说明案例结果
instanceof检查是否是类的对象“hsp” instanceof Stringtrue

3. 逻辑运算符

短路 和 逻辑 的区别:

  • 短路:当第一个条件已经能够确定结果时,后边的语句将不再执行,代码执行效率高;
  • 逻辑: 不论第一个条件是否能确定结果,后边的语句会全部执行,代码执行效率低;
运算符说明规则
&逻辑: 与全真为真,一假全假
&&短路: 与全真为真,一假全假
\逻辑: 或一真为真,全假为假
\\短路: 或一真为真,全假为假
逻辑: 取反非真即假
^逻辑: 异或不同为真,相同为假
aba&ba&&ba\ba\\b!aa^b
truetruetruetruetruetruefalsefalse
truefalsefalsefalsetruetruefalsetrue
falsetruefalsefalsetruetruetruetrue
falsefalsefalsefalsefalsefalsetruefalse

4. 赋值运算符

符合运算符:

运算符说明
+=a += b,等价于 a = a + b;
-=a -= b,等价于 a = a - b;
*=a = b,等价于 a = a b;
/=a /= b,等价于 a = a / b;
%=a %= b,等价于 a = a % b;

复合赋值运算符在使用时,底层会进行强制类型转换

如:

byte a = 10;

a += 5; 相当于 a = (byte)(a + 5)

5. 三元运算符

语法:

条件表达式 ? 表达式 1 : 表达式 2

说明:

  1. 如果条件表达式结果为 true,运算后的结果是 表达式 1;
  2. 如果条件表达式结果为 false, 运算后的结果是 表达式 2;
1
2
3
4
5
6
7
8
public class Demo {
public static void main (String[] args){
int a = 10;
int b = 99;
int result = a > b ? a++ : b--;
System.out.println(result); // 99
}
}

十、标识符命名规范

命名包含:字母、数字、下划线,不能以字母开头

规范:

  • 包名: 多个单词组成时,所有字母都小写;
  • 类名、接口名: 多个单词组成时,所有单词的首字母大写;
  • 变量名、方法名: 首个单词的首字母小写,剩下的首字母都大写;
  • 常量: 所有字母都大写,单词之间以下划线连接;

十一、键盘输入语句

Scanner : 用于获取键盘输入语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 引入 scanner
import java.util.Scanner;

public class demo01{
public static void main(String[] args) {
// 创建 scanner 对象
Scanner myScanner = new Scanner(System.in);

// 使用相关关键字,接收用户输入
System.out.println("请输入姓名:");
String name = myScanner.next(); // 接收用户输入

System.out.println("请输入年龄:");
int age = myScanner.nextInt();

System.out.println("请输入身高:");
double height = myScanner.nextDouble();

System.out.println("姓名:" + name + ",年龄:" + age + ", 身高:" + height);

}
}

十二、 位运算

符号说明规则案例
>>向右位移低位溢出,符号位不变,用符号位补溢出的高位img
<<向左位移符号位不变,低为补 0img
>>>算术右移低位溢出,高位补 0img
~按位取反1 变 0,0变 1img
&按位与全为 1,结果为 1,否则为 0img
\按位或一为 1,结果为 1,否则为 0img
^按位异或1、0 各一个,结果为 1,否则为 0img

https://player.bilibili.com/player.html?bvid=BV1fh411y7R8&p=100&page=100&t=229.5

原码、反码、补码

  1. 二进制的最高位(最左边的位数)是符号位: 0 表示正数,1 表示负数
  2. 正数的原码、反码、补码都一样;
  3. 负数的反码 = 原码符号位不变,其他位取反;
  4. 负数的补码 = 反码 +1, 负数的反码 = 负数的补码 +1
  5. 0 的反码、补码都是 0
  6. 计算机在运算时,都是以补码的方式运算的
  7. 查看运算结果时,要看他的原码