JAVA -01 前期準備 介紹 1972年C誕生【兩大問題:指針;記憶體管理】 1982年C++誕生【面向對象;相容C;圖形領域和游戲,但是更複雜】 1995年JAVA誕生【沒有指針沒有記憶體管理;面向對象;類型安全;高質量類庫;跨平臺(JVM實現);applet圖形界面程式】 小碎點 三高問題:高可 ...
JAVA -01
前期準備
介紹
- 1972年C誕生【兩大問題:指針;記憶體管理】
- 1982年C++誕生【面向對象;相容C;圖形領域和游戲,但是更複雜】
- 1995年JAVA誕生【沒有指針沒有記憶體管理;面向對象;類型安全;高質量類庫;跨平臺(JVM實現);applet圖形界面程式】
小碎點
- 三高問題:高可用、高性能、高併發
Java特性
- 簡單性【易學】
- 面向對象
- 可移植性【一次編寫多次運行】
- 高性能【及時編譯】
- 分散式【TCP/IP處理、URL調用、遠程調用】
- 動態性【反射機制】
- 多線程【交互、實時】
- 安全性【防病毒、防篡改、異常機制】
- 健壯性
- 既是編譯型又是解釋型語言
11. 大小寫敏感
Java的三大版本
- JavaSE:標準版(桌面程式、控制台開發)
- JavaME:嵌入式開發(手機、小家電)
- JavaEE: 企業級開發(web端、伺服器開發)
JDK、JRE、JVM
1. JDK:Java Development Kit 【Java開發包】
2. JRE:Java Runtime Environment 【Java運行時環境】
3. JVM:Java Virtual Machine 【Java虛擬機】
JDK7和JDK8之間的區別
JDK7
- JDK7新特性,數字之間可以用下劃線分割
JDK8
JDK卸載
- 刪除安裝目錄
- 刪除環境變數配置JAVA_HOME
- 刪除path下的關於java的目錄
- java -version檢查
JDK安裝
- 百度搜索jdk8,找到下載地址
- 同意協議、下載對應版本安裝包
- 雙擊安裝
- 安裝目錄建議找易找到的,並記住安裝路徑
- 配置環境變數
- 我的電腦 --->右鍵 --->屬性 --->高級系統設置
- 環境變數 --->系統變數 --->新建系統變數--->JAVA_HOME--->安裝路徑
- 配置path變數
- 系統變數裡面找到path --->新建%JAVA_HOME%\bin --->新建%JAVA_HOME%\jre\bin
- 打開cmd ---> java -version 檢查,出現安裝的版本及成功
控制台輸出HelloWorld【第一個java程式】
-
新建一個文件【文件名HelloWorld文件名和文件里的class後面的要一致】,將尾碼改為.java
-
在裡面編寫代碼
-
public class HelloWorld{ //HelloWorld與文件名一致 public static void main(String[] args){ System.out.println("Hello,World!"); } }
-
控制台進到文件目錄,進行編譯
-
javac HelloWorld.java
-
運行
-
java HelloWorld
使用IDEA開發
-
下載安裝包,安裝
-
安裝時需要根據電腦版本選擇是 “.32” 還是 “.64” ,還有勾選 ".java" 。
-
破解
使用IDEA快捷鍵
1、psvm + enter 可以快速補充
public static void main(String[] args) {
}
2、sout + enter 可以快速補充
System.out.println();
3、Ctrl + d 複製當前行到下一行
Java基礎語法
註釋
1、//單行註釋 //
2、//多行註釋 /* 註釋 */
3、//JavaDOC /** 文檔註釋 */
標識符【關鍵字】
1、所有標識符首字母必須以字母(A-Z,a-z),美元符號($),下劃線(—)開始
2、首字母之後可以任意
3、大小寫敏感
4、不能使用關鍵字作為變數名和方法名
5、String不是關鍵字,是一個類
數據類型
1、java是強類型語言【變數使用複合類型且必須先定義再使用】
2、兩大類【基本類型、引用類型】
3、primitive type 基本類型 【byte(1B)、short(2B)、int(4B)、long(8B)、float(4B)、double(8B)、char(2B)、boolean(1b)】【long類型要在後面加上L,float要在後面加F】
4、reference type 引用類型 【類、介面、數組】
public class Demo01 {
public static void main(String[] args) {
//====================================================
//int型 【int(4B)】
//====================================================
int i = 10;
int i2 = 010; //八進位0
int i3 = 0x10; //十六進位 0x
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
System.out.println("====================");
//====================================================
//float型 && double型 【float(4B)、double(8B)】
//====================================================
float f = 0.1f;
double d = 1.0/10;
System.out.println(f);
System.out.println(d);
System.out.println(f==d);
System.out.println("====================");
//====================================================
//浮點數拓展? 銀行業務怎麼表示?錢
//BigDecimal 數學工具類
//====================================================
//float 有限 離散 舍入誤差 大約 接近但不等於
//最好完全避免使用浮點數標記!!!
//最好完全避免使用浮點數標記!!!
//最好完全避免使用浮點數標記!!!
float d1 = 23169541465661f;
float d2 = d1 + 1 ;
System.out.println(d1==d2);
System.out.println(d1);
System.out.println(d2);
System.out.println("====================");
//====================================================
//char型 【char(2B)】
//字元拓展?
//所有字元本質還是數字 編碼 Unicode 2位元組 0-65536 Excel 2^16 = 65536
//====================================================
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println((int)c1);
System.out.println(c2);
System.out.println((int)c2);
System.out.println("====================");
//轉義字元
// \t 製表符 tab
// \n 換行
System.out.println("hello\thello");
System.out.println("hello\nhello");
System.out.println("====================");
//====================================================
//boolea型 【boolean(1b)】
//====================================================
boolean flag = false;
if(flag == true){ } //新手
if(flag){} //老手
//上面兩個if判斷功能一致
//====================================================
//String 不是數據類型,它是一個類!!!!!!
//====================================================
String s1 = new String("nihao");
String s2 = new String("nihao");
String s3 = "nihao";
String s4 = "nihao";
System.out.println(s1==s2);
System.out.println(s3==s4);
System.out.println("====================");
}
}
自己找找看有哪些轉義符?
位
- 位(bit):電腦內部最小存儲單位
- 位元組(byte):計算數據處理基本單位,習慣B表示
- 1B = 8bit
類型轉換
註意點:
1、不能對boolean類型進行轉換
2、不能將最想類型轉換為不相干的類型
3、轉換的時候可能存在記憶體溢出、或者精度問題
強制轉換 高到低 (類型)變數名
低--->高:byte , short , char , int ,long , float , double
自動類型轉換 低到高【不需要處理】
package base;
public class Demo02 {
public static void main(String[] args) {
//強制轉換 高到低 (類型)變數名
//自動類型轉換 低到高
int i = 128;
byte b = (byte)i; //記憶體溢出
double d = i;
System.out.println(i);
System.out.println(b);
System.out.println(d);
System.out.println("===============================");
System.out.println((int)23.7);
System.out.println((int)-45.75f);
System.out.println("===============================");
char c = 'a';
int i2 = c+1;
System.out.println(i2);
System.out.println((char)i2);
System.out.println("===============================");
//操作比較大的數,註意溢出
//JDK7新特性,數字之間可以用下劃線分割
int money = 10_0000_0000;
int years = 20;
int total = money*years; //負數,計算溢出
long total2 = money*years; //負數,計算之後轉換為long類型,同樣會溢出
long total3 = money*((long)years); //先將years強轉為long,再計算
System.out.println(total);
System.out.println(total2);
System.out.println(total3);
/*
小寫的L(即l)也可以,但是在編寫軟體里,他和1非常相似,為避免認錯,代碼規範易讀都用L來標記long類型
*/
}
}
變數、常量、作用域
註意點:
1、每個變數都要有類型
2、變數名必須是合法的標識符
3、變數生命是一條完整的語句,所以必須以分號結束
4、不建議一行定義多個變數
- 類變數:加了static關鍵字
- 實例變數:從屬於對象,在類中有效,可以不初始化就使用,會有預設值【boolean預設false ,除了基本類型其餘的是null】
- 局部變數:使用之前必須實例化並賦值,作用域只在它聲明的方法內部有用(即它所在的{}內有用)
package base;
public class Demo03 {
//變數 type varName [=value][{varName[=value]}];
//常量一般用大寫 final
static double salary = 2500;
String name;
int age;
//修飾符不存在先後順序
static final double PI = 3.14;
public static void main(String[] args) {
int i = 10;
System.out.println(i);
Demo03 demo = new Demo03();
System.out.println(demo.name);
System.out.println(demo.age);
System.out.println(salary);
System.out.println(PI);
}
//外部方法
public void add(){
//***
}
}
運算符
算數運算符:+ - * / %(取餘/模) ++(自增,一元運算符) --(自減,一元運算符)
賦值運算符:=
關係運算符:> < >= <= == != instanceof
邏輯運算符:&& || !
位運算符:& | ^ ~ >> << >>>(瞭解!!!)
條件運算符:? :
擴展賦值運算符:+= -= *= /=
package base;
public class Demo04 {
public static void main(String[] args) {
//二元運算符
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);
System.out.println("================================");
long aa = 123123123123L;
int bb = 123;
short cc = 10;
byte dd = 8;
System.out.println(aa+bb+cc+dd); //long 最高
System.out.println(bb+cc+dd); //int
System.out.println(cc+dd); //int
System.out.println("================================");
//關係運算符返回結果 true false
int a2 = 10;
int b2 = 20;
int c2 = 21;
System.out.println(a2>b2);
System.out.println(a2<b2);
System.out.println(a2==b2);
System.out.println(a2!=b2);
System.out.println(c2%b2);
System.out.println("================================");
//一元運算符 ++ --
int x = 1; //x=1
int y = x++; //y=1,x=2【先將x賦給y,在x+1】
System.out.println(x); //x=2
int z = ++x; //x=3【先x+1,再將x賦給z】
System.out.println(x);
System.out.println(y);
System.out.println(z);
System.out.println("================================");
//冪運算 2^3 = 8 很多運算,需要使用工具類
double m = Math.pow(2,3);
System.out.println(m);
System.out.println("================================");
//邏輯運算符
boolean f1 = true;
boolean f2 = false;
System.out.println(f1&&f2);
System.out.println(f1||f2);
System.out.println(!(f1&&f2));
System.out.println("================================");
擴展賦值運算符
int xy = 10;
int xz = 20;
a+=b; //a=a+b
a-=b; //a=a-b
System.out.println(a+b);
//三元運算符
//xx ? yy : zz 如果xx為真則結果為yy,否則結果為zz
int score = 80;
String type = score < 60 ? "不及格" : "及格";
System.out.println(type);
/*
運算符的優先順序,一元運算符最優
*/
}
}
運算符優先順序
短路原則
boolean f1 = true;
boolean f2 = false;
//短路原則
System.out.println(f2&&f1); //因為邏輯與是全為真則結果為真,所以在判斷法等於false時,就不會再執行f1的判斷了
//驗證短路原則
int flag = 5;
boolean f3 = (flag < 4)&&(flag++ < 4);
System.out.println(f3);
System.out.println(flag);
System.out.println("================================");
位運算 效率高【跟底層二級制打交道】
<< **左移 ** 相當於*2
>> **右移 ** 相當於/2
/*
A = 0011 1100
B = 0000 1101
A&B = 0000 1100 全為1,則為1
A|B = 0011 1101 都為0,則為0
A^B = 0011 0001 異或 相同則為0,否則為1
~B = 1111 0010 取反
2*8 = 16 = 2*2*2*2
<< 左移 相當於*2
>> 右移 相當於/2
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 0101 5
0000 0110 6
0000 0111 7
0000 1000 8
0001 0000 16
*/
System.out.println(2 << 3);
System.out.println("===============================");
面試題
- new對象,判斷是否相等
String s1 = new String("nihao");
String s2 = new String("nihao");
String s3 = "nihao";
String s4 = "nihao";
System.out.println(s1==s2);
System.out.println(s3==s4);
輸出結果:
flash
true
- 字元串連接符 + ,String
System.out.println(" "+a+b);和System.out.println(a+b+" ");輸出區別
前者輸出1020,後面的a+b中的+變成了連接符
後者輸出30,a+b裡面的+是運算符
int a = 10;
int b = 20;
System.out.print("\" \"+a+b:");
System.out.println(" "+a+b);
System.out.print("a+b+\" \"
System.out.println(a+b+" ");
輸出結果:
" "+a+b:1020
a+b+" ":30
- ++位置
y = x++;和z = ++x;輸出區別(各自結果)
int x = 1; //x=1
int y = x++; //y=1,x=2【先將x賦給y,在x+1】
System.out.println(x); //x=2
int z = ++x; //x=3【先x+1,再將x賦給z】
System.out.println(x); //3
System.out.println(y); //1
System.out.println(z); //3
輸出結果:
3
1
3
命名規範
- 見名知意
- 類名:首字母大寫和駝峰原則
- 常量:全部大寫,單詞之間下劃線
- 類成員變數:首字母小寫和駝峰原則(除首字母外,之後的單詞首字母大寫)
- 局部變數:首字母小寫和駝峰原則
- 方法名:首字母大寫和駝峰原則
包機制
-
為了更好地組織類
-
一般利用公司與組織的倒名作為包名(http://baidu.com就是com.baidu)
-
import 導包
-
防止命名空間重覆
JavaDOC
-
Javadoc命令是用來生成自己的API文檔
-
可用的參數信息:
- @author 作者名
- @version 版本號
- @since 知名需要最早使用的jdk版本
- @param 參數名
- @return 返回值情況
- @throws 異常聲明情況
-
cmd輸出API幫組文件方式
進到文件位置(namespace位置)
javadoc -encoding UTF-8 -charset UTF-8 文件名.java【要生成API的java類名】