04:Java基础语法 || 牢固的地基终将铸就高楼大厦
Java基础语法
在Java开发的过程中,无规矩不成方圆,所有的规约都是为了代码的易读性,参考阿里巴巴开发手册。
为了方便管理,可以将所有Java代码都放在一个项目下面,步骤如下:
-
新建空项目
File->New->Project->Empty Project

结果如下图:

-
新建一个模块
File->New Module->Java



-
项目结构






-
右键新建类,开始编写代码

-
运行成功,环境搭建成功
一、注释
书写注释是一个非常好的习惯,注释不会执行,只会给写代码的人看,注释总共有三种:
-
单行注释
一行注释
-
多行注释
可以注释多行
-
文档注释
见JavaDoc
1. 单行注释
// 注释内容:使用//开头,同一行后边的东西会被注释掉

2. 多行注释
/* 注释内容 */ : 使用 /* 开头,加注释内容,使用 */ 结尾

3. 文档注释
/** 开头,*/ 结尾,中间可以加参数。
JavaDoc:文档注释

4. 有趣的代码注释


二、标识符
类名、方法名、变量名等
-
类名:

-
方法名

-
变量名:

注意:
- 所有的标识符都应以字母(A-Z,a-z)、美元符($)、下划线(_)开始。
- 首字母之后可以是:字母(A-Z,a-z)、美元符($)、下划线(_)或数字的任意组合。
- 不能使用关键字作为变量名或方法名。
- 标识符是大小写十分敏感的!
- 可以使用中文命名,但是很LOW,也不建议用拼音。
三、关键字
关键字并不多,大概如下:

四、数据类型
Java是强类型语言,要求变量的使用要严格符合规定,所有变量要先定义后使用,安全性高但处理速度会降低
1. 数据类型

2. 字节,位,字符

五、类型转换

注意点:
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干的类型
- 把大容量转换为低容量的时候强制转换,反之自动转换
- 转换的时候可能存在内存溢出,或者精度问题
public class Demo04 {
public static void main(String[] args) {
int i = 128;
//强制转换: (类型)变量名 从高转到低
byte b = (byte) i;//内存溢出
//自动转化 低到高
double c = i;
System.out.println(i); //128
System.out.println(b); //-128
System.out.println((int)23.7); //23
System.out.println((int) -45.89f); //-45
char c1 = 'a';
int d = c1 + 1;
System.out.println(d); //98
System.out.println((char) d); //b
}
}
import javax.crypto.spec.PSource;
public class Demo06 {
public static void main(String[] args) {
//操作比较大的数的时候,注意溢出问题、
//Jdk7 新特性,数字之间可以用下划线分割
int money = 10_0000_0000;
System.out.println(money);
int years = 20;
int total = money*years;// 计算的时候溢出了 -1474836480
System.out.println(total);
long total2 = money*years; //还是不行,默认是int ,会先计算出结果,再转换为long,
// 转换之前已经存在问题了 -1474836480
long total3 = money*((long)years); //先把一个数转换为long
System.out.println(total2);
// L l long的大小写是没区别的,但是在代码中小写的l和1容易混淆,所以常用大些的L
}
}
六、变量、常量
1. 变量

public class Demo07 {
public static void main(String[] args) {
// int a = 1,b = 2, c = 3; //不推荐使用,要保持程序的可读性
String name = "DearLiu";
char x = 'X';
double pi = 3.14;
}
}

- 类变量 :
需要加static - 实例变量 :
没有static - 局部变量:
在方法里面
public class Demo08 {
//类里面除了方法,还能定义属性(变量)
//实例变量:在类里面,方法外面,从属于对象,不用初始化
//默认值是 0 0.0
//布尔值的默认值是false
//除了基本类型,其余的默认值都是null
String name;
int age;
//类变量 static 存属于类,随类消失而消失
static double salary = 2500;
//主程序方法 main方法
public static void main(String[] args) {
//局部变量;使用之前必须声明和初始化值
int i = 10; //i 只能在main方法里使用
System.out.println(i);
//实例对象的使用
//变量类型 变量名字 = new Demo08();
Demo08 demo08 = new Demo08();
//如果不自行初始化,会输出这个类型的默认值
System.out.println(demo08.age);
System.out.println(demo08.name);
//类变量 可以直接输出
System.out.println(salary);
}
//其他方法
public void add(){
}
}
2. 常量

