1. 程式人生 > 其它 >Oracle 字串和日期轉換

Oracle 字串和日期轉換

java的三大特徵

面嚮物件語言的三大特徵

封裝

​ 包裝 把實現細節包裝起來,對外提供方法訪問

​ 將類中的某些資訊或者成員方法隱藏起來,外部無法直接訪問,向外提供一些專門的方法操作;

​ 隱藏(訪問許可權修飾符)

public class Person {

    /**
    通過訪問修飾符來隱藏類中的資訊
     */
    private String name;
    private int age;
  
   /* public   Person(String n , int a){k
        name = n;
        age = a;
    }*/

    /**
    *為私有屬性提供專門的方法來進行訪問
     * this 現實的表示當前正在訪問的物件
     */
    public void setName(String name) {
        if (name.length() < 5) {
            this.name = name;//物件p訪問時,this表示的是p物件
            eat();
        }else{
            this.name="肖恩";
            this.eat();//本類中訪問私有許可權的方法
        }
    }
    public String getName(){
        return name;
    }

    public void setAge(int age){
        this.age=age;
    }
    public int getAge(){
        return age;
    }

    /*
    私有許可權的方法,可以在本類中訪問
     */
    private void eat() {
        System.out.print("乾飯王:");
    }
}

public class PersonTest {
    public static void main(String[] args) {

        /*Person p = new Person("jim",20);*/
        /*Person p1 = new Person("jack",28);*/

        Person p = new Person();
               p.setName("崔");
               p.setAge(21);
        System.out.println(p.getName()+p.getAge());


        Person p1 = new Person();
               p1.setName("瑞");
               p1.setAge(22);
        System.out.println(p1.getName()+p1.getAge());
    }
}

this關鍵字

this關鍵字代表自身類的物件

注意:this關鍵字必須放在非靜態方法裡面

public class Demo{
	private int a;
			
	public Demo(int a){
	    this.a = a;
	}
			
	public int getA(){
		return a;
	}
			
	public void setA(int a){
		this.a = a;
	}
}

繼承

  1. 父類被子類繼承
  2. 子類可以擁有父類的一些功能
  3. 繼承是面嚮物件語言的一種設計思想
  4. 可以提高程式碼的重用性以及程式碼的可擴充套件性

舉個例子

人類:共有姓名屬性

​ 學生類:繼承人類 自有屬性:學號

​ 小學生:繼承學生類

​ 中學生:繼承學生類

​ 大學生:繼承學生類

​ 工人類:繼承人類 自有屬性:工號 工種

什麼樣的關係可以使用繼承?
​ 同一類的東西( is a 關係)

A類 extends Object{}
B類 extends A類{}
C類 extends B類{}

建立父類(People)

package com.ff.javaopp.Day004;
/*
    primarySchool類繼承People
    PrimarySchool是People的子類(派生類)
    父類(基類)
    把人類相關的一些公有屬性,行為,定義在people類中
    extends關鍵字

    當一個類沒有顯示的繼承一類,那麼這個類預設繼承object
    object是java所有類的基類 稱超類
 */
public class People {

    private String name ;
    private int age;

    public People(){
        System.out.println("人類中的無參的構造方法");
    }

    public People(String name){
        this.name=name;
        System.out.println("人類中的有參的構造方法");
    }

    public void setName(String name ){
        this.name=name;
    }
    public String getName(){
        return name;
    }

    public void setAge(int age){
        this.age = age;
    }
    public int getAge(){
        return age;
    }


    public void eat(){
        System.out.println(name+"乾飯人,乾飯魂,乾飯都是人上人");
    }
}

建立子類(PrimarySchool)

public class PrimarySchool extends People {

    private String clas;

    public PrimarySchool(){
        super("小紅");
        System.out.println("小學生中的無參構造方法");
    }
    public void setClass(String clas){
        this.clas=clas;
    }
    public String getClas(){
        return clas;
    }


    public void play(){
        System.out.println("過家家");
    }

}

建立子類(MiddleSchool)

public class MiddleSchool extends People{
    private String grade;
    public void study(){
        System.out.println("學習人,學習魂,學習都是人上人");
    }

    public void setGrade(String grade){
        this.grade=grade;
    }
    public String getGrade(){
        return grade;
    }

}

建立測試類(PeopleTset)

package com.ff.javaopp.Day004;

public class PeopleTset  {
    public static void main(String[] args) {
        PrimarySchool p = new PrimarySchool();
        p.setName("瑞瑞");//父類
        p.setAge(21);//父類
        p.setClass("學前班");//小學生自己的屬性
        System.out.println(p.getName()+p.getAge());//父類
        System.out.println(p.getClas());//小學生自己的屬性
        p.eat();//父類
        p.play();//小學生自己的方法

        MiddleSchool M = new MiddleSchool();
        M.setName("榮榮");//父類
        M.setAge(22);//父類
        M.setGrade("高中生");//高中生自己的屬性
        System.out.println(M.getName()+M.getAge());//父類
        System.out.println(M.getGrade());//高中生自己的屬性
        M.study();//高中生自己的屬性
        M.eat();//父類

        p.hashCode();//呼叫object類中的方法
        /*
        子類繼承了父類後,可以擁有父類中私有屬性,方法
         */
    }
}

在建立子類物件時,會先呼叫父類構造方法,建立父類物件

public class Test {
    /*
    繼承中的構造方法
    在建立一個子類物件時,同時也會建立父類物件
     */
    public static void main(String[] args) {
        XiaoMing xm= new XiaoMing();
        xm.eat();
    }
}

