JAVA面向對象之靜態變量 靜態方法 內存解析

原文地址:http://blog.csdn.net/liurongsheng123/article/details/79017157

JAVA面向對象

構造方法

特色

無返回值
方法名與類名相同

形式:public 方法名(){

}1234567

注意事項

1.若是你沒寫無參的構造方法
系統會給你提供一個無參的構造方法
2.若是我只寫了有參的構造方法
這時系統就不會給你提供無參的構造方法
3.寫類的時候 建議 無參有參構造方法全寫12345

定義類書寫順序

成員變量 -> 無參有參構造方法 -> set/get方法 ->成員方法1

代碼示例1

public class Demo01{

}
class Car(){
    String name;    int num;    /*
    *構造方法重載:只跟參數有關
    *當類中的成員變量須要計算的時候 能夠在構造方法裏完成
    */

    //無參構造方法
    public car(){
        System.out.println("我是無參構造方法");
    }    public car(String name, int num){    //初始化成員變量
        this.name = name;        this.num = num;
        System.out.println("我是有參構造方法");
    }    public Car(String name){        this.name = name;
    }    public void sayHi(){
        System.out.println(name + "*****" + num);
    }    public void fun(){
        System.out.println("哈哈");
    }
}123456789101112131415161718192021222324252627282930313233

代碼示例2

需求:
建立一個矩形類 屬性 長 寬
計算 周長 和 面積(都用整數就行)
要求
有參無參構造方法  set/get方法12345
public class Demo02{    private int side; //定義長
    private int wide; //定義寬
    private int length; //定義周長
    private int area;  //定義面積

    public Demo02(){

    }    public Demo02(int side, int wide){        this.side = side;        this.wide = wide;        this.length = (side + wide) * 2;        this.area = side * wide;
    }    //建議不要修改set get方法的寫法
    public int getSide(){        return side;
    }    public void setSide(int side){        this.side = side;
    }    public int getWide(){        return wide;
    }    public void setWide(int wide){        this.wide = wide;
    }    public int getLength(){        return length;
    }    public void setLength(int length){        this.length = length;
    }    public int getArea(){        return area;
    }    public void setArea(int area){        this.area = area;
    }
}1234567891011121314151617181920212223242526272829303132333435363738394041424344

靜態變量 靜態方法

靜態變量 和 靜態方法(使用static修飾)
靜態變量保存在方法的靜態區(共享區)
靜態變量是共享的空間123

靜態變量如何調用

1.可使用對象來調用
2.推薦使用類名來調用12

爲何靜態變量要用類名取調用

先有雞仍是先有的蛋
先有類仍是先有對象

只要加載了.class文件 就加載了靜態變量(這時尚未對象參數)   
靜態變量隨着類的產生而產生12345

靜態變量(屬於類 也叫作類變量)和非靜態變量(屬於對象 對象變量)的區別

1.調用方式不一樣
靜態變量:對象 或者 類名去調用(推薦 類名)
非靜態變量:只能使用對象去調用
2.內存中存在的位置不一樣
靜態變量:方法的靜態區
非靜態成員變量:堆區
3.加載的時機不一樣
靜態變量:隨着類的加載而加載(不依賴對象而建立)
非靜態成員變量:隨着對象的建立而建立(依賴對象)
4.聲明週期不一樣
靜態變量:隨着類的銷燬而銷燬(至關於程序結束)
非靜態成員變量:隨着對象的銷燬而銷燬123456789101112

何時設置static靜態變量

當你在設計類的時候,須要考慮成員變量是否須要共享,static 修飾的方法或者變量 是被全部對象所共享的同一塊內存空間12

代碼示例

public class Demo03{    public static void main(String[] args){
        AVGirl girl1 = new AVGirl();
        girl1.name = "蒼老師";
        AVGirl.country = "日本";
        girl.sayHi();

        AVGirl girl2 = new AVGirl();
        girl2.name = "波多老師";
        AVGirl.country = "北海道";
        girl2.sayHi();
    }
}
class AVGirl{
    String name;  //姓名
    static String country;  //國籍

    public void sayHi(){
        System.out.println("姓名爲:" + name);
        System.out.println("國籍爲:" + country);
    }
}12345678910111213141516171819202122

靜態變量在內存中得加載步驟

