JavaSE階段基礎內容(不包括I/O,常用類,集合)
初始JAVA
Write Once , Run Anywhere
Java的三大版本
- JavaSE 標準版(桌面程式,控制檯開發)
- JavaME 嵌入式開發(手機,小家電) (差不多死了)
- 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 面向物件程式設計