Java基础
注释
public class Hello {
public static void main(String[] args) {
// 单行注释 输出一个 Hello
System.out.println("Hello");
/* 多行注释 */
/** JavaDoc: 文档注释
* @deprecated Hello (内容)
* @Author 猪老三 (作者)
*/
}
}
标识符
首字符: 只能为 大写字母A-Z
、小写字母a-z
、美元符$
、下划线_
组成字符: 可以是 大写字母A-Z
、小写字母a-z
、美元符$
、下划线_
以及数字0-9
的任意组合
也可以是pinyin和汉字,但not good。
关键字
基本数据类型 Primitive type
整数类型
类型介绍
名称 | 字节范围 | 大小 |
---|---|---|
byte | 1个字节 | − 128 -128 −128 ~ 127 127 127 |
short | 2个字节 | − 32768 -32768 −32768 ~ 32767 32767 32767 |
int | 4个字节 | − 2147483648 -2147483648 −2147483648 ~ 2147483647 2147483647 2147483647 |
long | 8个字节 | − 9223372036854775808 -9223372036854775808 −9223372036854775808 ~ 9223372036854775807 9223372036854775807 9223372036854775807 |
补充:进制问题
public static void T1(){
int a = 10; // 十进制
int b = 010; // 八进制 以 0 开头
int c = 0b10; // 二进制 以 0b 开头
int d = 0x10; // 十六进制 以 0x 开头
System.out.println("a=" + a); // a=10
System.out.println("b=" + b); // b=8
System.out.println("c=" + c); // c=2
System.out.println("d=" + d); // d=16
}
补充:数字下划线
(JDK7 之后 数字之间可以用下划线分割 对数字不影响)
int money = 10_0000_000;
浮点型
类型介绍
名称 | 字节范围 |
---|---|
float | 4个字节 |
double | 8个字节 |
补充:精度问题
最好完全避免使用浮点数进行比较
public static void T2() {
float f = 0.1f; //f=0.1
double d = 1.0/10; //d=0.1
//but
System.out.println(f == d); //false
float f1 = 123123123123123f;
float f2 = f1 + 1;
//but
System.out.println(f1 == f2); //true
}
因为浮点数是 有限的、离散的、舍入误差、接近但不等于
所以 银行业务可以使用 BigDecimal(数学工具类)进行比较
字符型
类型介绍
名称 | 字节范围 |
---|---|
char | 2个字节 |
补充:字符的本质是数字
所有的字符都可以强制转换为数字
public static void T3() {
char c1 = 'a';
char c2 = '中';
System.out.println("c1=" + c1);
System.out.println("c1=" + (int)c1); //强制转换
System.out.println("c2=" + c2);
System.out.println("c2=" + (int)c2);
char c3 = '\u0061';
System.out.println("c3=" + c3);
}
运行结果:
Unicode编码: 记录着世界上所有字符对应的一个数字,范围: [ 0 , 65536 ( 2 16 ) ] [~0~,~65536~(2^{16})~] [ 0 , 65536 (216) ]
boolean类型
类型介绍
名称 | 字节范围 | 值域 |
---|---|---|
boolean | 1/8个字节 | [ t r u e , f a l s e ] [~true~,~false~] [ true , false ] |
补充:1B(字节) = 8b(位)
代码
public static void T(){
byte num1 = 1;
short num2 = 2;
int num3 = 3;
long num4 = 4L; //long 类型 数字后面要加 l / L
float num5 = 50.1f; //float 类型 数字后面要加 f / F
double num6 = 3.1415926;
char name1 = 'a';
char name2 = '猪';
boolean flag = true;
}
思考
public static void T4(){
String sa = new String("Hello");
String sb = new String("Hello");
System.out.println(sa == sb); //false
String sc = "Hello";
String sd = "Hello";
System.out.println(sc == sd); //true
}
类型转换
转换顺序
低
~~
byte , short , char -> int -> long -> float -> double
~
高
强制转换 | 自动转换 |
---|---|
从高到低 | 从低到高 |
注意点
- 不能对
boolean值
进行转换 - 不能把对象类型转换为不相干的类型
- 在把高容量转换为低容量的时候,强制转换
- 转换的时候可能存在内存溢出或是精度问题
计算过程中的转换
进行可能会溢出的计算时,要先转换数据类型
public static void T5(){
int money = 1_000_000_000;
int year = 20;
long total1 = money * year; //先计算 后转换
System.out.println("total1=" + total1); //-1474836480
long total2 = money * ((long)year); //先转换 后计算
System.out.println("total2=" + total2); //20000000000
}
运行结果:
变量
类型
变量分为 实例变量、类变量、局部变量
public class Demo01 {
//实例变量:从属于对象;如果没有初始化,则为这个类型饿默认值
String name;
int age;
//类变量 static
static double salary = 2500;
//main方法
public static void main(String[] args) {
//局部变量:必须声明和初始化,仅在当前花括号中有效
int i = 1;
System.out.println(i);
//变量类型 变量名字 = new 变量类型()
Demo01 demo01 = new Demo01();
System.out.println(demo01.name);
System.out.println(demo01.age);
//类变量
System.out.println(salary);
}
//其他方法
public void eg() {
}
}
命名规范
- 所有变量、方法、类名:见名知意 name , age
- 类成员变量、局部变量、方法名:首字母小写 + 驼峰原则 lastName
- 常量:大写字母 + 下划线 MAX_VALUE
- 类名:首字母大写 + 驼峰原则 GoodMan
常量
常量:一个特殊的变量,它的值被设定后,在程序运行中不能再改变了
final double PI= 3.14;
基本运算符
算数运算符
+ + + | − - − | ∗ * ∗ | / / / | % \% % | + + ++ ++ | − − -- −− |
---|---|---|---|---|---|---|
加法 | 减法 | 乘法 | 除法 | 求余 | 自增 | 自减 |
字符串连接符 +
public static void T6(){
int a = 1;
int b = 2;
System.out.println("" + a + b);
System.out.println(a + b + "");
}
运行结果:
赋值运算符
= = = | a + = b a+=b a+=b | a − = b a-=b a−=b | a ∗ = b a*=b a∗=b | a / = b a/=b a/=b |
---|---|---|---|---|
赋值 | a = a + b a=a+b a=a+b | a = a − b a=a-b a=a−b | a = a ∗ b a=a*b a=a∗b | a = a / b a=a/b a=a/b |
关系运算符
> > > | < < < | > = >= >= | < = <= <= | = = == == | ! = != != | i n s t a n c e o f instanceof instanceof |
---|---|---|---|---|---|---|
大于 | 小于 | 大于等于 | 小于等于 | 等于 | 不等于 | 未知 |
逻辑运算符
& & \&\& && | || | ! ! ! |
---|---|---|
与:有假则假 | 或:有真则真 | 非 |
条件运算符
x ? a : b x~?~a : b x ? a:b |
---|
如果 x x x为真,执行 a a a,否则执行 b b b |
位运算符
& \& & | | | ^ | ~ | >> | << |
---|---|---|---|---|---|
与:两位都为1时,结果才为1 | 或:两位都为0时,结果才为0 | 异或:两位相同为0,相异为1 | 取反:0变1,1变0 | 右移:相当于 / 2 /2 /2 | 左移:相当于 ∗ 2 *2 ∗2 |
包机制
为了更好的组织类,Java提供了包机制,用于区别类的命名空间。包可以理解为电脑中的文件夹
一般利用公司域名倒置作为包名,eg:com.baidu.www
定义和导入
package com.zlsaxx.base;
import com.zlsaxx.eg.Demo01; //import com.zlsaxx.eg.*;
public class Hello {
public static void main(String[] args) {
}
}
导入包下所有的类:
import com.zlsaxx.eg.*;
阿里巴巴开发手册
JavaDoc
javadoc命令用于生成自己的API文档。 jdk8帮助文档
参数信息
参数 | 意义 |
---|---|
@author | 作者名 |
@version | 版本号 |
@since | 需要最早使用的jdk版本 |
@param | 参数名 |
@return | 返回值情况 |
@throws | 抛出异常情况 |
生成JavaDoc文档
- 写好文档注释
- 在文件夹中找到对应的java文件
- 在该文件夹下打开cmd命令行
- 输入
javadoc -encoding UTF-8 -charset UTF-8 文件名.java
(中间的UTF-8
是为了防止中文无法识别生成乱码) - 文件夹下生成
index.html
代码 / 过程 参考
Doc.java
代码:
package com.zlsaxx.eg;
/**
* @author zls
* @version 1.0
* @since 1.8
*/
public class Doc {
String name;
/**
* @author zls
* @param name
* @return
* @throws Exception
*/
public String test(String name) throws Exception{
return name;
}
}
cmd界面:
JavaDoc文档: