1. 程式人生 > 其它 >Java入門01

Java入門01

技術標籤:java學習

Java入門

安裝好jdk檔案後,使用java -version (cmd中檢視Java版本)

新建一個TXT檔案,輸入以下程式碼,改字尾為.java

class Demo{
    	public static void main(String[] args){
    		System.putprint('hello world!')
    	}
    }

進入該檔案目錄,滑鼠點選檔案路徑,輸入cmd,在環境中輸入javac demo.java

隨後會生成一個.class檔案

然後(在cmd中)輸入java Demo(類名)(注意類名的大小寫),即可看見列印內容hello world!


安裝IDEA

建立包:new->package ->取名稱

建立類:new->Java Class ->取名稱

【命名規範:類名->駝峰 方法名->小駝峰】

java中分基本資料型別、引用資料型別(類、陣列、介面、介面對應的抽象類等)

過載問題

一個類中可以有多個方法具有相同的名稱,但這些方法的引數名必不相同

可以是 1、引數個數不同; 2、引數個數相同,但引數型別不同

    public class MethodDemo01 {
        public static void main(String[] args){
            MethodDemo01 methodDemo01=
new MethodDemo01(); System.out.println(MethodDemo01.def(2,4));//輸出6 methodDemo01.def(2.0,4);//輸出6.0 } public static int def(int a,int b){ return a+b; } public void def(double a,double b){ System.out.println(a+b); } }

Private

讓類裡面的屬性不被外界訪問,在屬性面前加private

private String idCard="436856927347";

若要訪問,可通過新增一個函式方法,通過方法訪問私有屬性

    public String getIdCard(){
        return idCard;
    }

也可通過set方法給屬性賦值

    public void setIdCard(String idCard){
        this.idCard=idCard;
    }

快速設定多個已宣告屬性的get或set方法:

1、右鍵->Generate->Getter/Setter->選中需要設定該方法的屬性->OK

2、Alt+insert->Generate->Getter/Setter->選中需要設定該方法的屬性->OK


構造方法

1、無參構造方法(預設,不寫也會有)

    public Student(){
        
    }

2、有參構造方法

    public Student(String name){
        this.name=name;
    }

通過傳參可在new時給宣告的類賦予相對應的屬性值


堆、棧、方法區

Java程式執行時,資料會分割槽存放,JavaStack(Java棧)、 heap(堆)、method(方法區)

棧記憶體中存放基本資料型別的資料,和物件的引用(堆記憶體地址)

堆記憶體存放類的物件,所有的類物件都是通過new方法建立,建立後,在棧中會建立類物件的引用(記憶體地址)

方法區,又叫靜態區,存放所有的類(class)、靜態變數、靜態方法、常量和成員方法


垃圾回收機制

與C++不同的是,不用每次都手動回收清除,Java是自動回收


過載和重寫的區別

重寫(override
override是重寫(覆蓋)了一個方法,以實現不同的功能。一般是用於子類在繼承父類時,重寫(重新實現)父類中的方法

過載(overload
一般是用於在一個類內實現若干過載的方法,這些方法的名稱相同而引數形式不同

【類不支援多繼承】

多型

多型是同一個行為具有多個不同表現形式或形態的能力。
多型就是同一個介面,使用不同的例項而執行不同操作

多型存在的三個必要條件

  • 繼承
  • 重寫
  • 父類引用指向子類物件:Parent p = new Child();

向上轉型:子->父,父類的引用指向子類物件
向下轉型:父->子,(通過強轉換)父類引用轉換為子類物件

通過以下程式碼輔助理解

    public class Test {
        public static void main(String[] args) {
          show(new Cat());  // 以 Cat 物件呼叫 show 方法
          show(new Dog());  // 以 Dog 物件呼叫 show 方法
                    
          Animal a = new Cat();  // 向上轉型  
          a.eat();               // 呼叫的是 Cat 的 eat
          Cat c = (Cat)a;        // 向下轉型  
          c.work();        // 呼叫的是 Cat 的 work
      }  
                
        public static void show(Animal a)  {
          a.eat();  
            // 型別判斷
            if (a instanceof Cat)  {  // 貓做的事情 
                Cat c = (Cat)a;  
                c.work();  
            } else if (a instanceof Dog) { // 狗做的事情 
                Dog c = (Dog)a;  
                c.work();  
            }  
        }  
    }
     
    abstract class Animal {  
        abstract void eat();  
    }  
      
    class Cat extends Animal {  
        public void eat() {  
            System.out.println("吃魚");  
        }  
        public void work() {  
            System.out.println("抓老鼠");  
        }  
    }  
      
    class Dog extends Animal {  
        public void eat() {  
            System.out.println("吃骨頭");  
        }  
        public void work() {  
            System.out.println("看家");  
        }  
    }

程式碼參考自菜鳥教程

結果為:

    吃魚
    抓老鼠
    吃骨頭
    看家
    吃魚
    抓老鼠

抽象類

抽象方法只能存在抽象類中,抽象類中可以擁有普通方法

關鍵字abstract

    public abstract class Animal {
        public abstract void getName();
        public void getAge(){
            
        }
    }

抽象類只能用來被繼承

當子類繼承了父類,且父類為抽象方法時,子類必須重寫方法

介面

通過interface關鍵字宣告

    public interface Service {
        
    }

抽象方法可以不寫方法體public abstract

沒有方法體的方法一定是抽象方法

在介面中不允許有變數存在

介面是一個特殊的抽象類,也是用來被子類繼承的,有一個特殊的關鍵字implements用來實現介面

【Alt+回車】檢查錯誤


練習

人可以接收訊息,可以分別從QQ、微信、Email接收,使用多型+介面實現

1、建立People類,定義人可以接收訊息的功能

    public class People {
        public void getMessage(Message message){//引數根據定義的介面決定
            message.getMessage();
        }
    }

2、定義接收訊息介面,使用關鍵字interface

    public interface Message {
        //public abstract void getMessage();  
        void getMessage();
    }

【注:在介面中定義抽象方法可以省略方法前的public abstract】

3、分別建立QQ、Wechat、Email類實現介面,相當於宣告: 我應該具備這個介面中的功能,實現類仍需要 重寫 方法以實現具體功能

格式:

    classimplements 介面 {
        重寫介面中方法
    }

實現程式碼:

    public class QQ implements Message{
        @Override
        public void getMessage() {
            System.out.println("接收來自QQ的訊息");
        }
    }
    public class Wechat implements Message{
        @Override
        public void getMessage() {
            System.out.println("接收來自Wechat的訊息");
        }
    }
    public class Email implements Message{
        @Override
        public void getMessage() {
            System.out.println("接收來自Email的訊息");
        }
    }

4、建立一個Test類,測試

    public class Test {
        public static void main(String[] args) {
            People people=new People();
            people.getMessage(new Wechat());//接收來自Wechat的訊息
            people.getMessage(new QQ());//接收來自QQ的訊息
            people.getMessage(new Email());//接收來自Email的訊息
        }
    }