中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中的類是什么?怎么使用類?

發布時間:2020-05-29 18:26:41 來源:億速云 閱讀:296 作者:鴿子 欄目:編程語言

 類的基本概念

  • 類是現實世界抽象為數據集合的一種表達工具,在程序中我們把類作為數據、及數據操作的容器,是一種自定義數據類型。
      
  • 類具有類型本身的屬性,也具有實例屬性。類變量和實例變量都叫成員變量
    ,類變量也叫靜態成員變量(static修飾符標志);類方法和實例方法都叫成員方法,類方法也叫靜態方法(static修飾符標志)。實例也是實際的例子,類似“int a”咱們就叫做變量a是類型int的實例化。
    靜態變量和靜態方法可以通過類直接訪問,也可以通過對象訪問。
     
  • 關于public class,這個public是為了方便能被外部的包導入引用。

  • 靜態綁定在程序編譯階段決定,動態綁定在程序執行時綁定。實例變量、靜態變量、靜態方法、private方法、構造函數都是靜態綁定,只有實例方法是動態綁定,因為Java不鼓勵成員變量多態行為,實例方法都在運行時綁定,如重載:子類繼承父類,相同的實例方法,參數不同,執行時候選擇子類父類方法是通過參數匹配來動態選擇綁定。
     
    +類加載過程如下:
    java中的類是什么?怎么使用類?

    實例變量/實例方法

  • 定一個類本身和定義一個函數類類似,類本身不會自動做什么事情,不會分配內存,也不會執行代碼。方法要執行,需要被實例方法調用,首頁需要初始化一個實例,這里的實例也就是對象。
       
  • 實例化一個對象后,系統會給這個實例化變量開辟兩個內存空間:一個存放實際內容,一個存放實際內容的地址。如下聲明后賦值,聲明時會給變量確定一個存放地址的內存空間,該地址指向存儲內容的首地址。因為這種變量本身不存儲數據內容,只存儲內容位置,我們也稱為引用數據類型(上一節我們講過)。

    Point p = new Poiont();

 

  • 如果在方法內部調用同一個類的另一個方法,就不必使用this。同樣,在一個方法中如果沒有局部變量和成員變量同名,那么在這個方法中使用成員變量也不必使用this。靜態成員也無法使用this(因為沒有實例化)。
     
    • 實例化后,如果沒有給實例變量賦值,系統會自動給系統變量賦于該類型缺省值作為初始默認值(上一節基本類型提到過)。
       
       

      類的構造方法

    • 類型與構造函數名相同,沒有返回值,也不能有返回值,構造函數返回值就是實例本身!
      構造函數不返回值不能加void ,構造函數必須使用public 類名(...)的形式
       
    • 一個類可以有多個構造方法,構造方法可以重載。一旦定義了構造方法,Java就不會再自動生成默認的構造方法了。構造方法有有參構造方法,還有無參構造方法。
       
    • 構造方法可以私有(private),可以用在無法實例化的類,例如:Math等工具類不需要實例化;還有一種場景是只能通過類靜態方法創建類的實例,因為構造方法無法暴露在類外部,所以只能被靜態類方法調用,如:單例模式只能創建一個實例。
       
    • 子類會默認繼承父類的非私有成員變量和非私有成員方法,也包括構造方法(無參構造函數)。如果子類沒有顯示調用父類構造器,則自動調用父類的無參構造器;此時如果父類沒有默認構造器,則編譯器會報錯。

 + 程序執行的以后父類構造方法會優先于子類執行
 

  • 最好能夠為每一個類提供一個無參構造方法,以便于對該類進行擴展的時候避免錯誤。如下:

public class A extends B{
}

class B {
public B(String name){
System.out.println("this constructor is invoked");
}

其中A沒有構造函數,實例化后編譯時A會執行B的帶參數構造函數,編譯報錯。

  • 關于super,super()。

  • super()可以用在子類調用父類的構造方法, 注意必須在構造方法內第一行代碼,super ()訪問無參構造函數,super (paras…)訪問自定義構造函數**。
  • 也可用在子類的普通方法(相互是重載關系,不是重載也沒意義,因為父類非私有成員都是可以直接被子類調用的(如果沒有被覆蓋))調用父類的普通方法與屬性(子類與父類對應的是重寫關系,沒有重寫關系的可以直接調用)。

子類與父類

  • 當一個類繼承于另一個類,子類中沒有父類的方法時。用子類的對象調用方法時,會首先在子類中查找,如果子類中沒有改方法,再到父類中查找。
  • 當一個方法只在父類中定義時, 調用該方法時會使用父類中的屬性
    如果該方法中又調用了其他方法,那么還是按照之前的順序,先在子類中查找,再在父類中查找。
    example:

    package Temp;

    class A {
    int x = 6;
    private int y = 2;

    public A(int a) {
        x = a;
    }
    
    int getz() {
        int z;
        z = x / y;
        return z;
    }
    
    void show() {
        System.out.println("x=" + x);
        System.out.println("y=" + y);
        System.out.println("z=" + getz());
    }

    }

    class B extends A {
    int x = 3, y = 5, z;

    public B(int a) {
        super(a);
    }
    
    int getz() {
        z = x + y;
        return z;
    }

    }

    public class Temp {
    public static void main(String[] args) {
    A num1 = new A(10);
    B num2 = new B(9);
    num1.show();
    num2.show();
    }
    }

重寫與重載

重寫是指子類重新重新覆蓋父類相同參數簽名的方法,重寫代碼的邏輯塊。
重載是指方法名相同但參數類型、個數、順序不同,與返回值無關;調用重載方法,我們通過重載方法參數但匹配來動態綁定方法。
java中的類是什么?怎么使用類?

修飾符public/private/protect/static/final

  • public外部和內部、子類可以訪問,private只能內部訪問、子類內部無法直接訪問,protect外部無法訪問、子類內部可以訪問。
  • 加入final后就不能被繼承訪問,加了final的方法無法重寫

最后上一個 Java畫圖的代碼

主函數如下:

import javax.swing.JFrame;
import paint.MyCanvas;
public class HelloWorld {
JFrame jFrame;
public static void main(String[] args) {
// TODO 自動生成的方法存根
HelloWorld paintMain=new HelloWorld();
paintMain.initView();
}

public void initView()
{
    jFrame =new JFrame();
    jFrame.setBounds(100, 100, 500, 500);
    jFrame.setTitle("畫圖測試");
    jFrame.setLayout(null);

    MyCanvas myCanvas=new MyCanvas();//畫布
    myCanvas.setBounds(0,0, 500, 500);
    jFrame.add(myCanvas);
    jFrame.setVisible(true);
}

}

MyCanvas類如下:

package paint;

import java.awt.Canvas;
import java.awt.Graphics;

public class MyCanvas  extends Canvas{
@ Override
public void paint(Graphics g) {
// TODO 自動生成的方法存根
super.paint(g);//直接輸入paint提示出來函數;
char[] a= {'顯','示','文','字'};
g.drawChars(a, 0, 4, 50, 150);// data數組,offset為數據初始偏移量,length為要繪制的字符數,x,y文本基線的xy坐標,
g.drawString("字符測試01", 20, 20);// 注意,字符串型的x,y在字符中,而不是左上頂點;

}

}

畫圖函數參考

畫線段:drawLine

public abstract void drawLine(int x1,int y1,int x2,int y2)
在此圖形上下文的坐標系中,使用當前顏色在點 (x1, y1) 和 (x2, y2) 之間畫一條線
參數:
x1 - 第一個點的 x 坐標。
y1 - 第一個點的 y 坐標。
x2 - 第二個點的 x 坐標。
y2 - 第二個點的 y 坐標。

畫矩形:drawRect

public void drawRect(int x,int y, int width, int height)
繪制指定矩形的邊框。矩形的左邊緣和右邊緣分別位于 x 和 x + width。上邊緣和下邊緣分別位于 y 和 y + height。使用圖形上下文的當前顏色繪制該矩形。

參數:
x - 要繪制矩形的 x 坐標。
y - 要繪制矩形的 y 坐標。
width - 要繪制矩形的寬度。
height - 要繪制矩形的高度。

畫橢圓形:drawOval

public abstract void drawOval(int x, int y,int width, int height)

繪制橢圓的邊框。得到一個圓或橢圓,它剛好能放入由 x、y、width 和 height 參數指定的矩形中。
橢圓覆蓋區域的寬度為 width + 1 像素,高度為 height + 1 像素。

參數:
x - 要繪制橢圓的左上角的 x 坐標。
y - 要繪制橢圓的左上角的 y 坐標。
width - 要繪制橢圓的寬度。
height - 要繪制橢圓的高度。

畫帶顏色的圖形:setColor

public abstract void setColor(Color c)
將此圖形上下文的當前顏色設置為指定顏色。使用此圖形上下文的所有后續圖形操作均使用這個指定的顏色。

參數:
c - 新的呈現顏色。

畫圓:drawRoundRect

public abstract void drawRoundRect(int x, int y,int width,int height,int arcWidth,int arcHeight)
用此圖形上下文的當前顏色繪制圓角矩形的邊框。矩形的左邊緣和右邊緣分別位于 x 和 x + width。矩形的上邊緣和下邊緣分別位于 y 和 y + height。

參數:
x - 要繪制矩形的 x 坐標。
y - 要繪制矩形的 y 坐標。
width - 要繪制矩形的寬度。
height - 要繪制矩形的高度。
arcWidth - 4 個角弧度的水平直徑。
arcHeight - 4 個角弧度的垂直直徑。

填充橢圓:fillOval

看看它的參數:
fillOval(int x,int y ,int width ,int  height)
前兩個X 和 Y是矩形框的左上角的坐標,width和height是寬和高。

畫多邊形
    int px[] = { 210, 220, 270, 250, 240 };
    int py[] = { 220, 250, 300, 270, 220 };
    g.drawPolygon(px, py, px.length);
顯示文字

g.drawString(String str, int x,int  y)

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

开阳县| 彭山县| 自贡市| 邯郸市| 松原市| 徐水县| 云阳县| 天峨县| 盖州市| 呼图壁县| 青海省| 香河县| 城步| 松潘县| 淄博市| 任丘市| 黄石市| 基隆市| 扎赉特旗| 元氏县| 长垣县| 湘潭市| 犍为县| 丰宁| 突泉县| 福清市| 广元市| 皮山县| 如东县| 游戏| 贵港市| 深州市| 织金县| 临沂市| 治县。| 长白| 柘荣县| 郎溪县| 延长县| 佛山市| 横峰县|