Java04,ubuntu16.04java
0.面向對象(Object Oriented:OO):
0、OOA(面向對象分析) OOD(面向對象的設計) OOP(面向對象編程)
1、是軟件開發方法
2、擴展的領域:數據庫系統、交互式界面、應用平台、分布式系統、人工智能等領域
3、是一種對現實世界的理解和抽象的方法,是計算機編程技術發展到一定階段的產物
1.類和對象的基本概念
1.類:類是對具有相似性質的一類事物的抽象,類封裝了相似性質事物的屬性(特征)和方法(行為) (即類的成員)
2.對象:對象是一類事物中具體的個體
3.類——對象 關系參考 種群——個體
4.類的構成:零個或多個成員變量 零個或多個方法 零個或多個構造器
成員變量:定義該類或該類的實例所包含的狀態數據
方法:用來定義該類或該類的實例的行為特征或者功能實現
構造器:用於構造該類的實例(關於構造器後面會著重講解)
5.對象的產生和使用:
創建創建出來後就可以使用了,Java的對象大致有如下作用:訪問對象的實例變量和調用對象的方法
創建對象的根本途徑是構造器,通過new關鍵字來調用某個類的構造器即可以創建這個類的實例(對象)
對象名.實例變量|方法
類名.類變量|方法
6.一般實體類例子 Dog.java ; 對象的聲明和創建; 程序入口類(主類),帶有main方法的類
7.一個人(張三)在街上散步,遇到一條狗(大黃),狗(大黃)咬了人(張三),人(張三)打了狗(大黃),狗(大黃)跑了~!
package Chapter7_2;
//Dog類的申明
public class Dog {
String name;
public void beatPersion(People p){
System.out.println(name+"咬了"+p.name);
}
public void dogRun(){
System.out.println(name+"跑了......");
}
}
package Chapter7_2;
//People類的申明
public class People {
String name;
public void walk(){
System.out.println(name+"街上散步");
}
public void meetDog(Dog dog){
System.out.println(name+"遇到"+dog.name);
}
public void beatDog(Dog dog){
System.out.println(name+"打了"+dog.name);
}
}
package Chapter7_2;
//主類
public class DogAndPeople {
public static void main(String[] args) {
People peo=new People();
Dog dog =new Dog();
peo.name="張三";
dog.name="大黃";
peo.walk();
peo.meetDog(dog);
dog.beatPersion(peo);
peo.beatDog(dog);
dog.dogRun();
}
}
2.練習: Car類,描述汽車的屬性(品牌mark、排量power、顏色color、價格price)
和方法(啟動start、加速speedup、正常行駛run,碰到hit(人))
寫一個People類,有屬性(姓名name、性別sex、年齡age)、
方法(駕駛drive(car),以Car類對象為參數),
在主類中
1)讓一個人張三駕駛一輛寶馬車在街上飛奔
2)碰到了一個叫做李四的人
package Chapter7_3;
//定義Car類
public class Car {
String mark;
int power;
String color;
int price;
public void start(People p) {
System.out.println(p.name + "啟動了"+mark);
}
public void speedUp(){
System.out.println(mark+"加速");
}
public void run(){
System.out.println(mark+"正常行駛");
}
public void hit(People p){
System.out.println(mark+"撞了"+p.name);
}
}
package Chapter7_3;
//People類申明
public class People {
String name ;
char sex;
short age;
public void dirve(Car car){
System.out.println(name+"駕駛"+car.mark);
}
}
package Chapter7_3;
//主類
public class CarAndPerple {
public static void main(String[] args) {
Car car=new Car();
People p1=new People();
People p2=new People();
car.color="black";
car.mark="寶馬";
car.power=123;
car.price=123143;
p1.age=20;
p1.name="張三";
p1.sex='m';
p2.age=21;
p2.name="李四";
p2.sex='m';
car.start(p1);
car.speedUp();
p1.dirve(car);
car.run();
car.hit(p2);
}
}
3.類和對象的使用總結
1.抽象出具有相似特征(屬性)和行為(方法)的一類事物封裝到類裡
2.根據業務需要實例化(new)出具體的對象
3.對對象進行初始化賦值,以便得到具體對象的特征
4.根據業務需要組合對象之間的行為(方法)
4.成員變量和局部變量
1.成員變量定義在類中,方法的外面;又叫全局變量,有效作用域是整個類體
2.局部變量定義在方法裡面,作用域是方法內部
3.當局部變量和成員變量名字相同的時候,成員變量在該局部變量所在的方法中被隱藏。如果需要在這個方法裡使用被隱藏的全局(成員)變量,需要使用this關鍵字
this:如果局部變量和成員變量同名,可以在局部變量所在的代碼塊裡調用成員變量
5.關於方法的設計
1.方法的所屬性
2.方法的組成 :訪問修飾符 返回值 方法名 方法參數列表
3.重載:方法重載是指一個類中可以有多個方法具有相同的名字,但這些方法的參數必須不同,即或者是參數的個數不同,或者是參數的類型不同。
練習:簡易計算器(能實現兩個、三個、四個數的加)
6.構造方法(構造器)
1.什麼是構造方法?有何特點?
2.構造方法的作用?
3.構造方法何時被調用?
例子:7
練習:8
4.構造方法可以重載嗎?
5.其他說明:
構造器是創建對象的重要途徑,一個類中至少要包含一個構造器
程序員如果不給一個類加構造器,則系統會默認添加一個沒有參數的構造器
7.示例:建立一個學生類,有學號、姓名、年齡、性別屬性,有描述個人信息的方法,通過鍵盤輸入獲取兩個學生的信息,並且打印出描述信息
略
8.構建一個員工信息類(Employee),有員工編號、員工姓名、性別、年齡、工齡、工資等屬性,有工作和休息的方法,還有打印自身信息的方法;
在入口類中通過鍵盤輸入,獲取兩個員工的對象,要求通過帶參數的構造方法來進行成員變量的初始化。然後根據輸入星期幾,來輸出員工當前的狀態(周一至周五工作、周六和周日休息)
package Chapter8_2;
//所有類與方法在同一個文件中
import java.util.Scanner;
public class Staff {
int number;
String name;
char sex;
short age;
short w_age;
long mon;
public Staff(String name, int number, char sex, short age, short w_age,
long mon) {
this.name = name;
this.number = number;
this.sex = sex;
this.age = age;
this.w_age = w_age;
this.mon = mon;
}
public void rest() {
System.out.println(name + "今天休息");
}
public void work() {
System.out.println(name + "今天工作");
}
public void printSelf() {
System.out.println(name + "\t" +number+"\t" +sex + "\t" + age + "\t" + w_age + "\t"
+ mon + "\t");
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("請輸入第一個員工的信息:姓名,工號,性別,年齡,工齡,工資");
String name = scan.next();
int number = scan.nextInt();
char sex = scan.next().charAt(0);
short age = scan.nextShort();
short w_age = scan.nextShort();
long mon = scan.nextLong();
Staff sta = new Staff(name, number, sex, age, w_age, mon);
System.out.println("今天星期幾");
short day = scan.nextShort();
if (day < 6) {
sta.work();
} else if (day >= 6 && day <= 7) {
sta.rest();
} else {
System.out.println("error!");
}
System.out.println("員工信息如下");
System.out.println("姓名"+"\t"+"工號"+"\t"+"性別"+"\t"+"年齡"+"\t"+"工齡"+"\t"+"工資");
sta.printSelf();
}
}
9.變量、方法的分類:
內存的分配:棧內存 堆內存
創建對象時,通過new關鍵字調用構造函數,返回當前類的對象:People p=new People();
對象裡有成員變量,會在堆內存中開辟連續的空間存儲成員變量。
p是People類型的引用,p存儲在棧內存中,它指向堆內存中的對象
這種引用就是C語言中的指針,只是Java語言把這個指針封裝了起來
變量:成員變量 局部變量
成員變量:類變量(有static關鍵字修飾) 和 實例變量(沒有static關鍵字修飾)
局部變量:形參、方法內的變量、代碼塊的變量
方法:類方法(有static關鍵字修飾)、實例方法(沒有static關鍵字修飾)
java中類的生命周期:加載(Loading)-->驗證(Verification)-->准備(Preparation)-->解析(Resolution)-->
初始化(Initialization)-->使用(Using)-->卸載(Unloadling)
1、類變量和實例變量的區別:類變量共享 ,類變量在類加載時分配入內存;實例變量每個對象獨有 ,實例變量在類初始化的時候分配內存。
2、類方法和實例方法的區別:類方法在類加載時分配入口地址;實例方法在類初始化時分配入口地址 (創建第一個對象時)
3、訪問和調用規則:
1、實例方法既能能訪問實例變量又能訪問類變量
2、類方法只能訪問類變量
3、實例方法能調用類方法,但是類方法只能調用類方法
10.對象默認初始化
11.總結
1.類的概念、對象的概念;通過群體和個體的概念理解類和對象的關系
2.類的成員包括—— 屬性、方法 (有啥,能干啥)
3.方法的設計
a.方法名首字母小寫;望文生義;多個單詞組成的方法名首字母小寫,第二個單詞開始首字母大寫
b.返回類型
c.方法的重載(參數的不同,要麼參數個數不同,要麼參數類型不同)
4.成員變量和局部變量的區別;this關鍵字的作用(this相當於對象自身的意思)
5.關於構造方法
a.每一個類都有構造方法,不寫不代表沒有(默認無參的構造方法)
b.構造函數與new關鍵字息息相關,直接決定了對象的構成方式
c.帶參數構造方法的常用方式(給成員變量進行賦值)
6.實例變量和類變量、實例方法和類方法;關鍵字static
13.作業
1.比較大小:寫一個有兩個int型的參數的方法,要求方法能夠比較這兩個參數的大小,並且返回比較大的一個,在另外一個類裡使用這個方法。
2.判斷 :在一個類裡有一個方法,能判斷給定的參數是否為偶數,如果是偶數返回true,否則返回false。在另一個類裡調用該方法。
3.寫一個方法,有三個參數,分別為三個線段的長度,判斷三條線段是否能組成一個三角形,如果能返回true,否則返回false。在另一個類中使用
4.寫一個三個參數的方法,判斷給定的三個參數能否構成直角三角形。另一個類裡使用。