Java基础知识(二):基础语法
本文为个人学习记录,内容学习自 狂神说Java
注释
-
单行注释(Line comment)
// 这是单行注释
-
多行注释(Block comment)
/* 这是多行注释 */
-
文档注释(JavaDoc)
/** * @Description HelloWorld * @Author victoria */
注意:文档注释不同于多行注释,其中的@+参数有其意义,可以用于JavaDoc生成对应的文档
关键字
常用关键字:
abstract | assert | boolean | break | byte |
---|---|---|---|---|
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implenments | import |
instanceof | int | interface | long | native |
new | package | private | protected | public |
return | strictfp | short | static | super |
switch | synchronized | this | throw | throws |
transient | try | void | volatile | while |
标识符
类名、变量名、方法名都被称为标识符
标识符注意点:
- 所有的标识符都应以字母(A-Z或者a-z)、美元符($)、下划线(_)开始
- 不能使用关键字
- 标识符严格区分大小写
数据类型
基本定义
Java 的数据类型分成两大类:基本类型(primitive type)和 引用类型(reference type)
八大基本数据类型:byte、short、int、long、float、double、char、boolean,不包括String!
在 Java 中若没有显式地指定整数类型,默认是int型;若没有显式地指定浮点数类型,默认是double型
byte num1 = 10;
short num2 = 20;
int num3 = 30; // int类型是最常用的整数类型
long num4 = 40L; // long类型要在数字后面加个l或者L,但使用l易与1混淆,因此最好用L
float num5 = 50.1f; // float类型要在数字后面加个f或者F
double num6 = 3.1415;
char name1 = 'A';
String name2 = "victoria"; // 注意两点:1.String不是关键字,是类;2.Java严格区分单引号和双引号,String应用双引号
boolean flag = true;
拓展内容
整数与进制:
- 十进制
- 二进制:以 0b 开头
- 八进制:以 0 开头
- 十六进制:以 0x 开头
浮点数的舍入误差:计算机采用二进制编码,而二进制无法准确表示所有的小数,会存在舍入误差,尽量避免使用浮点数进行数值比较!
常用转义字符:
转义字符 | 含义 |
---|---|
\t | 水平制表符 |
\n | 换行,将当前位置移到下一行开头 |
\r | 回车,将当前位置移到本行开头 |
\\ | 代表一个反斜杠 |
\0 | 空字符(NULL) |
类型转换
-
优先级:
低 -------------------------------------------> 高 byte, short, char -> int -> long -> float -> double
-
类型转换分成 强制类型转换 和 自动类型转换:
- 强制类型转换:将高优先级的变量赋值给低优先级的变量时,需要强制类型转换,格式:(类型)变量名
- 自动类型转换:将低优先级的变量赋值给高优先级的变量时,无需手动进行转换
int i = 100; byte j = (byte)i; // 优先级从高到低,需要强制类型转换 double k = i; // 优先级从低到高,无需手动类型转换
-
自动类型提升:
当byte、short和char参与运算时,由于本身范围比较小,为了避免数据溢出会自动提升为int类型再参与运算,因此有如下规则:
① 当参与运算的数据类型为byte、short、char时,输出的数据类型为int(例如byte + short -> int)
② 当参与运算的数据类型有更高级别的类型时,输出的数据类型为最高级别的类型(例如int + long -> long)
-
类型转换中的数据溢出问题:
int money = 1000000000; int years = 20; long total = money * years; // 乘法结果超出了int类型的范围,虽然在long类型的范围之内 System.out.println(total); // 但是输出结果仍为-1474836480,这是因为乘法之后仍是int类型,赋值前就发生了数据溢出
变量
变量的分类和作用域
- 类变量
- 实例变量
- 局部变量
public class demo {
// 属性
static double salary; // 类变量:从属于类,如果不初始化则为默认值,必须用static关键字修饰
String name; // 实例变量:从属于对象,如果不初始化则为默认值
// 默认值:数值型变量默认值为0,布尔值变量默认为false,其余所有类型默认值均为null
// main方法
public static void main(String[] args) {
int i = 10; // 局部变量:必须声明和初始化值,作用域仅为当前代码块内
}
}
类变量和实例变量的区别:二者的从属不同,根据下面的例子辅助理解:
public class demo1 {
// 属性
static double salary; // 类变量:从属于类
String name; // 实例变量:从属于对象
// main方法
public static void main(String[] args) {
System.out.println(salary); // 类变量能够在类的方法内直接被使用,此处可以正常输出
System.out.println(name); // 实例变量从属于对象,必须先声明对象后才能被使用,此处会报错
}
}
注意事项
- Java 是一种强类型语言,每个变量都必须声明其类型;
- 变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用域;
- 可以使用逗号隔开来声明多个同类型的变量
常量
常量的定义:使用final关键字修饰
final double PI = 3.14;
命名规范
- 变量:首字母小写 + 驼峰原则
- 常量:大写字母 + 下划线
- 类名:首字母大写 + 驼峰原则
- 方法名:首字母小写 + 驼峰原则
运算符
基本定义
- 算术运算符:+, -, *, /, %, ++, --
- 赋值运算符:=
- 关系运算符:>, <, >=, <=, ==, !=, instanceof
- 逻辑运算符:&&, ||, !
- 位运算符:&, |, ^, ~, >>, <<, >>>
- 条件运算符:? :
- 扩展赋值运算符:+=, -=, *=, /=
注意事项
-
整数除法
int a = 5; int b = 20; System.out.println(a/b); // 输出为 0
-
自增、自减运算(需要注意a也会被改变)
int a = 3; int b = a++; int c = ++a; System.out.println(a); // 输出为 5 System.out.println(b); // 输出为 3 System.out.println(c); // 输出为 5
-
短路运算
int a = 5; boolean b = (a<4) && (a++<4); // 由于 && 运算符需要同时为真才为真,(a<4)为false,则之后的(a++<4)将不会被计算 System.out.println(a); // 输出为 5
-
在 Java 中,只有布尔类型能参与逻辑运算符的运算,它不像 C 和 Python 会将零值视为false、非零值视为true
int a = 5; boolean b = false; boolean c = a && b; // 报错:运算符'&&'不能应用于'int'、'boolean'
-
左移运算符<< 和 右移运算符>>
System.out.println(2<<3); // 2左移3位,输出为16,左移1位等价于*2 System.out.println(16>>3); // 16右移3位,输出为2,右移1位等价于/2
注意:由于位运算符直接作用在二进制位上,效率很高,因此可以采用左移和右移来高效实现乘法和除法
-
使用 + 运算时,若操作数中包含 String 类型,则会将另一个操作数自动转换成 String 类型,然后进行拼接
int a = 10; int b = 20; System.out.println(""+a+b); // 输出为 1020 System.out.println(a+b+""); // 输出为 30
-
条件运算符
x ? y : z // 如果x为真,则结果为y,否则结果为z
包机制
- 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间
- 一般利用公司域名倒置作为包名,例如 com.baidu.www
生成包
在生成的包中新建 java 文件,文件开始会自带包名,这是IDEA帮我们自动生成的,该语句不可删除并且必须放在开头:
package com.baidu.www;
导入包中的类
-
导入单个类:
import java.util.Date;
-
导入包下所有的类(* 为通配符):
import java.util.*;
JavaDoc
文档注释
-
参数信息
- @author 作者名
- @version 版本号
- @since 指明最早可用的 JDK 版本
- @param 参数名
- @return 返回值情况
- @throws 异常抛出情况
-
示例:
/** * @author victoria * @version 1.0 * @since 1.8 */
JavaDoc 命令
-
JavaDoc 命令用于生成自己的API文档
-
示例:
javadoc demo.java javadoc -encoding UTF-8 -charset UTF-8 demo.java // 能够正常显示中文