Java基础语法
一、注释、标识符、关键字
1.注释
单行注释://
多行注释:/* */ (快捷键:选中多行按Ctrl+/)
文档注释:/** */ (里面可以加参数等,可以被识别,例如:@author 面具人,后面会有专门的说明。)
2.标识符
- java中所有的组成部分都需要名字,类名、变量名以及方法名都被称为标识符
- 所有的标识符都应该以字母(A-Z 或者a-z),美元符($)、或者下划线()开始
- 标识符的大小写敏感
- 合法标识符举例:number、$dictionary、_bob
- 非法标识符举例:123good、-sorry、#abc
- 可以使用中文命名,但不建议,很low!
3.关键字
52个关键字及其作用(摘录)
二、数据类型
1.强类型语言
- 要求变量的使用要严格符合规定,所有变量必须先定义后才能使用。(优点:安全性高;缺点:速度会变慢)
2.弱类型语言
- JavaScript、VBScript等等
3.Java的数据类型分为两大类
- 基本数据类型(常考,重点)
数据类型 | 关键字 | 占用字节 | 取值范围 | 默认值 |
---|---|---|---|---|
字节型 | byte | 1 | -128(-27)~127(-27-1) | 0 |
短整型 | short | 2 | -32768(-215)~32767(-215-1) | 0 |
整型 | int | 4 | -2147483648(-231)~2147483647(-231-1) | 0 |
长整型 | long | 8 | -9223372036854775808(-263)~9223372036854775807(263 -1) | 0L |
单精度浮点型 | float | 4 | 1.4E-45~3.4028235E38 | 0.0F |
双精度浮点型 | double | 8 | 4.9E-324~1.7976931348623157E308 | 0.0D |
字符型 | char | 2 | 0~65535 | ‘\u0000’ |
布尔型 | boolean | 1bit但实有1B | 只有true和false两个值(计算机中用1和0表示) | false |
-
什么是字节:
位(bit):计算机内部 数据储存 的最小单位,11001100是一个八位二进制数。 字节:计算机中 数据处理 的基本单位,习惯用大写的B表示。 字符:是指计算机中使用的字母、数字、字、和符号。 1B(Byte)=8b(bit) 1KB=1024B 1MB=1024KB 1GB=1024MB 1TB=1024GB
-
引用数据类型(除基本类型外都是引用类型)
类、接口、数组
-
数据类型拓展
package com.example.bag2021041301; public class JavaBase04 { public static void main(String[] args) { //1.整数类型拓展:进制:二进制0b、十进制、八进制0、十六进制0x int i1 = 10; int i2 = 010; //八进制 int i3 = 0x10; //十六进制0x 0~9、A~F 16 System.out.println(i1); System.out.println(i2); System.out.println(i3); System.out.println("___________________________________________"); //2.浮点数拓展: float f = 0.1f; double d = 0.1; System.out.println(f == d); //结果是false System.out.println("+++++++++++++++++++++++++++++++++++++++++++"); float f1 = 121212121212f; float f2 = f1 + 1; System.out.println(f1 == f2); //结果是true //尽量避免用浮点数进行比较! //原因就是:float数字长有限,又是离散,而且存在舍入误差,意思就是大约、接近但不等于! //经常用BigDecimal类:数学工具类,进行判断实际问题,例如银行业务。 System.out.println("-------------------------------------------"); //3.字符拓展: char c1 = 'a'; char c2 = '中'; System.out.println(c1);; System.out.println((int)c1); //强制转换 System.out.println(c1); System.out.println((int)c2); //强制转换 //所有的字符本质都是数字! //Unicode 2字节 0~65536 Excle:2^16=65536 //U0000~UFFFF char c3 = '\u0061'; System.out.println(c3); //4.转义字符:\t:制表符 \n:换行符 System.out.println("Hello\tWorld!"); System.out.println("-------------------------------------------"); //5.以下运行结果可以用对象和内存进行解释: String str1 = new String("Hello World"); String str2 = new String("Hello World"); System.out.println(str1 == str2); //false String str3 = "HelloWorld!"; String str4 = "HelloWorld!"; System.out.println(str3 == str4); //true System.out.println("--------------------------------------------"); //6.布尔值拓展: Boolean flag = true; if (flag == true){}; //菜鸟写法 if (flag){}; //老司机写法 //less is more:代码要精简易读! } }
三、类型转换
低→高:
byte,short,char→int→long→float→double
-
强制类型转换
(类型) 变量名 :由高→低 int i = 128; byte b = (byte)i; //结果是-127,因为内存会溢出
-
自动类型转换
//低→高 int i = 128; double b = i;
-
注意点
/**注意点: *1.不能对布尔值进行转换 *2.不能把对象类型转换为不相干的类型 *3.在把高容量转换到低容量的时候,要进行强制转换 *4.转换的时候可能存在内存溢出,或者精度问题! */ package com.example.bag2021041301; public class JavaBase05 { public static void main(String[] args) { int mo = 100_00_00; System.out.println(mo); //结果仍然是1000000,所以数字之间可以用下划线分割。 int money = 100_0000_000; System.out.println(money); //结果仍然是1000000,所以数字之间可以用下划线分割。 int years = 20; int total = money*years; //结果为负数,计算的时候内存溢出了 long total1 = money*years; //结果依旧为负数,默认是int,转换之前已经存在问题。 long total2 = money*((long)years); //计算之前先对一个数进项强制类型转换为long,便可解决。 System.out.println(total); System.out.println(total1); System.out.println(total2); } }
四、变量、常量、作用域
1.变量
-
Java是一种强类型语言,每个变量必须声明其类型!
-
Java变量是程序中最基本的存储单元,其要素包括“变量名、变量类型、作用域”
type varName [=value] [{,varName[=value]}]; //数据类型 变量名 = 值;可以使用逗号隔开来生命多个同类型变量。
-
注意事项:
//每个变量都有类型,类型可以是基本类型,也可以是引用类型。 //变量名必须是合法的标识符。 //变量声明是一条完整的语句,因此每一个声明都必须以分号结束。 //从程序的可读性原则出发,不建议一行声明多个变量!
-
作用域:
//类变量:写在类里面,需要加一个关键字static //实例变量:写在类中间,从属于对象 //局部变量:写在方法里面 static int allClicks = 0; //类变量 String str = "Hello World!"; ///实例变量 public void method(){ int i = 0; //局部变量 }
package com.example.bag2021041301; public class JavaBase06 { //属性:变量 //类变量:static static double salary = 2500; //实例变量:从属于对象 String name; //如果不进行初始化,会自动赋默认值!String默认值为null! int age = 1; //main方法 public static void main(String[] args) { //局部变量:必须声明和初始化值 int i= 10; //变量类型 变量名字(↓即对象) = new JavaBase06(); JavaBase06 JavaBase06 = new JavaBase06(); System.out.println(JavaBase06.name); System.out.println(JavaBase06.age); System.out.println(salary); }
2.常量
-
初始化后不能再改变,不会再变动的值。
-
常量名一般使用大写字符。
static final double PI = 3.14; //static final顺序无所谓,static是修饰符,不存在先后顺序 // 常量定义一般使用final关键字 System.out.println(PI); //常量输出
3.变量的命名规则
- 所有变量、方法、类名:见名知意
- 类成员变量:首字母小写和驼峰原则: monthSalary除了第一个单词以外,后面的单词首字母大写lastName
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线: MAX_ VALUE
- 类名:首字母大写和驼峰原则: Man, GoodMan
- 方法名:首字母小写和驼峰原则: run(), runRun()
五、基本运算符
- 关系运算符返回的结果是Boolean值,一般会跟if结构一起使用。
- %:取余,也叫模运算
六、自增、自减运算符,幂运算
1.自增自减运算
- b = a++:先赋值,再自增
- c = ++a:先自增,再赋值
- 自减运算同理
2.幂运算
-
double a = Math.pow(3,2); //幂运算pow System.out.println(a);
七、逻辑运算符、位运算符
1.逻辑运算符
-
/** *逻辑运算符: * && * || * ! */ public class Test05 { public static void main(String[] args) { //定义布尔类型的变量: boolean x = true; boolean y = false; System.out.println(x && y); //逻辑与 && : 两边都为true 结果才是true, 只要一边是false 结果就为false System.out.println(x || y); //逻辑或 || : 两边的结果 只要有一个为true, 就为true System.out.println(! false); //取反 System.out.println(!(x && y)); } }
-
/** * 逻辑运算符 * 短路效果演示: */ public class Test06 { public static void main(String[] args) { //定义变量 int a = 10; int b = 10; int c = 30; //逻辑运算符 连接布尔类型的表达式 System.out.println(a == b && a >= c);//false System.out.println(a >= b || a >= c);//true System.out.println("------------------------------------"); //短路&&的特点: 符号左边是false ,右边就不运算;符号左边是true,右边就会运算 System.out.println(++a < b && ++b < c); System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("------------------------------------"); //短路||的特点: 符号左边是 true ,右边不运算;符号左边是false,右边就会运算 System.out.println(++a < b || ++b < c); System.out.println("a = " + a); System.out.println("b = " + b);
2.位运算符
-
public class JavaBase09 { public static void main(String[] args) { /** * A = 0011 1100 * B = 0000 1101 * * A&B = 0000 1100 //与运算:如果对应位都为1,结果为1 * A|B = 0011 1101 //或运算:如果对应位都为0,结果为0 * A^B = 0011 0001 //异或运算:如果对应位相同结果为0 * ~B = 1111 0010 //取反运算:对应位相反,0为1,1为0 * * 面试题: * 2*8 = 16 2*2*2*2* = 16 * << :左移 *2;右边补0 * >> :右移 /2;左边补1 */ System.out.println(2<<3); //即把16进制的2左移三次,相当于给2乘了3次2,结果为16;位运算效率极高! /** * 原理: * 0000 0000 0 * 0000 0001 1 * 0000 0010 2 * 0000 0100 4 * 0000 1000 8 * 0001 0000 16 */ } }
八、三元运算符、扩展赋值运算符
1.扩展赋值运算符
- 扩展赋值运算符
/**
* 扩展赋值运算符
* += -= *= /= %=
*/
public class Test03 {
public static void main(String[] args) {
int a = 10; //a = a + 10;以下运算同理
a += 10;
System.out.println(a);
int b = 20;
b -= 10;
System.out.println(b);
int c = 20;
c *= 10;
System.out.println(c);
int d = 30;
d %= 20;
System.out.println(d);
int e = 20;
e /= 20;
System.out.println(e);
//字符串在前,+ 起连接作用!字符串在后,表达式会进行运算!
System.out.println("a+b = " +a+b); //2010
System.out.println(a+b+ " = a+b"); //30
}
}
- 三元运算符
/**
* 三元运算符:
* 数据类型 变量名 = 布尔类型表达式 ? 结果1 : 结果2;
*/
public class Test07 {
public static void main(String[] args) {
//? 前面为真,则输出 : 前面的值,否则,输出后面的值
int i = (1 == 2 ? 100 : 200);
System.out.println(i);
int y = (3 <= 4 ? 1000 : 2000);
System.out.println(y);
}
}
九、运算符优先级
运算符优先级(转载)
- 括号级别最高,逗号级别最低,单目 > 算术 > 位移 > 关系 > 逻辑 > 三目 > 赋值
十、包机制
- 包的本质就是文件夹
- 一般利用公司域名倒置作为包名
- 导入包用import关键字,而且导包操作必须在包之下
- *是通配符,可以导入全部的包
package com.example.bag2021041301;
/*
@author 作者名
@version 版本号
@since 指明需要最早的JDK版本
@param 参数
@return 返回值情况
@throws 异常抛出情况
*/
//例如:11~17加在了类上面,是对于类的注释,21~25加在了方法上面,是对于方法的注释
/**
* @author 一叶之秋
* @version 2020.1.0
* @since 1.8
*/
public class JavaBase12Doc {
String name;
// /**
// *
// * @param name
// * @return
// */
// public String test(String name){
// return name;
// }
/**
* @author 一叶之秋
* @param name
* @return
* @throws Exception
*/
public String test(String name) throws Exception{
return name;
}
}
十一、Java Doc生成文档
- 使用命令行生成自己的Java文档
- 使用idea生成JavaDoc文档