public class Demo09 {
//修饰符,不存在先后顺序
static final double PI = 3.14;
final static double PI1 = 3.14;
public static void main(String[] args) {
System.out.println(PI);
System.out.println(PI1);
}
}
3. 重点:变量的命名规则

七、运算符
Java里面的等于用“==”判断
优先级:()里的先执行

1. 算数运算符和赋值运算符
package operactor;
public class Demo01 {
public static void main(String[] args) {
// 二元运算符
// Ctrl + D : 复制当前行到下一行
int a = 10;
int b = 20;
int c = 25;
int d = 25;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/(double)b);//注意作用范围 不然会直接丢掉小数
}
}
package operactor;
public class Demo02 {
public static void main(String[] args) {
long a = 121212121212121L;
int b = 123;
short c = 10;
byte d = 8;
//取余 又叫模运算
System.out.println(c%a);// 21 / 10 = 2 ... 1
System.out.println(a+b+c+d);//Long
System.out.println(b+c+d);//Int
System.out.println(c+d);//Int cast:转换
}
}
2. 关系运算符
package operactor;
public class Demo03 {
public static void main(String[] args) {
//关系运算符返回的结果:正确,错误 为布尔值
int a = 10;
int b = 20;
int c = 21;
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a==b);
System.out.println(a!=b);
}
}
3. 自增,自减运算符
package operactor;
public class Demo04 {
public static void main(String[] args) {
// ++ -- 自增 自减 一元运算符
int a = 3;
int b = a++; //a++ 执行这行代码后,先给b赋值,再自增 b=3
// a = a + 1 //a =4
System.out.println(a);//4
// a = a + 1 //a = 5
int c = ++a; //++a 执行这行代码前,先自增,再给b赋值 c = 5
System.out.println(a);//5
System.out.println(b);//3
System.out.println(c);//5
//幂运算 2^3 = 2*2*2 = 8 很多运算 会使用一些工具类来操作
double pow = Math.pow(2,3);
System.out.println(pow); //8
}
}
4. 逻辑运算符
package operactor;
//逻辑运算符
public class Demo05 {
public static void main(String[] args) {
//与(and) 或(or) 非(取反)
boolean a = true;
boolean b = false;
System.out.println("a && b:" + (a && b));//逻辑与运算:两个都为真 结果为真
System.out.println("a || b:" + (a || b));//逻辑或运算:两个都为假 结果为假
System.out.println("! (a && b):" + !(a && b));//如果为真 则为假 如果为假 则为真
//短路运算
int c = 5;
boolean d = (c<4)&&(c++<4);
System.out.println(d);//false
System.out.println(c);//5 因此当与前面为错的时候,后边不会执行
}
}
5. 位运算符
package operactor;
//位运算符
public class Demo06 {
/*
A = 0011 1100
B = 0000 1101
A&B 0000 1100 (都为1才为1 有0则为0)
A|B 0011 1101 (都为0才为0 有1则为1)
A^B 0011 0001 (相同为0 相反为1)
~B 1111 0010 (取反)
面试题:
2*8 怎么运算最快 2 * 2 * 2 * 2
位运算 效率 极其的高
<<左移 相当于把数字 *2
>>右移 相当于把数字 /2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
*/
public static void main(String[] args) {
System.out.println(2<<3);
}
}
6. 条件运算符(三元运算符)
package operactor;
//三元运算符
public class Demo08 {
public static void main(String[] args) {
//x ? y : z
//如果x == true,则结果为y,否则为z
int score = 80;
String type = score < 60 ? "不及格" : "及格";
System.out.println(type); //及格
}
}
7. 扩展赋值运算符
package operactor;
//扩展赋值运算符
public class Demo07 {
public static void main(String[] args) {
int a = 10;
int b = 20;
a+=b;//a = a + b a = 30
a-=b;//a = a - b a = 10
System.out.println(a); //10
//字符串连接符 + , String 会把其他的都转换成字符串 拼接起来
System.out.println("" + a + b); //"10"+"20" 1020
//这两个结果有什区别:
System.out.println("" + a + b); //1020 先拼接 后运算
System.out.println(a + b + ""); //30 先运算 后拼接
}
}
八、包机制、JavaDoc
1. 包机制

