Java基礎
狂神說JAVA視頻課筆記,狂神說JAVA
1. 注釋
- 單行注釋://
- 多行注釋:/* 注釋 */
- JavaDoc文檔注釋注釋:/** */
- /**開頭
- */結尾
- 每行開頭一個*
- 有關鍵字,自定義的關鍵字在幫助文檔中是不顯示的(如@Description,加了@反而不能在幫助文檔顯示,不如不加@)
- JavaDoc標記
- JavaDoc注釋規范
public class Hello {
public static void main(String[] args) {
//單行注釋
System.out.println("Hello,World!");
/*
多行注釋
多行注釋
*/
//JavaDoc:文檔注釋 /** */
/**
* Hello, world!
* @author Dong
*/
}
}
2. 數據類型
- 強數據類型:要求變量的使用要嚴格符合規定,所有變量必須先定義后使用。
- 定義后不經過類型轉換無法轉換成其他數據類型。
- 安全性高,速度慢。
- 弱類型語言
Java數據類型:
- 基本類型(primitive type)
- 引用類型(reference type)
基本類型
Long類型要在數字后加L:long num=10L;
,l
和L
都可以標識長整型,但l
容易看成數字1,所以用L
比較規范。
float類型要在數字后加F:float num=10.1F;
字符串String不是關鍵字,是類