1.加載.class文件(字節碼文件)到方法區2.main方法入棧3.遇見AVGirl對象 先要加載AVGirl.class  AVGirl中分爲靜態區和非靜態區  這時初始化
靜態變量country的初值爲null4.建立對象(堆區開闢空間)5.把對象地址賦值給girl1變量 保存6.經過類名 修改類變量的值7.sayHi方法入棧 打印8.sayHi出棧9.main出棧!1234567891011

內存變量圖形示例

這裏寫圖片描述

這裏寫圖片描述

靜態方法與非靜態方法

靜態方法(使用static 修飾的方法)1.只能使用靜態變量2.只能使用靜態方法
舉例:Math.random();Array.toString();

非靜態方法:1.可使用靜態變量和非靜態變量2.可使用靜態方法和非靜態方法12345678910

代碼舉例

public class Demo04{    public static void main(String[] args){
        Man man = new Man();
        man.fun();
    }
}
class Man{    int num1 = 10;    static int num2 = 5;    //非靜態方法 能夠訪問 靜態變量和非靜態變量
    //靜態方法 能夠訪問啥?(加上靜態 至關於 隨着類改變跟對象不要緊)
    public void fun(){
        System.out.println(num1);
        System.out.println(num2);        //調用靜態方法(類方法) 推薦使用 類名調方法
        Man.sayHi();
    }    public static void sayHi(){
        System.out.println("我是sayHi");
    }    //靜態方法
    //靜態變量和靜態方法中 不能訪問 非靜態變量(應爲加載類的時候尚未對象)
    //簡單記:靜態只能使用靜態的
    public static void fun1(){        //System.out.println(num1);   靜態方法沒法調用非靜態變量
        System.out.println(num2);
    }
}1234567891011121314151617181920212223242526272829

main解析

1.main方法就是爲了讓jvm去調用的方法public: jvm調用這個方法 要使用最大權限static: jvm調用時是不須要建立對象 直接使用類名調就行(類名.main())main: 不是關鍵字 jvm只認識main這個詞String[] args 接收從鍵盤輸入的值(基本不用這個方法了)12345

課堂習題

五分鐘內寫出 
 1.遍歷數組
 2.在數組中打印最大值
 3.反轉數組
 4.冒泡排序
 這些在這篇知識前都應該會寫123456
public void fun(int[] array){    for(int i = 0; i < array.length; i ++){
        System.out.println(array[i]);
    }
}public void fun1(int[] array){    int temp = 0;    for(int i = 0;i < array.length; i++){        if(temp < array[i]){
            temp = array[i];
        }
    }
    System.out.println("最大值:" + temp);
}public void fun2(int[] array){    for(int i = 0; i < array.length/2; i++){        int temp = array[i];        array[i] = array[array.length - 1 -i];        array[array.length - i - 1] = temp;
    }
}public void fun3(int[] array){    for(int i = 1; i < array.length; i++){        for(int j = 0; j < arrith.length - i; j++){            if(array[j] > array[j+1]){                int temp = array[j];                array[j] = array[j + 1];                array[j+1] = temp;
            }
        }
    }
}1234567891011121314151617181920212223242526272829303132333435

何時使用靜態方法?

靜態方法  只能使用靜態的變量和方法
當我要寫的這個方法中 沒有使用到 非靜態方法和變量  可使用靜態方法12
當我這個類 全部方法都是靜態方法
這時 這個類在使用的時候 就徹底不須要對象
能夠把構造方法私有化(外界就再也建立不了對象了,能夠告訴使用者 
使用這個類不須要建立對象)  若是寫了文檔註釋 可使用編譯指令
生成文檔
編譯文檔指令:
javadoc -d(指定生成文檔所在的文件夾) -author -version 文件名.java1234567

做業 建立10個對象類 並寫明get/set方法

1.bear類

    private static String name;    private static String color;    private static double weight;    private static double high;    public void climbTree(){
        System.out.println("熊會爬樹");
    }    public void swim(){
        System.out.println("熊會游泳");
    }    public void catchFish(){
        System.out.println("熊會抓魚");
    }    public void eatHoney(){
        System.out.println("熊喜歡吃蜂蜜");
    }    public void sayHi(){
        System.out.println("姓名: " + name);
        System.out.println("毛色:" + color);
        System.out.println("體重:" + weight);
        System.out.println("身高:" + high);
    }    public String getName(){        return name;
    }    public void setName(String name){        this.name = name;
    }    public String getColor(){        return color;
    }    public void setColor(String color){        this.color = color;
    }    public double getWeight(){        return weight;
    }    public void setWeight(double weight){        this.weight = weight;
    }    public double getHigh(){        return high;
    }    public void setGigh(double high){        this.high = high;
    }1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950

2.長方體類

    private static double side;    private static double wide;    private static double high;    public static void sayHi() {
        System.out.println("長方體的長爲:" + side);
        System.out.println("長方體的寬爲:" + wide);
        System.out.println("長方體的高位:" + high);
    }    public static void perimeter() {
        System.out.println("長方體的周長爲:" + (4 * side + 4 * wide + 4 * high));
    }    public static void area() {
        System.out.println("長方體的面積爲:" + (side * wide * 2 + side * high * 2 + wide * high * 2 ));
    } 
    public static void volume() {
        System.out.println("長方體的體積爲:" + (side * wide * high));
    }    public double getSide() {        return side;
    }    public void setSide(double side) {        this.side = this.side;
    }    public double getWide() {        return wide;
    }    public void setWide(double wide) {        this.wide = wide;
    }    public double getHigh() {        return high;
    }    public void setHigh(double high) {        this.high = high;
    }123456789101112131415161718192021222324252627282930313233343536373839

3.青蛙類

    private static String name;    private static String color;    private static String swim;    private static String type;    public static void swim(){
        System.out.println("青蛙會游泳");
    }    public static void catchInsets() {
        System.out.println("青蛙會抓害蟲");
    }    public static void cry() {
        System.out.println("青蛙呱呱叫");
    }    public static void sayHi() {
        System.out.println("姓名:" + name );
        System.out.println("膚色:" + color);
        System.out.println("泳技:" + swim);
        System.out.println("類型:" + type);
    }    public String getName() {        return name;
    }    public void setName(String name) {        this.name = name;
    }    public String getColor() {        return color;
    }    public void setColor() {        this.color = color;
    }    public String getSwim(){        return color;
    }    public void setSwim() {        this.swim = swim;
    }    public String getType() {        return type;
    }    public void setType() {        this.type = type;
    }123456789101112131415161718192021222324252627282930313233343536373839404142434445464748

4.樹葉類

    private static String name;    private static String type;    private static String color;    private static double wide;    public void fun1() {
        System.out.println("樹葉能夠進行光合做用");
    }    public void fun2() {
        System.out.println("樹葉能夠進行氧化做用");
    }    public void fun3() {
        System.out.println("樹葉能夠成長");
    }    public void sayHi() {
        System.out.println("姓名:" + name);
        System.out.println("類型:" + type);
        System.out.println("顏色:" + color);
        System.out.println("葉寬:" + wide);
    }    public String getName() {        return name;
    }    public void setName(String name) {        this.name = name;
    }    public String getType() {        return type;
    }    public void setType(String type) {        this.type = type;
    }    public String  getColor() {        return color;
    }    public void setColor(String color) {        this.color = color;
    }    public double getWide() {        return wide;
    }    public void setWide(double wide) {        this.wide = wide;
    }123456789101112131415161718192021222324252627282930313233343536373839404142434445464748

5.×××類

    private static double length;  //彈長
    private static double springDiameter;  //彈經
    private static double weight;//起飛重量

    public static void launch() {
        System.out.println("×××能夠發射");
    }    public static void fly() {
        System.out.println("×××能夠飛行");
    }    public static void bomb() {
        System.out.println("×××能夠爆炸");
    }    public static void sayHi() {
        System.out.println("彈長爲:" + length);
        System.out.println("彈徑爲:" + springDiameter);
        System.out.println("重量爲:" + weight);
    }    public double getLength() {        return length;
    }    public void setLength(double length) {        this.length = length;
    }    public double getSpringDiameter() {        return springDiameter;
    }    public void setSpringDiameter(double springDiameter) {        this.springDiameter = springDiameter;
    }    public double getWeight() {        return weight;
    }    public void setWeight(double weight) {        this.weight = weight;
    }123456789101112131415161718192021222324252627282930313233343536373839

6.猴子類

    private static  String name;    private static String color;    private static  String sex;    private static  String type;    public static void sayHi() {
        System.out.println("姓名:" + name);
        System.out.println("顏色:" + color);
        System.out.println("性別:" + sex);
        System.out.println("類型:" + type);
    }    public static void climb() {
        System.out.println("猴子 會  爬樹");
    }    public static void eat() {
        System.out.println("猴子 會 吃飯");
    }    public static void sleep() {
        System.out.println("猴子 會  睡覺");
    }    public String getName() {        return name;
    }    public void setName(String name) {        this.name = name;
    }    public String getColor() {        return color;
    }    public void setColor() {        this.color = color;
    }    public String getSex() {        return sex;
    }    public void setSex(String sex) {        this.sex = sex;
    }    public String getType() {        return type;
    }    public void setType() {        this.type = type;
    }123456789101112131415161718192021222324252627282930313233343536373839404142434445464748

7.飛機類

    private static double weight; //起飛重量
    private static double speed;  //飛行速度
    private static int power;  //功率
    private static double ammunition;//彈藥

    public void fly(){
        System.out.println("飛機能夠快速飛行");
    }    public void manned(){
        System.out.println("飛機能夠載人");
    }    public void bomb(){
        System.out.println("飛機能夠投彈");
    }    public void sayHi(){
        System.out.println("起飛重量爲:" + weight);
        System.out.println("飛行速度爲:" + speed);
        System.out.println("發動功率爲:" + power);
        System.out.println("掛彈數量爲:" + ammunition);
    }    public double getWeight(){        return weight;
    }    public void setWeight(double weight){        this.weight = weight;
    }    public double getSpeed(){        return speed;
    }    public void setSpeed(double speed){        this.speed = speed;
    }    public int getPower(){        return power;
    }    public void setPower(int power){        this.power = power;
    }    public double getAmmunition(){        return ammunition;
    }    public void setAmmunition(double ammunition){        this.ammunition = ammunition;
    }12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849

8.坦克類

    private static String model;  //型號
    private static double range;  //射程
    private static double weight; //重量
    private static double speed;  //速度

    public void run(){
        System.out.println("坦克能夠跑");
    }    public void artillery(){
        System.out.println("坦克能夠發射炮彈");
    }    public void turn(){
        System.out.println("坦克能夠轉彎");
    }    public void sayHi(){
        System.out.println("型號爲:" + model);
        System.out.println("射程爲:" + range);
        System.out.println("重量爲:" + weight);
        System.out.println("速度爲:" + speed);
    }    public String getModel(){        return model;
    }    public void setModel(String model){        this.model = model;
    }    public double getRange(){        return range;
    }    public void setRange(double range){        this.range = range;
    }    public double getWeight(){        return weight;
    }    public void setWeught(double weight){        this.weight = weight;
    }    public double getSpeed(){        return speed;
    }    public void setSpeed(double speed){        this.speed = speed;
    }1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950

9.大象類

    private static String name;    private static double high;    private static double weight;    private static String color;    public void sleep() {
        System.out.println("老虎會睡覺");
    }    public void eat() {
        System.out.println("老虎會捕食");
    }    public void breath() {
        System.out.println("老虎會呼吸");
    }    public void sayHi() {
        System.out.println("姓名:" + name);
        System.out.println("身高:" + high);
        System.out.println("體重:" + weight);
        System.out.println("顏色:" + color);
    }    public String getName() {        return name;
    }    public void setName(String name) {        this.name = name;
    }    public double getHigh() {        return high;
    }    public void setHigh(double high) {        this.high = high;
    }    public double getWeight() {        return weight;
    }    public void setWeight(double weight) {        this.weight = weight;
    }    public String getColor() {        return color;
    }    public void setColor(String color) {        this.color = color;
    }123456789101112131415161718192021222324252627282930313233343536373839404142434445464748

10.鯨魚類

    private static double weight;    private static double high;    private static String type;    private static int age;    public void swim() {
        System.out.println("鯨魚 會  游泳");
    }    public void waterSpray() {
        System.out.println("鯨魚 會  噴水");
    }    public void eat() {
        System.out.println("鯨魚會捕食");
    }    public double getWeight() {        return weight;
    }    public void setWeight(int weight) {        this.weight = weight;
    }    public double getHigh() {        return high;
    }    public void setHigh(double high) {        this.high = high;
    }    public String getType() {        return type;
    }    public void setType() {        this.type = type;
    }    public int getAge() {        return age;
    }    public void setAge(int age) {        this.age = age;
    }
相關文章
相關標籤/搜索