一、堆區(qū)和棧區(qū)
棧中主要存放一些基本類型的變量。
(int, short, long, byte, float, double, boolean, char)和引用類型數(shù)據(jù)的內(nèi)存地址。堆中主要存放引用類型的數(shù)據(jù)。
棧的存取速度比堆要快。
棧數(shù)據(jù)可以共享。
棧的數(shù)據(jù)大小確定的,堆中數(shù)據(jù)大小可變。
二、數(shù)據(jù)類型自動(dòng)轉(zhuǎn)換
如果一個(gè)操作數(shù)為double型,則整個(gè)表達(dá)式可提升為double型。
滿足自動(dòng)類型轉(zhuǎn)換的條件:兩種類型要兼容,數(shù)值類型(整型和浮點(diǎn)型)互相兼容,目標(biāo)類型大于源類型(例如:double型大于int型)。
強(qiáng)制轉(zhuǎn)換: 如double b=3.98; int a=(int)b;
三、接收鍵盤輸入
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.println("請(qǐng)輸入一個(gè)數(shù)據(jù):");
//String s=input.next();
int y=input.next.int();
System.out.println("輸出"+(y+5));
}
四、獲取隨機(jī)數(shù)
Math.random()
獲取0-1內(nèi)一個(gè)隨機(jī)浮點(diǎn)數(shù),不包含1。
Random e = new Random();
e.nextInt(10);
獲取0-10內(nèi)一個(gè)隨機(jī)整數(shù),不包含10。
五、保留2位小數(shù)
double a=15.3;
double b=3;
DecimalFormat df =new DecimalFormat("0.00");
String s=df.format(a/b);
double result=Double.valueOf(s);
System.out.println(result);
六、數(shù)組
- 定義:
//動(dòng)態(tài)初始化
int[] a;
a = new int[3];
a[0]=8;
a[1]=8;
a[2]=8;
//靜態(tài)初始化
int[] b=new int[]{1,2,3,4,5};
int[] c={6,7,8,9};
for-each循環(huán)
語(yǔ)法:
for(元素類型 元素變量:要遍歷對(duì)象){
循環(huán)語(yǔ)句;
}
for each循環(huán)執(zhí)行次數(shù)取決于遍歷的對(duì)象元素個(gè)數(shù)。數(shù)組增加元素
int[] oldArray={1,2,3,4,5,6,7};
int[] newArray=new int[oldArray.lenght+1];
for(int i=0;i<=oldArray.lenght-1;i++){
newArray[i]=oldArray[i];
}
newArray[newArray.lenght-1]=0;
for(int x:newArray){
System.out.printIn(x);
}
- Arrays工具類
Arrays.sort(array);//排序
Arrays.toString(array);//轉(zhuǎn)字符串
七、排序
冒泡排序
每次拿前一個(gè)值跟后一個(gè)值進(jìn)行比較,如果前一個(gè)值大,就交換;
每一輪會(huì)把當(dāng)前的最大值交換到最后,直到排序成功。選擇排序
依次在數(shù)組中選擇一個(gè)值,跟后面所有的值進(jìn)行比較;如果有值比這個(gè)值小,就交換。插入排序
把數(shù)組分成左右兩部分,假設(shè)左邊部分已經(jīng)完成排序;依次從第二個(gè)元素開始,把每個(gè)元素插入到左邊合適的位置。
八、類和對(duì)象
八-1 方法
- System.out.println()
println()是一個(gè)方法。
System是系統(tǒng)類。
out是標(biāo)準(zhǔn)輸出對(duì)象。
這句話的用法是調(diào)用系統(tǒng)類 System 中的標(biāo)準(zhǔn)輸出對(duì)象 out 中的方法 println()。
什么是方法?
Java方法是語(yǔ)句的集合,它們?cè)谝黄饒?zhí)行一個(gè)功能;
方法是解決一類問(wèn)題的步驟的有序組合;
方法一般包含于類中;
方法在程序中被創(chuàng)建,在其他地方被引用。方法的優(yōu)點(diǎn)
使程序變得更簡(jiǎn)短而清晰;
有利于程序維護(hù);
可以提高程序開發(fā)的效率;
提高了代碼的重用性。方法定義格式
訪問(wèn)修飾符 返回值類型 方法名(參數(shù)類型 參數(shù)名){
方法體
return 返回值;
}
八-2 類和對(duì)象
- 屬性和方法是對(duì)象的基本構(gòu)成。
屬性:對(duì)象具有的各種特征,每個(gè)對(duì)象的每個(gè)屬性都擁有特定值。
例如:張浩和李明的年齡、姓名不一樣。
方法:對(duì)象執(zhí)行的操作。
對(duì)象:用來(lái)描述客觀事物的一個(gè)實(shí)體,由一組屬性和方法構(gòu)成。
對(duì)象同時(shí)具有屬性和方法兩項(xiàng)特性,對(duì)象的屬性和方法通常被封裝在一起,共同體現(xiàn)事物的特性,二者相輔相承,不能分割。
- 類和對(duì)象
類是模子,定義對(duì)象將會(huì)擁有的特征(屬性)和行為(方法)。
類是對(duì)象的類型,對(duì)象是類的對(duì)象。
類是抽象的概念,僅僅是模板,比如:人。
對(duì)象是一個(gè)你能夠看得到、摸得著的具體實(shí)體。
面向?qū)ο蟮乃季S
定義一個(gè)類
所有JAVA程序都以類class為組織單元,我們使用關(guān)鍵字class定義類。創(chuàng)建對(duì)象的步驟
類名 對(duì)象名=new 類名();
引用對(duì)象成員:使用“.”進(jìn)行以下操作。
引用類的屬性:對(duì)象名.屬性
引用類的方法:對(duì)象名.方法名()this
this表示當(dāng)前對(duì)象
作用:獲取當(dāng)前對(duì)象的屬性;使用this調(diào)用構(gòu)造方法。static可以修飾屬性和方法
| - | static修飾 | 非static修飾 |
|---|---|---|
| 屬性 | 類屬性、類變量、靜態(tài)變量 | 實(shí)例屬性、實(shí)例變量 |
| 方法 | 類方法、靜態(tài)方法 | 實(shí)例方法 |
| 調(diào)用方式 | 類名.屬性 類名.方法() 對(duì)象.屬性 對(duì)象.方法() |
對(duì)象.屬性 對(duì)象.方法() |
| 歸屬 | 類 | 單個(gè)對(duì)象 |
九、面向?qū)ο笕筇匦?/h2>
封裝、繼承、多態(tài)
封裝:
將類的某些信息隱藏在類內(nèi)部,不允許外部程序直接訪問(wèn),而是通過(guò)該類提供的方法來(lái)實(shí)現(xiàn)對(duì)隱藏信息的操作和訪問(wèn)。
封裝的步驟:1)修改屬性的可見(jiàn)性(設(shè)為private)2)創(chuàng)建公有的getter/setter方法(用于屬性的讀寫)3)在getter/setter方法中加入屬性控制語(yǔ)句(對(duì)屬性值的合法性進(jìn)行判斷)。
使用private修飾的屬性和方法只能在本類中被訪問(wèn)。
get()set()方法其實(shí)就是為封裝而設(shè)計(jì)的。
- 4種訪問(wèn)修飾符
訪問(wèn)修飾符可以用在類、方法、屬性上面。
| 訪問(wèn)修飾符 | 本類 | 同包 | 子類 | 其他 |
|---|---|---|---|---|
| private | ?? | |||
| 默認(rèn)(friendly) | ?? | ?? | ||
| protected | ?? | ?? | ?? | |
| public | ?? | ?? | ?? | ?? |
繼承:
子類和父類是is-a的關(guān)系。
使用繼承:編寫父類class Pet{//公共的屬性和方法} 編寫子類,繼承父類class Dog extends Pet{//子類特有的屬性和方法} class Penguin extends Pet{//}。
子類繼承父類后,自動(dòng)擁有父類非私有屬性和方法。一個(gè)父類可以被多個(gè)子類繼承。在java中,一個(gè)子類只能繼承一個(gè)父類。
子類不能繼承父類的情況:(1)private成員(2)子類與父類不在同包,使用默認(rèn)訪問(wèn)權(quán)限的成員(3)構(gòu)造方法。
super關(guān)鍵字
子類訪問(wèn)父類成員
(1)訪問(wèn)父類構(gòu)造方法
super();
super(name);(在子類構(gòu)造方法中)需要寫在子類構(gòu)造方法的第一行。
(2)訪問(wèn)父類屬性
super.name;
(3)訪問(wèn)父類方法
super.print();final修飾符
final可以用來(lái)修飾類、方法、變量;
final修飾的類不能被繼承;
final修飾的方法不能被子類重寫;
final修飾的變量不能改變值。
- Object類
Object類是所有類的最終父類。
==:地址是否相同。
object類中的equals()方法和==意義相同。
字符串是一個(gè)類,也有equals()方法,但是字符串類對(duì)equals方法實(shí)現(xiàn)了重寫。

多態(tài):
同一個(gè)引用類型,使用不同的實(shí)例而執(zhí)行不同操作。
使用多態(tài)的條件:編寫具有繼承關(guān)系的父類和子類;子類重寫父類方法;父類引用指向子類的對(duì)象。
多態(tài)中有向上轉(zhuǎn)型和向下轉(zhuǎn)型。(向上轉(zhuǎn)型是將子類對(duì)象轉(zhuǎn)為父類對(duì)象使用;向下轉(zhuǎn)型是將父類對(duì)象轉(zhuǎn)為子類對(duì)象使用。)instanceof
- 抽象類
抽象類只能被繼承,不能被實(shí)例化。
抽象類中可以有普通方法,也可以有抽象方法。(抽象方法沒(méi)有方法體。父類定義的抽象方法,子類必須實(shí)現(xiàn)(重寫),除非子類也是抽象類)
定義抽象類和抽象方法的目的:
1)使得父類更加簡(jiǎn)潔純粹,只做規(guī)范而不用涉及具體內(nèi)容;
2)對(duì)子類的方法進(jìn)行了規(guī)范,方便統(tǒng)一管理和團(tuán)隊(duì)協(xié)同開發(fā);
3)抽象類專門為繼承而生。
- 接口類
繼承:is-a的關(guān)系; 接口:has-a的關(guān)系。
接口:
public interface MyInterface{
public void foo();
//其他方法
所有方法都是:public abstract
}
接口不可能被實(shí)例化;
實(shí)現(xiàn)類必須實(shí)現(xiàn)接口的所有方法;
一個(gè)類可以實(shí)現(xiàn)多個(gè)接口;
接口中的變量都是靜態(tài)常量。
接口的存在可以解決Java中不能多繼承的問(wèn)題。
接口類屬性是全局靜態(tài)常量;接口類方法必須是public抽象方法;沒(méi)有構(gòu)造方法;無(wú)法實(shí)例化。