super表示父類

super關鍵字代表父類的引用,在程式中主要的用途

在子類構造方法中要呼叫父類的構造方法,需要注意:super語句只能出現在子類構造方法體的第一行。
用“super.成員變數名”來引用父類成員變數
用“super.方法名(引數列表)”的方式訪問父類的方法。
與this的區別,this通常指代當前物件,super通常指代父類。

建立小學生(PrimarySchool)的子類(XiaoMing)

public class XiaoMing extends PrimarySchool{

    /*
    在呼叫子類方法時,會先呼叫父類的構造方法
     */
    public XiaoMing(){
        //super(); 構造方法第一行預設使用super();呼叫父類預設無參的構造方法
        super();//需要顯示呼叫,必須放在構造方法的第一行
        System.out.println("小學生小明中無參的構造方法");
    }
 }

方法的重寫

為什麼使用方法的重寫?

父類的實現方式不能滿足子類的功能時可以進行重寫

public class XiaoMing extends PrimarySchool{
    /*
    方法的重寫:當子類中的實現步驟與父類中的實現方式不同時,
    可以在子類中將父類中的方法重寫
            必須與父類的方法結構相同(返回值,引數)
            子類重寫後的方法的許可權範圍要大於等於父類方法的訪問許可權

            super表示當前類的父類物件
            在子類中可以通過super訪問父類中成員

            @Override 註解  標籤
            表明該方法是從父類中重寫過來了的
     */
    @Override
    public void eat(){
        System.out.println("小明喜歡吃麵面");
        super.eat();//呼叫父類成員
    }

    public void Question(){
        System.out.println("小學生小明喜歡問問題");
    }
}

瞭解關聯關係和依賴關係

建立一個Mobile類

public class Mobile {
    private  String num;
    public String getNum() {
        return num;
    }
    public void setNum(String num) {
        this.num = num;
    }
}

關聯關係:has-a關係 XXX有XXX
依賴關係:use-a關係 某個類中用到另一個類

public class Person {
    private Mobile mobile;//單向關聯 一對一關聯
    private Mobile[] mobiles;//單項關聯  一對多關聯

    /*
    依賴關係,Person中的某個方法中使用到另一個類
     */
    public void callPeople(MiddleSchool middleSchool){
        middleSchool.study();
        middleSchool.setAge(25);//傳遞過來的是引用型別,會改變原來的值
    }
   }

抽象類abstract

  1. 如果一個類中沒有包含足夠的資訊來描述一個具體的物件,這樣的類就是抽象類
  2. 抽象類 也是一個類
  3. 抽象方法:被abstract關鍵字修飾,沒有方法體,只是作為功能的定義

抽象類的特點: ​
不能建立物件,因為其中包含了抽象的方法 ​
包含構造方法,在建立子類物件時,可以簡介建立父類物件

建立Animal類

/*
    被abstract修飾的類就是抽象類
    抽象類中不一定有抽象方法
    有抽象方法,那麼這個類必定是抽象類
 */
public abstract class Animal {
    String name;
    /*
      在頂層類中,方法的實現與子類大多不相同,那麼在頂層類中可以將方發聲明為抽象方法
      被abstract修飾,沒有方法體
      只作為方法的定義
    */
    public abstract void eat();
    public abstract void sleep();

    public void play(){
        System.out.println("Animal Play");
    }
}

建立子類Dog類

/*
    抽象類就是作為定義,讓其他類繼承

    一個類繼承抽象類:
        要麼將子類宣告為抽象類
        要麼重寫抽象類中所有的抽象方法
 */
public class  Dog  extends Animal{

    @Override
    public void eat() {
        System.out.println("狗子吃");
    }

    @Override
    public void sleep() {
        System.out.println("狗子睡");
    }
}

建立子類Cat類

package com.ff.javaopp.Day004.abstractDemo;

public class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("貓吃魚");
    }

    @Override
    public void sleep() {
        System.out.println("貓睡覺");
    }
}

建立測試類

package com.ff.javaopp.Day004.abstractDemo;

public class Test {
    public static void main(String[] args) {
       Dog d = new Dog();
        d.eat();
        d.sleep();
        d.play();    
}

多型

同種事物,在不同時刻表現不同的狀態

多型的條件:

  1. 要有繼承
  2. 要有方法重寫
  3. 父類的引用指向子類物件

不使用多型

public class Test {
    public static void main(String[] args) {
     /*   Dog d = new Dog();
        d.eat();
        d.sleep();
        d.play();*/
        //Dog d = new Dog();不是多型
        Dog dog = new Dog();
        Cat cat = new Cat();
        Test t = new Test();
        t.feedCat(cat);
        t.feedDog(dog);
    }

    public void feedDog(Dog dog) {
        dog.eat();
        dog.sleep();
    }

    public void feedCat(Cat cat) {
        cat.eat();
        cat.sleep();
    }
}

程式碼過於冗餘

使用多型

public class Test1 {
    public static void main(String[] args) {

        Animal dog = new Dog();
                //dog.eat();編譯期間看左邊,執行期間看右邊
        Animal cat = new Cat();
        Test1 t = new Test1();
        t.feedAnimal(cat);
        t.feedAnimal(dog);
    }

    public void feedAnimal(Animal animal) {
        animal.eat();//
        animal.sleep();
    }
}

執行結果:

貓吃魚
貓睡覺
狗子吃
狗子睡