1. 程式人生 > 實用技巧 >JavaSE階段基礎內容(不包括I/O,常用類,集合)

JavaSE階段基礎內容(不包括I/O,常用類,集合)

初始JAVA

Write Once , Run Anywhere

Java的三大版本

  1. JavaSE 標準版(桌面程式,控制檯開發)
  2. JavaME 嵌入式開發(手機,小家電) (差不多死了)
  3. JavaEE E企業級開發(web端,伺服器開發)

從JavaSE->JavaEE

從普通的程式程式碼進階學習,打好基礎。

win10截圖快捷鍵

shift + win + s

JDK JRE JVM

JDK: java development kit (java開發者工具)

JRE:java runtime environment (java執行環境)

JVM:java virtual machine (java 虛擬機器是跨平臺的核心)

第一個HelloWorld

快速開啟cmd方法(不用cd cd cd)

在檔案絕對路勁前加cmd+空格

在cmd中如何執行

javac 代表編譯+檔案的名稱字尾

之後 java hello 就可以運行了。 字尾.class可以省略

注意檔名和類名一致!

java程式執行機制

編譯型(compile):將程式全部轉換為低階語言,再執行類似於筆譯,翻譯完整本書。

解釋型:一邊翻譯一遍執行,類似於口譯

當我們執行javac的時候,相當於經過Java編譯器 。

java註釋

IDEA中修改comments的顏色

FILE->setting->Java->comments->line commnets and block comments

單行: // 快捷鍵:ctrl+/

多行:/* ----- */ 快捷鍵: shift + ctrl+ /

javadoc:文件註釋

/** 

*@Description HelloWorld

*@Author hujesse4

*/

java 識別符號

關鍵字

所有的識別符號都應該以字母(a-z或A-Z)或者$,或者_開頭

像7DDh 就是不合法的

大小寫敏感

資料型別

分為二類:基本型別(primitive type)和引用型別(.reference type)

不要使用浮點數進行比較。

布林值拓展:

boolean flag=true;
if(flag==true){}
if(flag){}
// LESS IS MORE  程式碼要精簡易讀

資料型別轉換

強制轉換:(型別)變數名 高--低

自動轉換 低--高

int i =128;
byte b=(byte)i // 屬於由高到低需要強轉
// ==========
int i=128;
double b=i; //  低到高

由低到高的排序:

byte->short->char->int->long->float->double

小劇場:

JDK7的新特效,數字之間可以用下劃線分割

int money=10_0000_0000 // 可以輕鬆看出10萬 
sout(“money”) 時也不會有什麼變化

String 是一個類,引用類。型

變數作用域

類變數

例項變數

區域性變數

public class Variable{
	static int allClicks=0;     // 類變數
	String str="helloworld";    // 例項變數
	public void method(){
	int i=0;          // 區域性變數
	}
}

jvav中的常量

使用final 修飾

static final doudle PI=3.14;

變數的命名規範

所有變數,方法,類名:見名知意。

類成員變數:首字母小寫和駝峰原則:monthSalary

區域性變數:首字母小寫和駝峰原則

常量:大寫字母和下劃線;MAX_GoodMan

類名:首字母大寫和駝峰原則:Man

方法名:首字母小寫和駝峰原則:run()

運算子

if (a instanceof b) 
if (a!=b)

只要講一下位運算子:

A=0011 1100
B=0000 1101
-------------------
A&B=0000 1100
A|B=0011 1101
A^B=0011 0001
~B=1111 0010

還有<< >>

2*8 如何計算?
2*2*2*2 相當於0000 0010 左移二位 -》0000 1000
<<  左移    *2  
>>  右移    /2

字串如何連線 ,左側拼接

字串連線符 + ,String
String c = ""+a+b;
a=10;b=20
c=1020;
but 
c=a+b+""
c=20;

三元運算子 x ? y : z

String type = score<60?"不及格":"及格";

package機制

package = 檔案file

