Java04

高洛峰
高洛峰原創
2016-10-10 09:00:092287瀏覽

0.物件導向(Object 物件:OO):

    0、OOA(物件導向分析) OOD(物件導向的設計) OOP(物件導向程式設計)

    1、是軟體開發方法

 :資料庫系統、互動式介面、應用平台、分散式系統、人工智慧等領域

    3、是一種對現實世界的理解與抽象的方法,是電腦程式設計技術發展到一定階段的產物

 

1.類別與物件的基本概念

    1.類別:類別是對具有相似性質的一類事物的抽象,類別封裝了相似性質事物的屬性(特徵)和方法(行為)   (即類別的成員)

    2.對象:對象為一類事物中特定的個體

    3.類-對象    關係參考     族群-個體

 

   族群-個體

 

   族群方法  零個或多個建構器

        成員變數:定義該類別或該類別的實例所包含的狀態資料

        方法:用來定義該類別或該類別的實例的行為特性:用於建構此類的實例(關於構造器後面會著重講解)

    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.練習:卡類,描述汽車的屬性(品牌mark、排氣量power、顏色color、價格price)

    和方法(啟動start、加速speedup、正常行駛run,碰到hit(人))

         寫一個People類,有屬性(姓名name、性別sex、年齡age)、

         方法(駕駛drive(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.方法的組成  :存取修飾符  返回值  方法名稱  方法參數

 多個方法具有相同的名字,但這些方法的參數必須不同,即或參數的個數不同,或參數的類型不同。           

    練習:簡易計算器(可實現兩個、三個、四個數字的加)

 

 是構造方法?有何特色?

    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.写一个三个参数的方法,判断给定的三个参数能否构成直角三角形。另一个类里使用。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn