Java基礎(一)
Java基礎(一)
一、注釋
1. 單行注釋
//單行注釋
2. 多行注釋
/*
多行注釋
*/
3. 文檔注釋
/**
*文檔注釋
*/
二、標識符
關鍵字
Java所有的組成部分都需要名字。類名、變數名以及方法名都被稱為標識符。
abstract | assert | boolean | break | byte |
---|---|---|---|---|
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implements | 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)、美元符($)、或者下劃線(_)開始
-
首字元之後可以是字母(A ~ Z或者a ~ z)、美元符($)、下劃線(_)、或數字的任何字元組合
-
標識符是大小寫敏感的
-
不能使用關鍵字作為變數名或方法名
-
可以使用中文命名,但不建議,很low
三、數據類型
- 強類型語言
- 要求變數的使用要嚴格符合規定,所有變數都必須先定義後才能使用(Java是強類型語言)
- 弱類型語言
- Visual Basic、JavaScript
- Java的數據類型分為兩大類
- 基本類型(primitive type)
- 引用類型(reference type)
拓展:什麼是位元組
-
位(bit):是電腦內部數據儲存的最小單位,11001100是一個八位二進位數。
-
位元組(byte):是電腦中數據處理的基本單位,習慣上用大寫B來表示
-
1B(byte,位元組) = 8bit(位)
-
字元:是指電腦中使用的字母、數字、字和符號
-
1bit,1位
-
1Byte,1個位元組,1Byte = 8bit,1B = 8b
-
1024B = 1KB
-
1024KB = 1MB
-
1024MB = 1GB
程式碼:
import java.math.BigDecimal;
public class Demo02 {
public static void main(String[] args) {
//八大基本數據類型
//整數,常用int
int num1 = 10; //取值範圍:-2147483648~2147483647
byte num2 = 20; //取值範圍:-128~127
short num3 = 30; //取值範圍:-32768~32767
//long類型要在數字後面加L
long num4 = 30L; //取值範圍:-9223372036854775808~9223372036854775807
//小數:浮點數 超過位數容易造成精度丟失
float num5 = 50.132225f; //float類型要在小數後面加F
double num6 = 3.1415926535897935; //精度丟失
//精度丟失解決方法
BigDecimal bignum1=new BigDecimal("3.14159265358979323846");
BigDecimal bignum2=new BigDecimal("2.54517924114656515555");
System.out.println(bignum1);
BigDecimal bignum3 = null;
bignum3 = bignum1.add(bignum2);
System.out.println(bignum3);
//字元
char name = 'A';
/**
* 字元串,String不是關鍵字,是類
* String name = "董曉龍"
*/
//布爾值(只有兩個值):是,非
boolean a = true;
boolean b = false;
System.out.println("num1="+num1+"\nnum2="+num2+"\nnum3="+num3+"\nnum4="+num4+"\nnum5="+num5
+"\nnum6="+num6+"\nname="+name+"\na="+a+"\nb="+b);
}
}
輸出結果:
public class Demo03 {
public static void main(String[] args) {
int i = 10; //十進位
int i2 = 010; //八進位
int i3 = 0x10; //十六進位
int i4 = 0b10; //二進位
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
System.out.println(i4);
//==============================================================
//浮點數拓展? 銀行業務 ↓
//使用BigDecimal數學工具類
//==============================================================
//float 能表示的字長有限,離散(不連續的),存在舍入誤差,只能無限接近但不等於
//double
//最好避免使用浮點數進行比較
//最好避免使用浮點數進行比較
//最好避免使用浮點數進行比較
System.out.println("==================================");
float f = 0.1f;
double d = 1.0 / 10;
System.out.println(f == d);
System.out.println(f);
System.out.println(d);
System.out.println("==================================");
float f1 = 23234423685f;
float f2 = f1 + 1;
System.out.println(f1 == f2);
//==================================================================
//字元拓展
//==================================================================
System.out.println("====================================");
char c1 = 'A';
char c2 = '中';
System.out.println(c1);
System.out.println((int) c1); //強制轉換
System.out.println(c2);
System.out.println((int) c2); //強制轉換
//字元本質是數字 各個國家的文字在統一碼 Unicode(萬國碼)中都有相對應的編碼
//97對應a,65對應A
char c3 = '\u0061';
System.out.println(c3);
/**
* 轉義字元
* \t 製表符
* \n 換行
*/
System.out.println("hello\twolrd");
System.out.println("hello\nworld");
System.out.println("========================================");
String s1 = new String("hello world");
String s2 = new String("hello world");
String s3 = "hello world";
String s4 = "hello world";
System.out.println(s1 == s2); //false
System.out.println(s3 == s4); //true
//後面學習記憶體後解釋原因
//布爾值擴展
boolean flag = true;
if (flag==true){}
if (flag){} //flag默認為true
//Less is more!
}
}
輸出結果:
四、類型轉換
- 由於Java是強類型語言,所以有些運算需要進行類型轉換
低 -------------------------------------------> 高
byte,short,char -> int -> long -> float -> double
-
運算中,不同類型的數據先轉換為同一類型,然後再進行運算。
-
強制類型轉換:
-
由 高 -----> 低,需要強轉 強制類型轉換格式:(TYPE)varName
-
-
自動類型轉化:
-
由 低 -----> 高,自動轉換
-
程式碼:
public class Demo04 {
public static void main(String[] args) {
byte b1 = 127; //低
int i1 = b1; //高 byte自動轉換為int
int i2 = 128; //高
byte b2 = (byte) i2; //低 超過byte範圍(-128~127),記憶體溢出
System.out.println("i=" + i1 + "\nb=" + b1);
System.out.println("i2=" + i2 + "\nb2=" + b2);
/**
* 由 高 -----> 低,需要強轉 強制類型轉換格式:(TYPE)變數名
* 由 低 -----> 高,自動轉換
*/
double d = i2;
System.out.println("d=" + d);
/*
注意點:
1. 不能對布爾值進行轉換
2. 不能把對象類型轉換為不相干的類型
3. 在把高容量轉換到低容量的時要強制轉換
4. 轉換的時候可能存在記憶體溢出,或者精度問題
*/
char c = 'a';
int s = c + 1;
System.out.println("s=" + s + "\n" + ((int) c) + "\n" + ((char) s));
}
}
注意:
public class Demo05 {
public static void main(String[] args) {
//操作比較大的數時,注意記憶體溢出問題
//JDK7隻後新特性:一個數字可以加下劃線分割
int money = 10_0000_0000;
int years = 20;
int total = money * years; //-1474836480 計算時記憶體溢出了
long total1 = money * years; //-1474836480 默認先以int型計算再轉換成long型,轉換之前就已經記憶體溢出
long total2 = money * (long) years; //先轉換再計算
System.out.println(total2);
}
}
五、變數
-
變數:可以變化的量
-
Java是一種強類型語言,每個變數都必須聲明其類型。
-
Java變數是程式中最基本的存儲單元,其要素包括變數名、變數類型和作用域。
-
type varName [=value] [{,varName[=value]}]; //數據類型 變數名 = 值;
- 可以使用逗號隔開來聲明多個同類型變數(不建議使用,容易看上去很混亂)
-
-
注意事項:
- 每個變數都有類型,變數可以是基本類型,也可以是引用類型。
- 變數名必須是合法的標識符。
- 變數聲明是一條完整的語句,因此每一個聲明都必須以分號結束
public class Demo06 { public static void main(String[] args) { // int a=1,b=2,c=3; 不建議使用 int a=1; int b=2; int c=3; String name="曉龍"; char x='X'; double pi=3.1415926; } }
1. 變數作用域
- 類變數
- 實例變數
- 局部變數
public class Demo07 {
//屬性:變數
//類變數 static
static double salary = 2500;
//實例變數:從屬於對象; 若不手動初始化,為默認值。數值類型默認為 0 或 0.0 ,字元串為u0000,輸出依然為0
//布爾值boolean:默認是false
//除了基本類型,其餘的默認值都為null
String name;
int age;
//main方法
public static void main(String[] args) {
//局部變數 必須聲明和初始化值
int i = 10;
System.out.println(i);
//實例變數
//變數類型 變數名字 = new 變數類型()
Demo07 demo07 = new Demo07();
System.out.println(demo07.age);
System.out.println(demo07.name);
//類變數 static
System.out.println(salary);
}
//其他方法
public void add() {
/**
* System.out.println(i);
* i是局部變數,在add()方法中無法訪問main()方法中的i
* 局部變數只在聲明它的方法、構造方法或者語句塊中可見
*/
}
}
2. 常量
- 常量(Constant):初始化(initialize)後不能再改變值!不會變動的值。
- 所謂常量可以理解成一種特殊的變數,它的值被設定後,在程式的運行過程中不允許被改變。
final 常量名 = 值;
final double PI = 3.14;
- 常量名一般使用大寫字元。
public class Demo08 {
//final,static等修飾符,不存在先後順序
static final double PI = 3.14; //常量使用大寫字母和下劃線
public static void main(String[] args) {
System.out.println(PI);
}
}
3. 變數的命名規範
- 所有變數、方法、類名:見名知意
- 類成員變數:首字母小寫和駝峰原則(例:monthSalary)
- 局部變數:首字母小寫和駝峰原則
- 常量:大寫字母和下劃線(例:MAX_VALUE)
- 類名:首字母大寫和駝峰原則(例:Man,GoodMan)
- 方法名:首字母小寫和駝峰原則(例:run(),runRun() )
六、運算符
-
Java語言支援如下運算符:
- 算數運算符:+ , – , * , / , % , ++ , –(加,減,乘,除,模運算[即取余],自增,自減)
- 賦值運算符:=
- 關係運算符:> , < , >= , <= , == , !=instanceof
- 邏輯運算符:&& , || , !
- 位運算符:& , | , ^ , ~ , >> , << , >>>
- 條件運算符: ?:
- 擴展賦值運算符:+= , -= , *= , /=
-
優先順序:
-
優先順序 描述 運算符 1 括弧 () , [] 2 正負號 + , – 3 自增、自減、非 ++ , — , ! 4 乘除、取余 * , / , % 5 加、減 + , – 6 移位運算 << , >> , >>> 7 大小關係 > , >= , < , <= 8 相等關係 == , != 9 按位與 & 10 按位異或 ^ 11 按位或 | 12 邏輯與 && 13 邏輯或 || 14 條件運算 ?: 15 賦值運算 = , += , -= , *= , /= , %= 16 位賦值運算 &= , |= , ^= , ~= , <<= , >>= , >>>=
-
package operator;
public class Demo01 {
public static void main(String[] args) {
//二元運算符
int a = 10;
int b = 20;
int c = 25;
int d = 30;
System.out.println(a + b);
System.out.println(a - b);
System.out.println(c * b);
System.out.println((double) b / d);
System.out.println(c % a); //取余,模運算
}
}
package operator;
public class Demo02 {
public static void main(String[] args) {
//++ , -- 自增,自減 一元運算符
int a = 3;
System.out.println("a=" + a);
int b = a++; //a++等同於 a先賦值給b,再自增,a=a+1,a=4
System.out.println("a=" + a);
int c = ++a; //++a等同於a先自增,a=a+1,a=5,再賦值給c
System.out.println("a=" + a + "\nb=" + b + "\nc=" + c);
//冪運算 2^3
double pow = Math.pow(2, 3);
System.out.println(pow);
}
}
package operator;
public class Demo03 {
public static void main(String[] args) {
long a = 123123123123123L;
int b = 123;
short c = 10;
byte d = 8;
//有long型自動轉換為long型,沒有自動轉換為int型
System.out.println(a + b + c + d); //Long
System.out.println(b + c + d); //Int
System.out.println(c + d); //Int
}
}
package operator;
public class Demo04 {
public static void main(String[] args) {
//關係運算符返回的結果:正確,錯誤(布爾值true,false)
int a = 10;
int b = 20;
System.out.println(a > b);
System.out.println(a < b);
System.out.println(a == b);
System.out.println(a != b);
}
}
package operator;
public class Demo05 {
public static void main(String[] args) {
//與(and) 或(or) 非(取反)
boolean a = true;
boolean b = false;
System.out.println("a && b:" + (a && b)); //邏輯與運算:兩個變數都為真,結果才為true
System.out.println("a || b:" + (a || b)); //邏輯或運算:兩個變數有一個為真,結果就為true,都為假才為false
System.out.println("!(a && b):" + !(a && b)); //若為真,則變為假;若為假,則變為真
//短路運算
int c = 5;
boolean d = (c < 4) && (c++ < 4); //c<4為假,整體就為假,c++沒有進行運算
System.out.println(d);
System.out.println(c);
}
}
package operator;
public class Demo06 {
public static void main(String[] args) {
/*
A = 0011 1100
B = 0000 1101
--------------------------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~B = 1111 0010
2*8 = 16 2*2*2*2
<<
>>
0000 0000 0
0000 0001 1
0000 0010 2
0000 0100 4
0000 1000 8
0001 0000 16
*/
System.out.println(2 << 3);
}
}
package operator;
public class Demo07 {
public static void main(String[] args) {
int a = 10;
int b = 20;
a += b; //a=a+b 30
a -= b; //a=a-b 10
System.out.println(a);
//字元串連接符 +
System.out.println("" + a + b); //字元串在前面,不加括弧,連接符後是String類型,不進行運算
System.out.println(a + b + ""); //字元串在後面,前面的+會進行運算
}
}
package operator;
public class Demo08 {
//三元運算符
public static void main(String[] args) {
//x ? y : z
//如果x==true,結果為 y,否則為z
int sorce = 80;
String r = sorce > 60 ? "及格" : "不及格";
System.out.println(r);
}
}
七、包機制
-
為了更好地組織類,Java提供了包機制,用於區別類名的命名空間。
-
包語句的語法格式:
-
package pkg1[.pkg2[pkg3...]];
-
-
一般利用公司域名倒置作為包名;
-
為了能夠使用某一個包的成員,我們需要在Java程式中明確導入該包。使用「import」語句可完成此功能
-
import package1[.package2...].(classname|*);
-
八、JavaDoc
-
javadoc命令是用來生成自己API文檔的
-
參數資訊
- @author 作者名
- @version 版本號
- @since 指明需要最早使用的jdk版本
- @param 參數名
- @return 返回值情況
- @throws 異常拋出情況
package com.forgetcity.base;
/**
* @author ForgetCity
* @version 1.0
* @since 1.8
*/
public class Doc {
String name;
/**
* @param name
* @return
* @throws Exception
*/
public String test(String name) throws Exception{
return name;
}
}
命令行生成Javadoc文檔
cmd生成Javadoc文檔命令:
javadoc -encoding UTF-8 -charset UTF-8 Doc.java -d 輸出路徑
IDEA生成Javadoc文檔
Locale輸入zh_CN
Other command line arguments輸入-encoding utf-8 -charset utf-8