一般用公司域名倒置。 com.***就是這麼來的

使用者互動Scanner

java.util.Scanner 是java5的新特性 可以通過Scanner類來獲取使用者的輸入。

Scanner s = new Scanner(System.in);
通過Scanner類的next()與nextLine()方法獲取輸入的字串,在讀取之前我們一般需要使用hasNext()與hasNextLine()判斷是否有輸入的資料;
當我們鍵盤輸入hello world
sout<<s.next();
hello.
說明next()擷取空格之前的字串。
而s.nextLine()擷取enter鍵之前的
    public static void main(String[] args) {
    // 從鍵盤接受資料
        Scanner scanner=new Scanner(System.in);
        // 判斷是否有輸入
        if(scanner.hasNextLine()){
            String str=scanner.nextLine();
            System.out.println("輸出的內容位"+str);
        }
    scanner.close();

流程控制

順序結構

選擇結構

if單選則結構
if雙選擇結構
if多選擇結構
巢狀的if結構
switch多選擇結構

字元的本質還是數字

JDK7的新特性,表示式結果可以說字串
String name=湖
switch(name){
case"湖":
cout("123");break;
case"卡了"
cout(12323);break;
}

IDEA實現反編譯

1.開啟File->Project Structure 找到project conpiler output

去資料夾找到.class 檔案 . 複製

2.在IDEA裡!

把複製的.class檔案v到包裡面下面是結果

反編譯之後呢,發現他的程式碼與我們自己寫的不是百分百吻合

迴圈結構

while 迴圈
do...while 迴圈
for 迴圈

print是不換行 println要換行

for迴圈是最有效,最靈活的迴圈結構

在IDEA中,可以使用100.for快速生成for迴圈
100.for = for(int i=0;i<100;i++){}
列印99乘法表
/*
1*1=1
1*2=2	2*2=4
---------------
1*9=9 -----------------9*9=81
============================
         for (int i=1;i<10;i++){
             for (int j=1;j<=i;j++)
                 System.out.print(j+"*"+i+"="+i*j+"\t");
             System.out.println();
         }
增強for迴圈

主要用於陣列或集合的增強for迴圈

for (Type x : array)

int [] array={10,20,30,40,15};
for (int x:array){
sout(x)    //    
}
Break Continue
break 用於強行退出迴圈,不執行迴圈中剩餘的語句
continue 用於跳出迴圈體尚未執行的語句
while(i<100)
if (i%10==0){
sout(i);
continue
}
此時10的倍數就不會輸出,程式也不會終止
列印三角形
 for (int i = 1; i <= 5; i++) {
            for (int j=5;j>=i;j--)
             System.out.print(" ");
            for (int j=1;j<=i;j++)
               System.out.print("*");
            for (int j=1;j<i;j++)
               System.out.print("*");
            System.out.println();
        }
列印空串!

方法

何謂方法

拿System.out.println() 來分析,System是系統的一個類,out是一個System的輸出物件,println()是一個方法。

呼叫系統類裡面的標準輸出物件out中的println方法

方法就是函式的意思
方法的定義及呼叫

方法過載
命令列傳參
package com.hujesse.Scanner;
public class forDemo04 {
    public static void main(String[] args) {
        for (int i = 0; i < args.length; i++) {
            System.out.println(args[i]);
        }

    }
}

通過命令列的方式進入demo04 javac進行編譯

然後返回src目錄。因為包的關係

可變引數

最重要的遞迴

遞迴就是:A方法呼叫A方法!自己呼叫自己

public static int f(int n){
	if(n==1) return 1
	else
	return n*f(n-1);

}

能不用遞迴就不要用遞迴

陣列

陣列概述

陣列是相同資料型別的有序集合

陣列描述的是相同型別的若干個資料,按照一定的先後次序排序組合而成 每個資料稱為一個數組元素,可以通過下標來訪問

陣列宣告建立
dataType[] arrayRefVar;   // 首選的方法
dataType arrayRefVar[];   // 相同的方法,但不是首選
java語言使用new操作符來建立陣列,語法如下:
dataType[] arrayRefVar = new dataType[arraySize];
int [] nums = new int[10]
陣列的元素是通過索引訪問的,陣列索引從0開始
獲取陣列長度: arrays.length

記憶體分析

對於八種基本資料型別,byte,short,int,long,float,double,char,boolean 這八種類型儲存時是儲存在記憶體中的 棧記憶體中,而引用資料型別,如類型別,陣列型別,物件型別的值是存在記憶體中的堆記憶體中


陣列本身就是物件,因為陣列也是new出來的。java中的物件是在堆中的。

陣列使用(初始化)
//靜態初始化
int []a = {1,2,3,4,5};
// 動態初始化
int b[] = new int[10];
如果沒賦值,隱式值為0
陣列的遍歷
1. foreach迴圈,idea中快捷鍵為陣列名.fro
2.普通for迴圈
* 陣列作方法傳參
*陣列作返回值
多維陣列
定義:int a[][]=new int[2][5];
和c++相比真的簡單太多了不用二次new,還要最終銷燬
Arrays類
陣列的工具類java.util.Arrays,API中提供了一個工具類Arrays供我們使用
檢視JDK幫助文件
Arrays類中的方法都是static修飾的靜態方法,在使用的時候可以直接使用類名進行呼叫
========================
具有一下常用功能
1.給陣列賦值:通過fill方法
2.對陣列排序:通過sort方法,按升速
3.比較陣列,通過equals方法比較陣列中元素值是否相等
4.查詢陣列元素:通過binarySearch方法能對排序好的陣列進行二分查詢
稀疏陣列

物件

什麼是面向物件

本質:以類的方式組織程式碼,以物件的形式組織(封裝)資料

先有物件後有類。物件是具體的事物,類是抽象的,對物件的抽象

三大特性:封裝,繼承,多型

this
public class Student{
	String name;
	int age;
	public void study(){
		sout(this.name+"在學習");
	}
}
this 代表當前物件

類是抽象的,需要用new來例項化一個物件。、

修飾符的範圍:
public > protected > Default > private
構造器

分為有參和無參,目的是為了初始化物件。快捷鍵alt+insert 可以快速生成構造方法。

1. 和類名相同
2.沒有返回值
作用:new本質在呼叫構造方法。初始化物件的值

建立物件記憶體分析

注意:方法區也是堆的一部分。
封裝(資料的隱藏)

1.設計程式要“高內聚,低耦合”高內聚就是類的內部資料操作自己完成,不允許外部干涉;低耦合:僅暴露少量的方法給外部使用

2.(封裝)資料的隱藏

通常,應禁止直接訪問一個物件中資料的實際表示,而應通過操作介面來訪問。即私有屬性,get/set

set 方法也可以進行值的校驗
public void setAge(int age){
	if (age>120||age<0)
		this.age=0;      // 當年齡不合法
	else
		this.age=age       // 合法
}
繼承(extends)

JAVA類中只要單繼承,沒有多繼承。

繼承是類和類之間的一種關係。初次之外,類和類之間的關係還有依賴,組合,聚合等

子類(派生類)繼承父類 is a 的關係

1.Object類

ctrl + h 可以開啟一個繼承樹
java所有的類,都預設直接或間接繼承Object
such as
public class person /* extends Object */
	{

		}	

2.super

spuer 注意點
1. super呼叫父類的構造方法,必須在構造方法的第一個
2.spuer必須只能出現在子類的構造方法中。
3.super和this不能同時呼叫構造方法
不同:
this=本身呼叫者
super=父類物件
構造方法:
this(); 本類的構造;
super(); 父類的構造;

3.方法重寫==》 多型

給出父類B,子類A

public class B{
	public static void test(){
		Sout("B=>test");
	}
}
public class A extends B{
	public static void test(){
		Sout("A=>test");
	}
}

Application.java

psvm{
	A a = new A();
	a.test();        // 輸出為A=>test
	B b = new A();
	b.test();      // 輸出為B=>test 但如果A,B二個類的方法沒有static,則 輸出為A=>test
}

父類的呼叫指向子類.

只有非靜態方法才叫重寫!!
只要子類繼承了父類才有重寫這一說法。
為什麼需要重寫: 父類的功能子類不一定需要,或者不一定滿足
多型·
既同一方法可以根據傳送物件的不同而採取不同的行為方式
1.父類引用指向子類的物件
2.把子類轉換為父類,向上轉型
3.把父類轉換為子類,向下轉型4,強制轉換

static關鍵字

程式碼塊執行次序

public class demo{
{
	sout("預設程式碼塊")
	}
static{
		sout("靜態程式碼塊")
        }
public person(){
		sout("構造方法")
	}	
psvm{
		Person pers = new person();
	}
}
輸出的是靜態-》預設=》構造程式碼塊
static只執行一次,隨類一起載入,static的東西載入到堆裡面的靜態資源區

static nb的地方

抽象(abstract)類

使用:在類和方法前加abstract修飾符

如果子類繼承了一個抽象類,那麼子類必須實現父類所有的抽象方法。

類是單繼承,但介面可以多繼承
1. 不能new一個abstract類,只能靠子類去實現;約束!
2.抽象類可以寫普通的方法。
3.抽象方法必須在抽象類中。

介面

普通類:只要具體實現
抽象類:具體實現和規範(抽象方法)都有
介面:只要規範!
定義介面的時候,如
public interface UserService{
		public abstract void run(); 
	}
// 其實public 和abstract都是被省略了的
多繼承:
public class UserService implements UserService,TimeService
可以繼承多個
介面與抽象類的區別:
1. 介面使用interface 和 implements   可以多繼承
2.抽象類使用 abstract 和 extends     只能單繼承

內部類

public class Outer{
	private int id;
	public void out(){
		sout("這是外部類");
	
	public class Inner{
			public void in(){
					sout("這是內部類");
				}
		}
	
	}
}

psvm{
	Outer outer = new Outer();
	Outer.Inner inner = outer.new Inner();
	inner.in();
	}

很抽象的例項化內部類。

一個java檔案中,可以有多個class類,只能有一個public。

Error and Expection

什麼是異常

異常:Exception ,程式執行過程中,非常可能遇到剛剛提到的這些異常問題。

Error與Exception的區別:Error通常是災難性的致命錯誤,是程式無法控制和處理的,當出現這些異常時,JVM一般會選擇終止執行緒;Exception通常情況下是可以被程式處理的,並且在程式中應該儘可能的去處理這些異常。
異常體系結構
java異常處理機制
丟擲異常
捕獲異常
異常處理五個關鍵字:
	try,catch,finally,throw,throws
選中程式碼之後,alt+ctrl+T可以操作
            int a =1;
            int b = 0;
            try {    // try程式碼塊是一個監控區域
                System.out.println(a/b);
            }catch (Exception e){    // 捕獲異常
                System.out.println("程式出現異常變數不能為0");
            }finally {
                System.out.println("finally");
            }  // finally可以不要,但一般用來處理I/0,資源的關閉。
主動丟擲異常  // 一般在方法中使用
public void test(int a,int b){
		if (b==0)
			throw new Exception();   // 主動的丟擲異常
	}
}
throws在方法上使用:
public void test throws Exception{};
自定義異常
總結

英文單詞筆記

IDE: Integrated Development Environment 整合開發環境

粗體:blod 斜體:italic

註釋:comment

line comment 單行註釋, block comment ,多行註釋

constant:常量。 initialize:初始化。

java.lang.ArrayIndexOutOfBoundsException:1 : 這個錯誤是指陣列下標越界。

object-oriented programming oop 面向物件程式設計