引用數據類型
- 類
- 接口
- 數組
數據類型拓展及面試題
1. 整數拓展:
-
二進制:
0b
開頭 -
八進制:
0
開頭 -
十六進制:
0x
開頭public class Demo1 { public static void main(String[] args) { int i=10; int i_2=0b10;//二進制 0b 開頭 int i_8=010;//八進制 0 開頭 int i_16=0x10;//十六進制 0x 開頭 System.out.println(i); System.out.println(i_2); System.out.println(i_8); System.out.println(i_16); } }
2. 浮點數拓展
銀行業務中,錢怎么表示?
避免使用浮點數進行比較
浮點數是不精確的(有限的;離散的;有舍入誤差的;大約;接近但不等於)
例子:
public class DataTypeDemo {
public static void main(String[] args)
//浮點數
float f=0.1f; //0.1
double d=1.0/10; //0.1
System.out.println(f==d);
//期望輸出true,但實際輸出false
float d1=1234424234523422342343421f;//這里數小了會輸出false
float d2=d1+1;
System.out.println(d1==d2);
//期望輸出false,但實際輸出true
}
}
所以在遇到銀行業務這類需要比較浮點數的情況,使用BigDecimal類(數學工具類)
3. 轉義字符
- \t:制表符tab
- \n:換行
3. 類型轉換
在進行運算前,需要先將不同類型的數據轉換成統一的數據類型
- 從高到低需要進行強制類型轉換
- 強制類型轉換:(類型名)變量名
- 從低到高進行自動類型轉換
注意⚠️
-
不能對布爾值進行轉換
-
不能把對象類型轉換為不相干的類型
-
在把高容量轉換為低容量時,需要使用強制類型轉換
-
轉換時可能出現內存溢出問題和精度問題
-
字符型轉換成整型時,轉換成的是該字符的ascii碼
數字字符轉換成整型時,要用該字符-‘0’:int number=‘4’-‘0’
public class TypeConversion {
public static void main(String[] args) {
//強制轉換 高-》低
int i=128;
byte b=(byte)i;
//內存溢出,byte存儲范圍[-128,127]
System.out.println(i);
System.out.println(b);//輸出-128
System.out.println("======================================");
//======================================
//自動轉換 低-》高
int ii=128;
double bb=ii;
System.out.println(ii);
System.out.println(bb);//輸出128.0
System.out.println("======================================");
}
}
溢出問題
在進行數據的計算時,得到的數可能會出現溢出的問題。這時要先把進行計算的其中一個數轉換為高容量的數據類型,然后在進行計算。
- 不能先計算再進行數據類型轉換,因為計算完后的數的默認數據類型是原數據的數據類型,這樣在進行數據類型轉換前就已經溢出了
public class Overflow {
public static void main(String[] args) {
//操作比較大的數的時候,注意溢出問題
int money = 10_0000_0000;//JDK7新特性,數字之間可以用下划線分割
int year = 20;
int total = money * year;//輸出一個負數,計算的時候溢出的
long totalLong = money * year;//先用原始的int類型計算完再轉為long類型,所以轉換之前已經出錯
//正確做法是在計算前先把一個數的數據類型轉化為long類,再計算乘法
long totalLongRight = money * ((long) year);
System.out.println("用int儲存的:" + total);//輸出-1474836480
System.out.println("用long儲存但先計算的:" + totalLong);//輸出-1474836480
System.out.println("用long儲存且先類型轉換的:" + totalLongRight);//輸出期望結果20000000000
}
}
4. 變量、常量和作用域
變量
作用域
- 類變量(修飾符static):static+數據類型+變量名
- 可以不初始化
- 可以在方法中直接調用
- 實例變量
- 從屬於對象,需要聲明不需要初始化
- 在方法中調用前,需要先將類實例化(新建一個對象)
- 局部變量
- 必須聲明和初始化值,只在方法內有效
public class Scope {
//屬性:變量
//類變量 static,可以不初始化
static double salary = 2500;
//實例變量:從屬於對象,需要聲明不需要初始化
// 實例變量不初始化的話,默認值為0 0.0
//布爾值默認是false
//除了基本類型,其余默認值都是null
String name;
int age;
//main方法
public static void main(String[] args) {
//局部變量:必須聲明和初始化值,只在方法內有效
int i = 10;
Scope s = new Scope();
System.out.println(s.age);//age沒有初始化,但可以輸出,輸出為0
System.out.println(salary);//類變量可以直接輸出,輸出2500
}
//其他方法
}
常量
常量被初始化后不能再改變值
修飾符為final
(修飾符不去分前后)
常量名一般全為大寫
final 數據類型 常量名 = 值;
final double PI = 3.14;
4. 運算符
算術運算符
對於long
、int
、short
和byte
:
- 當進行運算的變量有long類型,則運算結果的數據類型為
long
- 否則全部為
int
,即使是short
和byte
類型的變量,運算結果也是in
b=++a
和b=a++
:
++a
:先自增,再給b賦值a++
:先給b賦值,再自增
冪運算:
- Math.pow(底數,指數);
邏輯運算符
短路運算:
當根據邏輯運算符前面的表達式就可以得出邏輯運算的結果時,邏輯運算符后面的表達式不再執行。
int c=5;
boolean d=(c<4) && (c++<4);
System.out.println(d);//輸出false
System.out.println(d);//輸出5
位運算
位運算效率高
- &:與
- |:或
- ^:異或
- ~:非,取反
- <<:左移,相當於乘2
- >>:右移,相當於除以2
面試題:2*8=16,怎樣運算最快
答:用位運算最快
0000 0001 1
0000 0010 2
0000 0100 4
0000 1000 8
0001 0000 16
所以把2
左移3,就可以得到16
System.out.printlin(2<<3);//輸出16
擴展賦值運算符
- a+=b:a=a+b
- a-=b:a=a-b
字符串連接符 +
- 當+一邊出現字符串類型時,運算返回的是字符串類型。運算符優先級不變,還是從左到右
System.out.printlin(""+1+2);//12
System.out.printlin(1+2+"");//3,先進行加法運算,再與字符串連接
三元運算符
- x ? y : z(掌握,常見)
- 如果x==true,則返回y,否則返回z
5. 包機制
包的本質就是文件夾
一般利用公司域名倒置作為包名
防止命名空間重復
- 在src里新建一個包
- 取消compact middle packages

- 可以在域名下加屬於他的功能
包的導入
為了使用其他包的成員,需要在java程序中使用import導入改包(idea可以設置自動導入包),導入的其他包的方法名不能和程序中的方法名一樣。
.*為通配符,可以導入包下所有的類
import java.util.*
6. JavaDoc
將注釋信息生成自己的幫助文檔/API文檔
使用命令行生成幫助文檔
-
使用文檔注釋 /** */
-
打開代碼所在位置(mac:右鍵.java文件,點擊Reveal in Finder)
-
打開命令行,cd到代碼所在文件夾,運行:
javadoc -encoding UTF-8 -charset UTF-8 程序名.java
-encoding utf-8 -charset utf-8 為了能夠顯示中文
-
生成幫助文檔
使用IDEA生成幫助文檔
-
Tools --> Generate JavaDoc
-
-
參數:-encoding UTF-8 -charset UTF-8 -windowtitle “文檔HTML頁面標簽的標題” -link http://docs.Oracle.com/javase/8/docs/api