-
包的本质就是一个文件夹
-
包名是有规范的 比如www.baidu.com,包名就是:com.baidu.www


-
在包里面建的类会自动把包路径导入

-
使用其他包的东西,需要导入,但是包里面的类名还是不要重复

-
“ * ”为通配符,可以直接导入同一个包下所有类

2. JavaDoc
Javadoc命令是用来生成自己的注释文档的。

1. 生成步骤方法一:使用控制台javadoc命令
- idea选择

-
在代码路径下进入控制台

-
输入javadoc 文件名

-
回车出结果

会发现在目录下会出现一大堆东西:

需要关注这个index.html

-
点击 会发现文档已经生成

2. 生成步骤方法二:IDEA直接生成
-
在IDEA中点击 Tools > Generate javadoc:

-
进入进行选择

内容解释:
Whole project:整个项目都生成文档
Custom scope: 自定义范围。
include JDK and … : 包含jdk和其他的第三方jar
link to JDK documentation…: 链接到JDK api
output directy :生成的文档存放的位置
private、package、protected、public :生成文档的级别(类和方法)
Generate…:是选择生成的文档包含的内容,层级树、导航、索引…
Generate右边的@:是生成的文档包含的内容信息,作者版本等信息
Locale :语言类型,zh-CN 或者不填
Other command line arguments: 其他参数
Maximum heep… :最大堆栈建议使用UTF-8编码、否则会出现中文乱码: -encoding UTF-8 -charset UTF-8
————————————————
版权声明:本文为CSDN博主「喜欢吃绝味鸭脖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42658739/article/details/102531538 -
点击ok,等待结束

-
文件目录下,点击index.html查看


3. 帮助:JDK8帮助文档
链接:JDK8帮助文档

重点:数据类型拓展及面试题讲解
代码调试步骤:
-
在要调试的代码行前点击,出现红点

-
点击调试

-
进行下一步,运行下一步代码

1. 整数拓展
//整数拓展:进制 二进制:0b 十进制 八进制:0 十六进制:0x
int i = 10;
int i1 = 010; //八进制0
int i2 = 0x10; //十六进制0x 0-9 A-F
System.out.println(i);
System.out.println(i1);
System.out.println(i2);

2. 浮点数拓展
//浮点数拓展 银行业务怎么表示? BigDecimal 数学工具类 用它来比较
//浮点数是有限离散的 它只是接近但不等于
// 最好完全避免使用浮点数进行比较
float f = 0.1F;
double d = 1.0/10;
System.out.println(f == d);
float d1 = 2112131321f;
float d2 = d1 + 1;
System.out.println(d1 == d2);

3. 转义字符
//转义字符
// \t 制表符
// \n 换行符
//...

4. 字符串比较
System.out.println("------------");
String sa = new String("HelloWorld!");
String sb = new String("HelloWorld!");
System.out.println(sa == sb);
String sc = "HelloWorld!";
String sd = "HelloWorld!";
System.out.println(sc == sd);
//从内存分析 是不一样的

5. 布尔值拓展
//布尔值扩展
boolean flag = true;
if (flag == true){}//新手
if (flag){}//老手
//Less is more!代码要精简宜读。

浙公网安备 33010602011771号