摘要:讀輸入這個對象做讀入下一行的操作這個對象打印下一行數組其中所有的元素都具有相同的數據類型數組定義創建的數組會得到默認的值創建個型數組直接初始化數組可以不用給出大小有成員函數可直接使用數組變量是數組的管理者而非數組本身數組必須創建出來交給數組
1、讀輸入
Scanner in=new Scanner(System.in);//in這個對象做讀入下一行的操作 System.out.println(in.nextLine());//System.out這個對象打印下一行
2、數組
其中所有的元素都具有相同的數據類型
int []s=new int[maxn];//數組定義 new創建的數組會得到默認的0值 創建maxn個int型數組 int []s={1,2,3,4};//直接初始化數組 可以不用給出大小
有成員函數length可直接使用 數組變量是 !**數組的管理者**!而非數組本身! 數組必須創建出來交給數組變量管理,數組變量之間的賦值是**管理權限**的賦予, 數組變量之間的比較是判斷**是否管理同一個數組** eg. s是有maxn個元素的數組的管理者
3、包裹類型
基礎類型 包裹類型 boolean Boolean char Character int integer double Double
可以通過包裹類型獲取該類型的最大最小值,判斷是否是字母什么的 可以有更多的功能擴展
4、Math類
Math.abs(-12);//12 Math.pow(2,3);//8.0 浮點運算 Math.random();//生成0~1之間的隨機數 可以*100 獲取0~100之間的隨機數 Math.round();//四舍五入
5、字符串
字符串變量并不存放字符串,也不是字符串所有者,它是**字符串的管理者** Java的字符串是”不可變“對象,所有對字符串的操作都是產生一個新的字符串, 而不是對原來的字符串進行修改 String的變量是對象的管理者 eg. String s=new String("a string");//創建了一個String的對象,并初始化 //創建了這個對象的管理者s 讓s管理這個對象 輸入字符串,in.next;//讀入一個單詞,以空格為界 in.nextLine();讀入一整行 字符串的比較: if(input=="bye") 比較的是 是否指向的是同一個String對象 很大可能return false 因為input和"bye"是兩個不同的字符串 if(input.equals("bye") 才是比較內容是否相同 對字符串的操作: s.charAt(index);//返回在index上的單個字符 0~length()-1 //注意 不能用for-each循環來遍歷字符串 for(char c:s){}不行 //for-each只適合于數組或者可枚舉類型 s.substring(n);//得到從n號位置到末尾的全部內容 s.substring(b,e);//b號位置到e號位置之前的內容 左閉右開 s.indexOf(c);//得到c字符所在位置,-1表示不存在 s.indexOf(c,n);//從n號位置開始找 s.indexOf(t);//找到字符串t所在位置 返回值為子串開始的index s.lastIndexOf();//從右邊開始找 eg.要找一個串中的第二個3 String s="0123453"; int loc=s.indexOf("3"); s.indexOf("3",loc+1); s.startsWith(t);//s是否是以字符串t開頭的 s.endsWith(t); s.trim();//把字符串兩端的空格刪掉 s.replace(c1,c2);//所有的c1換成c2 s.toLowerCase();//所有字符都變成小寫 s.toUpperCase();
6、 本地變量不會被自動初始化 有可能會報錯,所以要記得初始化
本地變量:定義在函數內部,作用域和生存期都在函數內部, 而成員變量(自動初始化為0或null)的生存期是對象的生存期,作用域是類內部的成員函數
7、類和對象
VendingMachine v=new VendingMachine();//對象變量是對象的管理者
v.insertMoney()中使用的成員變量是v的成員變量實際上**是通過this實現的**
this:
this是成員函數的一個特殊的固有的**本地變量**,它表達了調用這個函數的 **那個對象** 在成員函數內部直接調用自己的其他函數,也可以通過this來實現(通常會省略)
一個類的成員變量可以是其他類的對象
8、封裝:把數據和對數據的操作放在一起,并且用這些操作把數據掩蓋起來 (面向對象核心概念)
直接手段: 類的所有成員變量必須是private的 所有的public的函數,只是用來實現這個類對象或類自己要提供的服務的,而不是用來直接訪問數據。
private(類所私有的)只能用于成員變量和成員函數:
public class Display{ private int num; private int getValue(){ };//不可以在getValue函數中定義變量的時候使用private }
注意:
只有這個 類內部(類的成員函數和定義初始化) 可以訪問
這個限制是對類的,而不是對對象的
//private定義的變量,限制其他類的對象訪問本類對象的這個變量,但不限制本類的其他對象訪問奔雷的private數據
public class Fraction{ private int a; private int b; public Fraction plus(Fraction r) { int fenzi=a*r.b+r.a*b;//這個完全可以實現哦,因為private的限制不是對對象的,他們都在Fraction類里 int fenmu=b*r.b; return new Fraction(fenzi,fenmu); } }
9、包
10、類變量和類函數
類是描述,對象是實體
在類中所描述的成員變量,實際上是位于這個類的各自的對象中的
但是如果某個成員由static關鍵字修飾,它就變成了屬于整個類的了
每個對象都可以訪問到這些類變量和類函數并且可以直接通過名字調用
類函數不屬于任何對象,無法建立與調用他們的對象的關系,也就不能直接訪問任何非static的成員變量和成員函數,必須要通過對象進行調用
this表示當前本對象,類函數和對象沒有任何關系,所以類函數沒有this
通過一個類的對象對static變量進行了修改,那么其他對象中的這個變量的值也都被修改了,因為這個變量是類的,而不是多帶帶某一個對象的
可以通過 類.static型變量 對該變量進行訪問
static變量只能被初始化一次,在第一次類的裝載的時候被初始化
11、對象容器
究竟把什么放進容器里了?對象的管理者.
泛型類:eg. ArrayList 這種泛型類是一種容器
無限放東西,計算機有容量就能一直放,數組無法實現,要用容器實現
容器類有兩個類型:容器的類型(ArrayList)、元素的類型(String)
import java,util.ArrayList; public class NoteBook{ private ArrayListnotes=new ArrayList (); //ArrayList類中常用成員函數 //notes.add(s); notes(location,s);//把s放在原來location前面,即放在location位置,原來location位置以后的東西順序后移 //notes.size(); //notes.remove(index); //notes.toArray(a);//把這個ArrayList里的元素都復制到a數組中,然后進行輸出,如下圖所示,可以省略一個循環 }
12、對象數組
當數組的元素的類型是類的時候,數組的每一個元素都只是對象的管理者而非對象本身, 僅僅創建數組并不意味著創建了其中的每一個對象,String[] a=new String[10],此時對象還沒有創建出來,如果是int,則會產生a[0]=0;
for-each循環
for(int k:ia){ k++; }//沒有任何用,因為這里的k只是原數組的復制品 對于對象數組卻有所不同 因為 數組管理的那塊東西 和 for-each循環里那個東西管理的 是同一個東西,會實現修改
13、集合容器
HashSets=new HashSet ();//集合不保存重復鍵值 System.out.println(s);//可以直接輸出 [second,first] ArrayList也可以 //因為他們都實現了toString public String toString(){ return ""+s[i]; }
class Value{ private int i; } main(){ Value v=new Value(); v.set(10); System.out.println(v);//輸出的是奇怪的東西,繼續在Value類里實現toString才能夠輸出 //return ""+i; }
注意:
集合容器中的元素不是在一塊連續的存儲空間內的,各個元素的位置是不連續且無序的,所以無法用index去索引任何一個元素的地址**(集合是無序的)** 因此,也不能用get()來獲取某個位置的元素
14、散列表
HashMapm=new HashMap ();//注意不能是int,因為在容器中所有元素都必須是對象 m.put(key,value); m.get(key);//可以獲取到對應的value m.keySet();//獲取Set中不重復的鍵值個數 //同樣也可以直接用println輸出m
15、繼承與多態
子類可以繼承得到父類的所有東西(構造方法除外,它是每個類所獨有的),但并不代表全部可以使用。 每個成員有不同的訪問屬性 父類成員訪問屬性 在父類中的含義 在子類中的含義 public 對所有人開放 對所有人開放 protected 只有包內其他類、自己和子類可以訪問 只有包內其他類、自己和子類可以訪問 private 只有自己可以訪問 不能訪問 缺省 只有包內其他類可以訪問 如果子類和父類在同一個包內:只有包內其他類可以訪問 否則,相當于private,不能訪問
protected:包內和子類可訪問
缺省:在父類所在的包內可見,如果子類和父類不在一個包中,則也不能訪問
private型變量在子類中也是存在的,只是不能直接訪問,在子類中也不能更改他們的屬性,如果定義了一個同名變量,則是與父類里面那個無關的獨立的一個變量
構造一個子類對象時,先回調用父類的構造函數,再調用自己的,父類空間先被初始化,然后子類空間才會被初始化。 這樣就有 可能會出現問題。
如果父類的構造函數是有參構造函數,那么子類如何給他傳參呢??
這里用到的是super(title); 父類構造函數會根據super中的參數去尋找它里面合適的構造函數
關于super:
//super是用來給父類傳遞參數的 super();//一個構造函數中只能使用一次super**(因為只有一個父類呀)**,并且super要放第一行
子類和父類中都有print();時 用super.print();調用父類的
多態變量
對象變量可以保存其聲明的類型的對象,或者該類型的**任何子類型的對象** 保存**對象類型**的變量是**多態變量**(是指一個變量可以保存不同類型的對象)
子類的對象可以被當作父類的對象來使用:
賦值給父類的變量
傳遞給需要父類對象的函數
放進存放父類對象的容器里
Java中所有對象變量都是多態的,他們能保存不止一種類型的對象
他們可以保存聲明類型的對象,或聲明類型的子類的對象
當把子類的對象賦值給父類的變量(不是對象對對象的賦值,而是讓這兩個東西管理同一個東西)的時候——發生了向上造型
*C++里面可以做對象對對象的賦值,但Java不能*
Vechicle v; Car c=new car(); v=c; c=v;//編譯錯誤,父類的對象不能賦值給子類的變量 c=(Car)v;//v實際管理的是Car類型才行 (造型:聲明類型和動態類型(實際傳遞進去的)不符) //這樣可能有風險 取決于v當時管理的對象是什么 只有它管理Car類型時才能被成功造型 //造型(括號圍起來):對象本身并沒有發生任何變化,當做另一個類型來看待,不是“類型轉換” //運行時有幾只來檢查這樣的轉化是否合理 eg. ClassCastException
多態
子類方法覆蓋了父類方法,但具有相同的方法名稱和參數表,仍然是父類中定義的那個方法,不過是新版本,子類對象調用執行子類自己的這個方法,父類對象執行父類的
注意是對象而非變量,因為一個類型為父類的變量有可能指向的是一個子類的對象
函數調用的綁定:通過對象變量調用函數時,調用哪個函數
靜態綁定:根據變量的聲明類型決定 動態綁定:根據變量的動態類型決定(默認)//運行的時候才知道是什么類型
在成員函數中調用其他成員函數也是通過this這個對象變量來調用的
所以所有成員函數的調用都應該看做是動態調用
覆蓋(override)
子類方法和父類方法具有相同的方法名稱和參數表的一對函數構成覆蓋關系 通過父類變量調用存在覆蓋關系導函數時,取決于**當時所管理的對象的類**的函數
Object類
所有的類都是繼承自Object的
成員函數:
toString(); equals();
向下造型:
public boolean equals(Object obj){//之前穿傳去的是CD類型,所以下面要做一個向下造型 CD cc=(CD)obj; return artist.equals(cc.artist)); }
@Override
告訴編譯器覆蓋了父類的函數,注意**括號參數類型也會不能改的哦,public也不能去掉** 會產生編譯錯誤,加了@的話
16、抽象
抽象類(abstract)不能創建任何對象,僅僅表達接口,而不具體實現細節。但是**可以定義變量**,要**繼承了這個抽象類的對象**才可以賦給這個變量。
eg:
class Circle{...} Shape c; c=new Circle();//c實際是管理了子類的對象
抽象類中可以實現抽象方法,也用abstract修飾,抽象方法是不完全的,它只是一個方法簽名而完全沒有方法體。 如果一個類有了抽象方法,這個類就**必須聲明為抽象類**。 如果父類是抽象類,子類就必須**覆蓋(即實現)所有**在父類中的抽象方法,否則子類也成為一個抽象類
public abstract class Shape{ public abstract void draw(Graphics g);//注意不能有{},不然就會報錯 }
17、接口:規定長啥樣
接口(interface)是純抽象類 所有的成員函數都是抽象函數 所有的成員變量都是public static final
Cell是一個接口類型,Field如果想要一個Cell,此時Fox和Rabbit都實現了這個接口,從而他們可以作為Cell給Field使用。
public interface Cell{//interface和class是同一級別,可以說是一種特殊的類 void draw(Grphics g,int x,int y,ints size); }
類用extends,接口用implements
類可以實現很多接口
接口可以繼承接口,但是不能繼承類
接口不能實現接口
設計程序時,要先定義接口,再實現類
任何需要在函數間傳入傳出的一定是接口而不是具體的類 ???留坑 不是很懂
18、instanceof
if(an instanceof Rabbit)//用于判斷an是不是Rabbit類型的變量
20、 內嵌類型:在類或接口內部定義的自定義類型
class A{//包圍類 static class B{ static int x;}//內部類 可添加雨多成員函數才能具備的東西,eg. static,private interface C{int y=0;}//內部接口 }//編譯后將產生三個文件:A.class A$B.class A$C.class
內部類可以訪問囿類所有成員,包括私有
要訪問內部類,需要通過囿類或囿類對象來訪問
如果要將囿類對象自身傳給內部類對象: 囿類對象名.this
外部類和內部類可以任意互訪,但是外部類要通過創建內部類的對象來訪問內部類
若 內部類 中有靜態成員,則這個內部類必須是靜態內部類 才能夠通過A.B.x直接調用起哄的靜態成員
21、GUI圖形界面
JButton類:可以實現一個按鈕JButton bt=new JButton("單步");
JFrame類:實現一個框架
Swing:
所有東西都是部件,放在容器中,容器管理部件的時候會使用布局管理器(五個方位參數),默認是BorderLayout;
采用事件監聽器的事件處理模型,某個對象實現相關接口就可以成為相關事件的監聽器,就可以注冊到它想監聽的組件上。
frame.add(bt,BorderLayout.NORTH);//一定要注意指定位置,否則會覆蓋掉之前的東西 //因為參數缺省的時候默認是center,會覆蓋掉前面的
//匿名類 bt.addActionListener`(` new ActionListener(){ public void actionPerformed(ActionEvent e){ ... } } `)` //ActionListener里面只有actionPerformed()函數
在new對象的時候給出類的定義 形成匿名類
匿名類可以繼承某類,也可以實現某接口
Swing的消息機制廣泛使用匿名類
//內部類 class StepListener implements ActionListener{ public void actionPerformed(ActionEvent e){ ... } } bt.addActionListener(new StepListener());//注意傳進去要是實現了ActionListener的對象
定義在別的類、函數內部
能直接訪問外部類的資源,包括私有
外部是函數時,只能訪問那個函數里final的變量
反轉控制
把一個實現了ActionListener接口的對象交給JButton(注冊),JButton就能反過來去調用里面的actionPerformed()函數,實現相關操作。(也叫Swing的消息機制)
MVC模式
22、異常處理
import java.util.Scanner; class test { public static void main(String[] args) { int []a=new int[10]; int idx; java.util.Scanner in=new Scanner(System.in); idx=in.nextInt(); try{ a[idx]=10; System.out.println("hi"); }catch(ArrayIndexOutOfBoundsException e) { System.out.println("caught"); } catch(Typel e){ ... } ... } }//try-catch語句捕獲異常,后面可以跟著很多catch
拿到異常對象之后:
String getMessage();
String toString();
void printStackTrace();
如果沒辦法處理,可以再度拋出
catch(Exception e){ System.err.println("An exception was thrown"); throw e; }//(如果在這個層面上需要處理,但是不能做最終的決定,就繼續拋出,給下一個catch處理)
什么能扔?
任何繼承了Throwable類的對象//throws XX
Exception類繼承了Throwable
throw new Exception()
throw new Exception("HELP");//兩種形式
catch怎么匹配?
Is-A關系
拋出自誒異常會被捕捉父類異常的catch捉到
能捕捉到任何異常:
catch(Exception e){ System.err.println("Caught an exception"); }
如果你的函數可能會拋出異常,就必須在函數頭部加以聲明
void f() throws TooBig,TooSmall{ ... }
23、I/O流
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74868.html
摘要:我的學習筆記匯總標簽筆記分為兩大部分和筆記內容主要是對一些基礎特性和編程細節進行總結整理,適合了解基礎語法,想進一步深入學習的人如果覺得不錯,請給,這也是對我的鼓勵,有什么意見歡迎留言反饋目錄基礎鞏固筆記反射基礎鞏固筆記泛型基礎鞏 我的java&javaweb學習筆記(匯總) 標簽: java [TOC] 筆記分為兩大部分:javase和javaweb javase javawe...
摘要:最近系統整理了一套初學者最佳的學習方法以及會遇到的坑等,希望對你有所幫助。正常的智商其實,學習并不需要所謂的數學邏輯好,需要英語水平棒。大周期每天學習時間五個小時以上的,建議學習周期。三學習時會遇到的坑不知道學習的重點,下面學習路線會畫。 最近系統整理了一套java初學者最佳的學習方法以及會遇到的坑等,希望對你有所幫助。 目錄: 一、學習java的前提 二、學習java的方法 三、學習...
摘要:而面向搜索引擎,就是我們要及時的使用百度谷歌遇到問題無法解決,先別急著放棄,可以去網絡尋找答案,你的坑大部分別人都已經走過了,大部分都可以找到合適的解決方案。 showImg(https://segmentfault.com/img/remote/1460000019236352?w=866&h=456); 前言: ●眾多的語言,到底哪一門才是適合我的?●我們為什么要學習Java語言呢...
摘要:請回復這個帖子并注明組織個人信息來申請加入。權限分配靈活,能者居之。數量超過個,在所有組織中排名前。網站日超過,排名的峰值為。導航歸檔社區自媒體平臺微博知乎專欄公眾號博客園簡書合作侵權,請聯系請抄送一份到贊助我們 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=...
摘要:請回復這個帖子并注明組織個人信息來申請加入。版筆記等到中文字幕翻譯完畢后再整理。數量超過個,在所有組織中排名前。網站日超過,排名的峰值為。主頁歸檔社區自媒體平臺微博知乎專欄公眾號博客園簡書合作侵權,請聯系請抄送一份到贊助我們 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1...
閱讀 880·2021-11-15 11:38
閱讀 1600·2021-09-24 09:48
閱讀 838·2021-09-24 09:47
閱讀 2270·2021-08-26 14:15
閱讀 3497·2019-08-30 11:09
閱讀 2602·2019-08-29 16:55
閱讀 1582·2019-08-26 14:01
閱讀 3033·2019-08-23 16:47