課程內(nèi)容:
android 應(yīng)用開(kāi)發(fā)
1.java編程
2.android應(yīng)用編程
windce miniGUI QT....
好看的用戶(hù)界面
android 系統(tǒng)框架組成
android=linux c+java 混合體
android 應(yīng)用開(kāi)發(fā)入口是java
android 學(xué)習(xí)涉及到編程語(yǔ)言:
c
c++
java
java編程
高司令 golsing 在sun 95年創(chuàng)建java,被oracle 甲骨文收購(gòu)。
特點(diǎn):
1.開(kāi)源
2.編譯一次 到處運(yùn)行。 跨平臺(tái)
3.具有編譯和解釋型
java平臺(tái)
1.java se J2SE 標(biāo)準(zhǔn)版 初學(xué)從這里開(kāi)始
2.java ee J2EE 企業(yè)版 web開(kāi)發(fā) 服務(wù)器上運(yùn)行的程序 云計(jì)算大數(shù)據(jù)
3.java me J2ME 微型版 嵌入開(kāi)發(fā)
J2SE搭建開(kāi)發(fā)環(huán)境
1.下載windows版的JDK
2.裝jdk 運(yùn)行java命令 ok
裝的目錄有:
bin子目錄:各種java命令工具
java 啟動(dòng)虛擬機(jī)加載類(lèi)的命令
javac 編譯器
3.設(shè)置環(huán)境變量 運(yùn)行javac命令 ok
java 類(lèi)分為
1.屬性 全局變量
2.方法 函數(shù)
windows 終端命令
1.dir 類(lèi)似 ls
2.cd 類(lèi)似 cd
3.切換盤(pán)符到e盤(pán) c:\>e:
JVM:java虛擬機(jī)
JRE=JVM+類(lèi)庫(kù) java運(yùn)行時(shí)環(huán)境
JDK=JRE+工具命令
運(yùn)行java程序的步驟:
1.編寫(xiě)java源程序保存到 .java文件中
2.編譯java源文件
javac Test.java 生成 Test.class 文件 2進(jìn)制文件 也叫 字節(jié)碼文件 不能操作系統(tǒng)上運(yùn)行
放在java 虛擬機(jī)(JVM)上運(yùn)行
3. java Test //用java命令啟動(dòng)JVM加載一個(gè)名為T(mén)est的類(lèi) 調(diào)用特殊的main方法啟動(dòng)程序
java語(yǔ)法
0.java是面向?qū)ο蟮木幊陶Z(yǔ)言
1.屬于c語(yǔ)系,強(qiáng)類(lèi)型語(yǔ)言
2.數(shù)據(jù)類(lèi)型
分為兩類(lèi)
基本類(lèi)型:
int short long int 4個(gè)字節(jié)
char 2個(gè)字節(jié) unicode編碼
void
float double
byte 1個(gè)字節(jié)
boolean true|false
while(true){}
java沒(méi)有指針
基本類(lèi)型可直接用運(yùn)算符來(lái)運(yùn)算. + - * / || && ! >=....
基本類(lèi)型不是對(duì)象,但是考慮到效率保留
但是引用類(lèi)型不能直接運(yùn)算的,可以綁定對(duì)象的方法和屬性才能運(yùn)算.
引用類(lèi)型(全部是對(duì)象)
類(lèi) String 類(lèi)
數(shù)組
接口
java哲學(xué)思想:萬(wàn)物皆對(duì)象
類(lèi)和對(duì)象
類(lèi)是抽象的 設(shè)計(jì)圖紙
c:
struct A
{
int a;
函數(shù)指針 foo;
}
A var1;
var1是變量(對(duì)象) A類(lèi)
對(duì)象是具體的 按設(shè)計(jì)圖紙生產(chǎn)產(chǎn)品 也叫實(shí)例
class 人類(lèi)
{
//屬性 :靜態(tài)特征
int age;
boolean gender;//man:true woman:false;
String name;
//方法:動(dòng)態(tài)行為
void sleep(){}
void eat(){}
void drink(){}
void useLanguage(){}
void useTool(){}
}
人類(lèi) 小花=new 人類(lèi)();//1.聲明一個(gè)小花的變量名,類(lèi)型為人類(lèi) 2.new 創(chuàng)建一個(gè)人類(lèi)的對(duì)象
人類(lèi) 小芳=小花;//小芳就是小花所代表的那個(gè)對(duì)象
//3.將該對(duì)象的引用賦值給小花變量
小花.age=18;
小花.name="花花";
小花.gender=false;//屬性
小花.eat();
小花.drink();
小花.sleep();//方法
. 運(yùn)算符 對(duì)象可使用.運(yùn)算符綁定屬性和方法
寫(xiě)java程序干兩件事情:
1.創(chuàng)建對(duì)象,需要找到類(lèi)(系統(tǒng)提供的類(lèi) String 類(lèi) 或 自定義類(lèi)),用該類(lèi)創(chuàng)建對(duì)象
2.給java程序中各種對(duì)象發(fā)送消息 對(duì)象.方法()
解決吃涼瓜排骨
c程序:逐步求精,步驟分解...問(wèn)題解決
java程序:找服務(wù)員對(duì)象,發(fā)消息點(diǎn)菜,服務(wù)員找廚師
找對(duì)象,給對(duì)象發(fā)消息過(guò)程
70年代 規(guī)模擴(kuò)大 >10萬(wàn) >1000萬(wàn) 搞失敗 軟件危機(jī)==> 軟件工程方法學(xué)
人月神話(huà)
人月不能互換,前提人不需要溝通.
項(xiàng)目=3人*2月=6人月=6人*1月=6人月
扛麻袋,寫(xiě)程序
業(yè)務(wù)邏輯 商業(yè)邏輯
采用面向?qū)ο?
面向?qū)ο竽繕?biāo):可重用,可擴(kuò)展,可維護(hù)
傳統(tǒng)重用:算法,數(shù)據(jù)結(jié)構(gòu),代碼復(fù)制粘貼
重用:業(yè)務(wù)邏輯上實(shí)現(xiàn)重用
面向?qū)ο蟮奶攸c(diǎn):
1.抽象封裝
抽象:描述主要忽略次要.
封裝:定義類(lèi)提供接口
小結(jié):
1.android 組成=linux c+java
2.java特點(diǎn)
3.java版本
4.java se開(kāi)發(fā)環(huán)境搭建
5.編寫(xiě),編譯,運(yùn)行java程序步驟
6.java語(yǔ)法
基本類(lèi)型
引用類(lèi)型
7.類(lèi)和對(duì)象
java 基本的IO
1.基本輸出 (到顯示器)
System.out 對(duì)象 類(lèi)似c 的stdout 標(biāo)準(zhǔn)輸出流
對(duì)象的有兩種方法
System.out.println() 換行
System.out.print() 不換行
System.out.printf() 帶變參
2.基本輸入(鍵盤(pán)輸入)
System.in 對(duì)象 類(lèi)似c 的stdin 標(biāo)準(zhǔn)輸入流
Scanner 類(lèi)來(lái)實(shí)現(xiàn) 字符串和基本類(lèi)型值的輸入
java變量的默認(rèn)值:
基本類(lèi)型:
int long short : 0,0,0l
float double : 0.0f 0.0
byte,char :(byte)0,(char)0
boolean:false
引用類(lèi)型: null
java api文檔結(jié)構(gòu):
包1
java.lang 包(自動(dòng)導(dǎo)入)
String 類(lèi)
字段(屬性)
構(gòu)造方法
成員方法
System 類(lèi)
java.util包
Scanner 類(lèi)
包2
包3
包4
作業(yè):
1.通過(guò)終端實(shí)現(xiàn)一個(gè)用戶(hù)密碼驗(yàn)證
username:xiaohua
password:xiaohei
welcome xiaohua!!
goodbye xxxxx!
"xiaohua".equals(usr)&&"xiaohei".equals(pwd)
2.做簡(jiǎn)易計(jì)算器 op只能是+,-,*,/
輸入: op1 op op2
11+99
回車(chē)輸出
11+99=110
如何將字符串轉(zhuǎn)變?yōu)檎麛?shù)?
"11+99" => "11" "+" "99"
int a=Integer.parseInt("11")
3.利用數(shù)組完成
請(qǐng)輸入學(xué)生人數(shù):4
輸入分?jǐn)?shù):56
輸入分?jǐn)?shù):56
輸入分?jǐn)?shù):56
輸入分?jǐn)?shù):56
分?jǐn)?shù)為:56 56 56 56 56
平均:56.0
4.定義一個(gè)堆棧類(lèi)
class Stack{
int len;
int a[];//不能寫(xiě) int a[50];
void push(int i){}
int pop(){}
Stack(int l ){
len=l
a[]=new int[len];
}
}
Stack s1=new Stack(5);
Stack s1=new Stack(8);
for(int i=0;i<5;i++){
s1.push(i);
}
for(int i=0;i<5;i++){
s1.pop();
}
==========================
2day
java 對(duì)于引用類(lèi)型 ==含義:比較對(duì)象的引用
String s="abc";
String s4="abc";
s==s4 =>true
String s2=new String("abc");
String s3=new String("abc");
s2==s3 =>false
java 基本類(lèi)型轉(zhuǎn)換
類(lèi)型大 large;
類(lèi)型小 small;
large=small; //自動(dòng)
small=(類(lèi)型小)large;
Integer 類(lèi)
哲學(xué):萬(wàn)物皆對(duì)象
java不是純OOP
1.基本類(lèi)型 int==> Integer 類(lèi) 包裝類(lèi) 把基本類(lèi)型的變量/值看成一個(gè)對(duì)象
short ==> Short
float Float
double Double
自動(dòng)裝箱/拆箱
2.靜態(tài) static 成員
數(shù)組也是引用類(lèi)型
int a[]; int[] a;
int[] a=new int[100];
String[] ss=new String[100];
int[] a={1,2,3};
int[] a=new int[]{1,2,3}
String[] ss={"11","22"};
記住:
java的數(shù)組對(duì)象自帶一個(gè)屬性: a.length
java的數(shù)組有邊界檢查(不準(zhǔn)越界,否則異常終止)
java面向?qū)ο筇攸c(diǎn):
目標(biāo):可重用,可擴(kuò)展
典型特征
1.抽象封裝 =>定義類(lèi)
2.繼承
3.多態(tài)
4.接口
5.內(nèi)部類(lèi)
定義類(lèi)可用的元素有哪些?
1.屬性
2.方法
構(gòu)造方法
成員方法
重載方法:方法的重載要求 方法名相同,方法參數(shù)列表不同(類(lèi)型不同,個(gè)數(shù)不同)
3.類(lèi)成員(類(lèi)的屬性和方法)的訪(fǎng)問(wèn)修飾符
public 暴露成員 外部都可使用
private 隱藏成員 外部不可用
默認(rèn) 包訪(fǎng)問(wèn)權(quán)限
protected
4.this 代表當(dāng)前對(duì)象 自引用 可用來(lái)調(diào)用構(gòu)造方法
5.static 成員
非靜態(tài)成員 實(shí)例(對(duì)象)相關(guān) 對(duì)象.成員 this.成員 每個(gè)對(duì)象都有一份屬性
靜態(tài)成員 類(lèi)相關(guān) 類(lèi).成員 靜態(tài)屬性只有一份,類(lèi)所有
靜態(tài)方法只能調(diào)用靜態(tài)方法和使用靜態(tài)屬性
6.包
避免類(lèi)名沖突,采用操作系統(tǒng)中文件系統(tǒng)機(jī)制
包名 對(duì)應(yīng) 目錄
com.robin.Test 當(dāng)前目錄/com/robin/Test.class (每個(gè)類(lèi)編譯后都會(huì)生成class文件)
類(lèi)全名=包名(com.robin 二級(jí)包)+類(lèi)名(Test)
package 為類(lèi)聲明包 package p1; //必須放在第一行
import 為類(lèi)導(dǎo)入包 import java.util.Scanner;
重用類(lèi):
重用代碼不是破壞現(xiàn)有程序,不重頭代碼.
組合:"有一個(gè)"
class Engine{
void start(){}
}
class Car{
Engine engineObj;
void startCar(){
engineObje.start();
}
}
物種:分門(mén)別類(lèi) 有層次結(jié)構(gòu) 有序 無(wú)序
繼承:在現(xiàn)有的類(lèi)的類(lèi)型基礎(chǔ)上添加一些代碼,創(chuàng)建一個(gè)新類(lèi)(形成一個(gè)層次結(jié)構(gòu))
子類(lèi)可擁有父類(lèi)的屬性和方法
繼承語(yǔ)義:"是一個(gè)"
java是單繼承體系,java的類(lèi)只能有一個(gè)父類(lèi)
類(lèi) Object 是類(lèi)層次結(jié)構(gòu)的根類(lèi)。每個(gè)類(lèi)都使用 Object 作為超類(lèi)
class A extends Object{
}
super 關(guān)鍵字
1.用super調(diào)用父類(lèi)的構(gòu)造方法,對(duì)super的調(diào)用必須是構(gòu)造器中的第一個(gè)語(yǔ)句.
2.用super來(lái)調(diào)用父類(lèi)的成員(屬性,方法)
如果父類(lèi)成員是 protected 允許子類(lèi)在不同包內(nèi)也是可訪(fǎng)問(wèn)的.
訪(fǎng)問(wèn)修飾符和類(lèi),對(duì)象之間的可見(jiàn)性分析
弱->強(qiáng)
private 默認(rèn) protected public
多態(tài)
打+東西:打結(jié)合不同的東西有不同的解釋和結(jié)果.
重載方法
重寫(xiě)方法
java方法的綁定機(jī)制
綁定:將一個(gè)方法調(diào)用同一個(gè)方法的主體(對(duì)象,類(lèi))關(guān)聯(lián).
靜態(tài)綁定:編譯時(shí)決定綁定的方法 static private
動(dòng)態(tài)綁定:程序運(yùn)行時(shí)根據(jù)對(duì)象的類(lèi)型來(lái)綁定方法 java大部分都是動(dòng)態(tài)綁定.
在繼承使用多態(tài),可解除同一個(gè)父類(lèi)下不同子類(lèi)之間的耦合.(多態(tài)可解耦)
final 關(guān)鍵字
1. final 作用屬性 常量 類(lèi)似 const
final int ABC=100;
2. final 作用方法 該方法不能重寫(xiě)
3. final 作用類(lèi) 該類(lèi)不能有子類(lèi)
抽象類(lèi)
java有兩種類(lèi)
1.具體類(lèi):可實(shí)例化,可創(chuàng)建對(duì)象.
2.抽象類(lèi):不能實(shí)例化,不能創(chuàng)建對(duì)象.用來(lái)繼承可實(shí)現(xiàn)多態(tài)
abstract class A
{
//一般有抽象方法
abstract void foo(int a,String name);
}
通過(guò)抽象類(lèi)的定義接口(抽象方法),來(lái)控制該抽象類(lèi)下一系列子類(lèi)的接口.
小結(jié):
java 在引用類(lèi)型中 "==" 含義
java 基本類(lèi)型轉(zhuǎn)換類(lèi)似c
java 包裝類(lèi) 自動(dòng)裝箱/拆箱
java 數(shù)組
int[] a;
String[] s;
a.length 數(shù)組長(zhǎng)度,數(shù)組不能越界
java 類(lèi)的定義
屬性
方法
構(gòu)造方法
成員方法
重載方法
靜態(tài)成員
靜態(tài)屬性
靜態(tài)方法
訪(fǎng)問(wèn)修飾符(探討 類(lèi)的成員的可見(jiàn)性問(wèn)題)
private 類(lèi)內(nèi)部可見(jiàn)
public 外部都可見(jiàn)
this
包
聲明包 package
導(dǎo)入包 import
復(fù)用類(lèi):
組合 有一個(gè)
繼承 是一個(gè)
super
訪(fǎng)問(wèn)修飾符
protected
多態(tài)
在繼承中實(shí)現(xiàn)多態(tài)的方法
抽象類(lèi)
通過(guò)抽象類(lèi)的定義接口(抽象方法),來(lái)控制該抽象類(lèi)下一系列子類(lèi)的接口.
繼承和多態(tài),父類(lèi)和子類(lèi)的類(lèi)型轉(zhuǎn)換
作業(yè):
1
Object類(lèi)中有一個(gè)重要的方法是toString(),可返回一個(gè)字符串,代表對(duì)象的值.
一般所有子類(lèi)都重寫(xiě)此方法,
現(xiàn)在定義一個(gè)Parent類(lèi),并再定義Parnet的子類(lèi)Derived.
在這兩個(gè)類(lèi)中都重寫(xiě)toString()方法,
分別打印輸出 “this is Parent toString().”和”this is Derived toString().”
最后定義一個(gè)主類(lèi)UpCast,設(shè)計(jì)一個(gè)main()方法實(shí)現(xiàn)如下代碼:
Derived d=new Derived();
System.out.println("Derived 的 toString():"+d);
Parent p=(Parent)d;
System.out.println("轉(zhuǎn)換為parent類(lèi)型的toString():"+p);
Object o=(Object) d;
System.out.println("轉(zhuǎn)換為Object類(lèi)型的toString():"+o);
請(qǐng)思考為什么運(yùn)行結(jié)果是這樣?
2 分析如下代碼
abstract class Shape
{
public abstract void draw();
}
class Circle extends Shape{
public void draw(){
System.out.println("draw a circle!");
}
}
class Square extends Shape{
public void draw(){
System.out.println("draw a square!");
}
}
class Triangle extends Shape{
public void draw(){
System.out.println("draw a triangle!");
}
}
public class Shapes {
public static void main(String[] args) {
Object[] shapeList = {
new Circle(),
new Square(),
new Triangle()
};
for(int i = 0; i < shapeList.length; i++)
(shapeList[i]).draw();
}
}
指出哪里有錯(cuò)誤?
3
利用抽象類(lèi)實(shí)現(xiàn)模板模式,實(shí)現(xiàn)如下類(lèi):
1)
定義抽象類(lèi) AbstractDisplay
有如下方法
public abstract void open();
public abstract void print();
public abstract void close();
public final void display(){
open();
for(int i=0;i<5;i++){
print();
}
close();
}
2)定義兩個(gè)具體類(lèi)
CharDisplay
StringDisplay
3)定義如下主類(lèi)Main
public class Main {
public static void main(String[] args){
AbstractDisplay o1=new CharDisplay('H');
AbstractDisplay o2=new StringDisplay("hello,world.");
AbstractDisplay o3=new StringDisplay("你好");
o1.display();
o2.display();
o3.display();
}
}
4)執(zhí)行結(jié)果:
<<HHHHH>>
+------------+
|hello,world.|
|hello,world.|
|hello,world.|
|hello,world.|
|hello,world.|
+------------+
+----+
|你好|
|你好|
|你好|
|你好|
|你好|
+----+
請(qǐng)分析編寫(xiě)代碼的好處在哪里?
======================
3day
System.out.println(對(duì)象);==>最終 對(duì)象.toString()
String.valueOf(對(duì)象)
如果參數(shù)為 null,則字符串等于 "null";否則,返回 obj.toString() 的值。
引用類(lèi)型轉(zhuǎn)型
Human obj
Boss boss
obj=boss 向上轉(zhuǎn)型 自動(dòng)安全
boss=obj 向下轉(zhuǎn)型 不安全 強(qiáng)制轉(zhuǎn)換
if(obj instanceof Boss)
boss=(Boss)obj;
oop設(shè)計(jì)模式
某個(gè)場(chǎng)景的一種最佳解決方案.
GoF 方法學(xué)大師 23種
java c# c++ javascript....
面向?qū)ο?1.抽象封裝
2.復(fù)用類(lèi)
組合
繼承
3.抽象類(lèi)
4.接口 interface
接口:
完全抽象的類(lèi)變成了接口
特點(diǎn):
1.接口中
定義的方法全部是抽象方法,不寫(xiě)也是 public abstract 方法
定義的屬性,不寫(xiě)也是 public static final
2.用來(lái)描述某種抽象的行為,語(yǔ)義"像一個(gè)"
3.接口也可實(shí)現(xiàn)多態(tài)
4.接口具有多繼承的特點(diǎn)
一個(gè)類(lèi)可實(shí)現(xiàn)任何接口以及任意多個(gè)接口
記住:
子類(lèi)或?qū)崿F(xiàn)類(lèi)重寫(xiě)父類(lèi)的方法或接口的方法
不能將重寫(xiě)方法使用更低訪(fǎng)問(wèn)權(quán)限,可提升訪(fǎng)問(wèn)權(quán)限
5.內(nèi)部類(lèi)
class A//外部類(lèi)
{
int a;
void foo(){}
class B //非靜態(tài)內(nèi)部類(lèi)
{
//A的成員都可見(jiàn)
void foob(){
}
}
} 用的少
class A
{
static B{//靜態(tài)內(nèi)部類(lèi)
//A的靜態(tài)成員可見(jiàn)
}
}
new A.B(); //創(chuàng)建B類(lèi)的對(duì)象
到此為止
java OOP基本語(yǔ)法
抽象封裝
繼承
抽象類(lèi)
接口
內(nèi)部類(lèi)
============================
系統(tǒng)類(lèi)庫(kù)就是把 一堆.class文件打包 .jar文件 放在 jdk的lib目錄下
自動(dòng)導(dǎo)入
eclipse的使用 (IDE)
1.下載開(kāi)源免費(fèi)軟件工具包 解壓
必須先安裝JDK,設(shè)置path環(huán)境變量
2.啟動(dòng)eclipse
3.創(chuàng)建一個(gè)java工程
file->new->java project
4.設(shè)置字體和補(bǔ)全功能
5.eclipse是自動(dòng)編譯
6.運(yùn)行 run as->java application
7.導(dǎo)入工程
file->import->general->exist project
8.用javabean生成 getter/setter方法
右鍵->source->gerate getter and setter...
gerate constructor using fields...
航班管理系統(tǒng)
用java做項(xiàng)目
高內(nèi)聚低耦合
1.錄入航班信息
2.刪除航班信息
3.修改航班信息
4.查詢(xún)所有航班信息
5.按航班號(hào)查詢(xún)航班信息
項(xiàng)目組成 架構(gòu)
三層
1.表現(xiàn)層 (展示數(shù)據(jù),實(shí)現(xiàn)和用戶(hù)交互) 界面層
字符界面
GUI 窗口,手機(jī)界面,網(wǎng)頁(yè)
com.robin.ui包
2.業(yè)務(wù)層
實(shí)現(xiàn)邏輯處理
com.robin.biz包
3.持久層 (實(shí)現(xiàn)數(shù)據(jù)持久化存取)
文件
數(shù)據(jù)庫(kù)
網(wǎng)絡(luò)
com.robin.dao 包
4.值對(duì)象bean
com.robin.bean 包
java 集合框架也叫對(duì)象容器類(lèi)/接口
1.用數(shù)組(也可做對(duì)象容器)存放對(duì)象
不足:有邊界檢查,適合順序讀寫(xiě) 頻繁增刪
Flight[] flights=new Flight[]
好處:操作簡(jiǎn)單,按下標(biāo)訪(fǎng)問(wèn),基本類(lèi)型只能用數(shù)組操作
2. 對(duì)象容器這套類(lèi)庫(kù)具有層次結(jié)構(gòu) 繼承架構(gòu)
在java.util包,包含對(duì)象容器的類(lèi)庫(kù)
Collection 接口 描述對(duì)象容器操作的抽象方法
List 接口 使用這些工具類(lèi)的方法有
add(E e) 將一個(gè)對(duì)象訪(fǎng)問(wèn)List容器
E get(int index) 根據(jù)索引取出對(duì)象
int size() 容器中對(duì)象數(shù)量
E remove(int index)
boolean remove(Object o)
void clear()
ArrayList<E> 實(shí)現(xiàn)具體類(lèi) 俗稱(chēng)"動(dòng)態(tài)數(shù)組"
LinkedList<E> 實(shí)現(xiàn)具體類(lèi) "鏈表"
Set 接口
HashSet 實(shí)現(xiàn)具體類(lèi) 容器中不能有重復(fù)的元素
柜子 裝xxx類(lèi)型的柜子
衣柜
書(shū)柜
酒柜
鞋柜
柜子<Object>
柜子<衣>
柜子<書(shū)>
=================================
4day
對(duì)象容器/數(shù)組 有對(duì)應(yīng)算法的工具類(lèi)
數(shù)組對(duì)應(yīng)的:Arrays 類(lèi) 排序 查找
此類(lèi)包含用來(lái)操作數(shù)組(比如排序和搜索)的各種方法
對(duì)象容器對(duì)應(yīng)的: Collections 類(lèi)
public static <T extends Comparable<? super T>> void sort(List<T> list)
類(lèi)型T必須是實(shí)現(xiàn)了Comparable接口的類(lèi)型
由于String類(lèi):
public final class String extends Object implements
Serializable, Comparable<String>, CharSequence
實(shí)現(xiàn)Comparable接口所以可直接進(jìn)行排序.
java IO 流
流:一維線(xiàn)性空間放的可傳遞的數(shù)據(jù)(水)
分類(lèi):
輸入流 輸出流
字節(jié)流 byte 1byte 字符流 char 2byte
節(jié)點(diǎn)流(低級(jí)流) 處理流(高級(jí)流)
流的處理的特點(diǎn):
1.對(duì)稱(chēng) 分類(lèi)是對(duì)稱(chēng)
2.裝飾 把一種轉(zhuǎn)換另一種流
裝飾者模式設(shè)計(jì)
class A //節(jié)點(diǎn)流 水
{
}
class B //處理流 熱水管
{
B(A a){}
}
class C //處理流 加coffe
//A類(lèi)想用C,B,C+B的功能
{
C(A a){}
}
A 是B,C類(lèi)的父類(lèi)
C c=new C(new A()) //A具有C的功能
C c=new C(new B(new A()));//A具有B,C的功能
B b=new B(new A());//A具有B的功能
字節(jié)流的根類(lèi)
InputStream OutputStream
read() write()
一般很少直接使用字節(jié)流的.
文件字節(jié)流
FileInputStream FileOutputStream
PrintStream 打印流 按系統(tǒng)默認(rèn)字符編碼GBK打印內(nèi)容
java 異常
千萬(wàn)不要異常報(bào)告給用戶(hù)!!!
分為兩類(lèi)
1.可檢查異常:編譯器在編譯可檢查要求異常處理
2.運(yùn)行時(shí)異常:程序在運(yùn)行時(shí)出現(xiàn)異常.
處理異常方法
try{
}catch(異常類(lèi)型 e){
}finally{
}
異常繼承架構(gòu)
程序員可處理的異常有一個(gè)根類(lèi):Exception
Exception 父類(lèi)
RuntimeException 子類(lèi) 運(yùn)行時(shí)異常的父類(lèi)
ArithmeticException
NumberFormatException
ArrayIndexOutOfBoundsException
非RuntimeException 異常類(lèi) 是可檢查的異常.
InputStream 類(lèi)有一個(gè)方法的聲明, throws 異常聲明 IOException
public abstract int read()
throws IOException
告訴調(diào)用者你調(diào)用read()方法時(shí),可能會(huì)拋出 IOException 異常.
編譯器強(qiáng)制你做異常處理
小結(jié):
1.工具類(lèi) 排序,查找等算法功能
針對(duì)數(shù)組 Arrays 類(lèi)
針對(duì)對(duì)象容器 Collections 類(lèi)
對(duì)象排序要求對(duì)象的類(lèi)需要實(shí)現(xiàn) Comparable 接口 重寫(xiě) compareTo()方法
2.java IO
分類(lèi):
按字節(jié)/字符劃分
按方向
低級(jí)流/高級(jí)流
標(biāo)準(zhǔn)IO:
System.out 還有 System.in
用 Scanner scanner=new Scanner(System.in);
讓System.in具有Scanner類(lèi)的功能
字節(jié)流類(lèi)的體系
InputStream OutputStream 根類(lèi)
FileInputStream FileOutputStream
PrintStream
文件IO 讀寫(xiě),復(fù)制
3. 異常
分類(lèi)
可檢查異常:編譯器可檢查,做異常處理或異常聲明
運(yùn)行時(shí)異常:編譯器不可檢查 都是來(lái)自于 RuntimeException 類(lèi)及其子類(lèi)
異常類(lèi)的架構(gòu)
Exception
RuntimeException 不可檢查
非 RuntimeException 類(lèi) 可檢查
java方法定義
返回類(lèi) 方法名(參數(shù)列表) throws 異常類(lèi)
異常處理
try{
//放監(jiān)控的代碼
}catch(異常類(lèi) e){
//異常處理的代碼 不要做業(yè)務(wù)處理
}finally{
//資源釋放
}
try必須有,catch,finally 可選
文本流 字符流
流以字符為單位(2個(gè)字節(jié) char) 根據(jù)當(dāng)前字符編碼集轉(zhuǎn)換處理
用途文本文件處理.
Reader Writer
FileReader FileWriter 文件字符流
InputStreamReader OutputStreamWriter 字節(jié)轉(zhuǎn)字符的字符流
BufferedReader BufferedWriter 帶緩沖區(qū)的字符流
System.in 字節(jié)流對(duì)象===>讀出來(lái)文本信息
作業(yè):
航班系統(tǒng)
要求:
0.航班排序查詢(xún)
1.航班數(shù)據(jù)存放在文件中,通過(guò)讀文件獲得數(shù)據(jù)
2.添加航班信息寫(xiě)入文件
3.從文件中刪除航班信息 (先讀出來(lái)放在列表中再刪除,然后再寫(xiě)入文件)
4.從文件中修改航班信息 (先讀出來(lái)放在列表中再修改,然后再寫(xiě)入文件)
============================
5day
java
1.基本語(yǔ)法
2.面向?qū)ο髮?shí)現(xiàn)
3.對(duì)象容器 泛型 集合框架
4.異常
5.IO
6.項(xiàng)目 分層
7.線(xiàn)程
8.網(wǎng)絡(luò)
java并發(fā)處理:基于線(xiàn)程來(lái)實(shí)現(xiàn)的
進(jìn)程
線(xiàn)程
java的線(xiàn)程創(chuàng)建必須借助 Thread 類(lèi)啟動(dòng)線(xiàn)程
JVM啟動(dòng)時(shí)會(huì)有多個(gè)線(xiàn)程在執(zhí)行(main線(xiàn)程,垃圾回收GC線(xiàn)程...)
默認(rèn)寫(xiě)java都運(yùn)行在 main線(xiàn)程之上
Thread 類(lèi) 常用方法
Thread()
Thread(Runnable target)
Thread(String name)
Thread(Runnable target, String name)
static Thread currentThread() //獲取執(zhí)行代碼所在線(xiàn)程對(duì)象
void start() //啟動(dòng)線(xiàn)程
static void sleep(long millis) //執(zhí)行代碼會(huì)休眠/阻塞 時(shí)間到喚醒
創(chuàng)建線(xiàn)程的方法
方法1:
step1:定義一個(gè)繼承Thread類(lèi)的子類(lèi)
step2:重寫(xiě)Thread類(lèi)的run方法
step3:用該子類(lèi)創(chuàng)建一個(gè)對(duì)象并調(diào)用該對(duì)象的start()啟動(dòng)線(xiàn)程
子類(lèi)不需要繼承任何其他父類(lèi),簡(jiǎn)單.
方法2:
step1:定義一個(gè)實(shí)現(xiàn)Runnable接口的實(shí)現(xiàn)類(lèi)
step2:重寫(xiě)該接口的run方法
step3:用該實(shí)現(xiàn)類(lèi)來(lái)創(chuàng)建一個(gè)對(duì)象,并用來(lái)初始化一個(gè)Thread類(lèi)的對(duì)象
調(diào)用Thread對(duì)象的start()啟動(dòng)線(xiàn)程
實(shí)現(xiàn)類(lèi)必須要繼承其他父類(lèi)
用戶(hù)登錄
用戶(hù)密碼掩碼功能
Scanner scanner=new Scanner(System.in);
Sring pwd=scanner.next();//調(diào)用時(shí)不按回車(chē) 主線(xiàn)程阻塞
password:123
password:**** 1.打印 backspace ascii控制字符 8
2.打印 掩碼 '*'
交給子線(xiàn)程來(lái)做
主線(xiàn)程+子線(xiàn)程
1.什么時(shí)候啟動(dòng)線(xiàn)程
2.線(xiàn)程什么時(shí)候結(jié)束
控制線(xiàn)程的方法
1. join() 方法 適合多個(gè)線(xiàn)程協(xié)調(diào)工作
2. 同步 synchronized 關(guān)鍵字
當(dāng)多個(gè)線(xiàn)程同時(shí)操作一個(gè)共享對(duì)象時(shí)發(fā)生競(jìng)爭(zhēng)狀態(tài)(不同步狀態(tài)).
上鎖->操作->釋放鎖
java的對(duì)象隱含"鎖",也叫"同步監(jiān)視器"用來(lái)保護(hù)共享對(duì)象內(nèi)部狀態(tài)不處在競(jìng)爭(zhēng)狀態(tài).
同步
1.同步方法 //肯定會(huì)有一個(gè)對(duì)象綁定同步方法
當(dāng)一個(gè)線(xiàn)程調(diào)用同步方法(擁有鎖),其他線(xiàn)程想調(diào)用該方法必須等待,當(dāng)鎖的擁有者調(diào)用完畢退出
同步方法(釋放鎖),該方法可給其他等待的線(xiàn)程調(diào)用.
適合可修改源碼
2.同步對(duì)象
class A
{
void foo(){}
}
A obj=new A();
obj.foo(); //有多個(gè)線(xiàn)程想同時(shí)操作obj對(duì)象,A類(lèi)的定義的代碼不可見(jiàn)
synchronized (obj){
//同步塊
obj.foo(); //同步的方法
}
java API設(shè)計(jì)已經(jīng)考慮了同步類(lèi)庫(kù)
ArrayList 類(lèi)此實(shí)現(xiàn)不是同步的,當(dāng)在多線(xiàn)程來(lái)操作該對(duì)象會(huì)發(fā)生不同步.
解決方案1
synchronized (arrayList){
//同步塊
arrayList.foo(); //同步的方法
}
或方案2
List list = Collections.synchronizedList(new ArrayList());
方案3
Vector 類(lèi) 是同步的。線(xiàn)程安全的
小結(jié):
java并發(fā)處理
1.java 并發(fā)基于線(xiàn)程來(lái)實(shí)現(xiàn)
2.創(chuàng)建線(xiàn)程兩種方法
2.1 繼承Thread 類(lèi) 簡(jiǎn)單適合不用其他父類(lèi)
2.2 實(shí)現(xiàn)Runnable接口 適合需要其他父類(lèi)
3.線(xiàn)程的生命周期
4.主線(xiàn)程+子線(xiàn)程實(shí)現(xiàn)案例
5.控制線(xiàn)程的方法
join()
同步 synchronized
6.java 類(lèi)庫(kù) 支持并發(fā)的類(lèi)
Vector
StringBuffer
java 網(wǎng)絡(luò)編程
基于TCP socket通信的編程模型
需要api 類(lèi)庫(kù)有哪些?
java.net包
ServerSocket 類(lèi) 用來(lái)做服務(wù)器等待客戶(hù)端連接請(qǐng)求
ServerSocket(int port)
Socket accept() 等待客戶(hù)端連接請(qǐng)求的方法,該方法無(wú)連接請(qǐng)求會(huì)阻塞
當(dāng)連接成功建立,返回一個(gè)Socket對(duì)象
Socket 類(lèi)
Socket(String host, int port) //host服務(wù)器ip/名稱(chēng)
InputStream getInputStream()
OutputStream getOutputStream()
案例1:
從客戶(hù)端控制臺(tái)輸入口令字符串發(fā)送到服務(wù)器驗(yàn)證,返回驗(yàn)證結(jié)果到客戶(hù)端屏幕.
案例2:
實(shí)現(xiàn)多個(gè)客戶(hù)端連接服務(wù)器,每個(gè)客戶(hù)端向服務(wù)器發(fā)送數(shù)據(jù),服務(wù)器響應(yīng)對(duì)應(yīng)的客戶(hù)端.
java 課堂總筆記
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 第八周 控制反轉(zhuǎn)與MVC模式但是我們打算借助GUI(圖形化用戶(hù)界面)來(lái)介紹兩個(gè)設(shè)計(jì)思想:控制反轉(zhuǎn)和MVC設(shè)計(jì)模式。...
- 第六周 設(shè)計(jì)原則 代碼復(fù)制 消除代碼復(fù)制的兩個(gè)基本手段,就是使用方法和父類(lèi)(將兩個(gè)子類(lèi)的相同屬性和行為都放在父類(lèi)里...
- 個(gè)人為了復(fù)習(xí)一下Java基礎(chǔ), 在網(wǎng)易云課堂上報(bào)了翁愷老師的Java語(yǔ)言程序設(shè)計(jì)進(jìn)階篇的課程, 主要看了其中的4....