美文网首页
Java中的this、static关键字

Java中的this、static关键字

作者: 952625a28d0d | 来源:发表于2017-07-05 18:16 被阅读56次

this 和 static关键字

this

package com.example;

/**
 * Created by JiaYuanFa on 2017/7/5.
 */

/*
this: 是一个引用 他是当前类对象的引用
Student stu = new Student()
stu:可以使自定义的类的对象 也可以是其他类的对象
this的应用:
1:当我们方法参数和属性相同的时候 区分属性
this.name = name
2:对this的调用必须在构造方法的第一句
3:在同一个类中调用其他构造方法
this();调用当前类的无参数的构造方法
this(参数);调用当前类的有参数的构造方法
 */

public class This {
    int a;
    public static void main(String[] args) {
        This testOne = new This(); // 有名对象
//        new PersonOne();    // 这个叫做匿名对象 没有自定义的引用

        // 当前类对象: 谁调用包含this的方法 this就是指的谁
        testOne.setA(4); // this指的就是 This类的对象 testOne

        This testTwo = new This();
        testTwo.setA(7);    // 此时的this指的就是 testTwo

        // this不能指向其他类
    }

    public void setA(int a) {
        this.a = a; // 这里的this 指的是当前类对象
    }
}

static

package com.example;

/**
 * Created by JiaYuanFa on 2017/7/5.
 */

/*
栈区
公共区域:静态区域
一:用在属性前面
静态属性在内存中只有一个内存空间,与对象没有关系。而非静态属性与对象有关,每个对象都有自己的非静态属性的内存空间
非静态属性必须通过new出新的对象才能使用
但是静态属性可以通过类直接调用
二:用在方法前面
静态的不能调用非静态的
三:静态块和普通块
1:静态块只会执行一次,普通块(对象块)有多少个对象产生就会执行多少次
2:静态块在普通块之前执行,也就是先执行静态块,后执行对象块,最后执行构造方法
四:静态块有什么用?对象块有什么用?
静态块底层块用的多,但是应用层用得少
静态块用途?
创建数据库 只要创建一次 可以使用
只需要初始化一次的操作可以放在静态块中
对象块用途?
每个对象都要初始化的操作可以放在对象块中
 */

public class C {
    int i;  // 非静态属性
    static int j;   // 静态属性 不会因为实例对象的初始化而改变值

    // 对象块
    {
        System.out.println("我的对象块");
    }

    // 静态块
    static {
        System.out.println("我的静态块");
    }

    public C() {
        System.out.println("对象出生了");
        i ++;
        j ++;
        System.out.println("i = " + i);
        System.out.println("j = " + C.j);   // 静态属性可以使用类名直接调用
    }

    public static void fun() {
        System.out.println("我的静态方法");
    }
    public void fun(int i) {
        System.out.println("我的非静态方法");
    }
}

实例验证:

package com.example;

/**
 * Created by JiaYuanFa on 2017/7/5.
 */

public class Test_Static {
    public static void main(String[] args) {
        C c = new C(); // 首先去new C 中的静态变量 j 然后才会有对象 最后去栈区中创建引用c
        C c2 = new C(); // 初始化一个新的对象  和 上面的过程相似 ,但是呢 第二次去堆去创建静态变量j的时候,发现j已经存在了 只需要+1即可,但是呢,对象又产生了一个,引用的c也是又产生了一个
    }
}
image.png

静态方法与非静态方法

package com.example;

/**
 * Created by JiaYuanFa on 2017/7/5.
 */

/*
静态方法不能调用非静态方法
为什么呢?

总结:
 */

public class Student {
    int money;  // 属于个人的钱
    static int money2; // 属于班费
    // 普通的:个人消费----个人参与 个人有份
    public void xiaoFei(int money) {
        System.out.println("个人消费");
        // 个人消费 可以调用班级消费进行减法操作
        this.money -= money;
        money2 -= money;
    }

    // 静态的:所有人都有份的消费
    public static void classXiaofei(int money) {
        System.out.println("班级消费");
        // 但是班级消费 就不能调用个人消费了
        money2 -= money;
    }

    public static void main(String[] args) {
        /*
        静态方法是在new对象之前就被加载到类中的,而非静态方法是new出对象之后才被加载到内存中的
         */
//        Student stu = new Student();
//        Student.classXiaofei(); // 可以不要对象就直接调用 但是呢 对象方法就不行了
    }
}

使用Static实现单例模式

package com.example;

/**
 * Created by JiaYuanFa on 2017/7/5.
 */
/*
一个类默认情况下是可以new出无数个对象
单例模式:一个类只能new出一个对象
 */
public class Single {

    // 第一种写法:饿汉式写法
//    private static Single sigle;
//    public static Single getSingle() {
//        if (sigle == null) {
//            sigle = new Single();
//        }
//        return sigle;
//    }

    // 第二种:懒汉式
    private static Single single = new Single();
    private Single() {};
    public static Single getSingle() {
        return single;
    }

    /*
    1:将构造方法私有 不可行
    1:声明一个静态的对象
    2:声明一个公有的方法
    3:判断对象是否存在 如果不存在生成此对象
    4:使用者通过该类提供的静态方法生成该对象即可
     */
    // 出生的行为是公有的 随时可以调用

    public static void main(String[] args) {
        Single singleOne = Single.getSingle();
        System.out.println(singleOne);
        Single singleTwo = Single.getSingle();
        System.out.println(singleTwo);
        Single singleThree = Single.getSingle();
        System.out.println(singleThree);
    }
}

image.png

相关文章

  • 1.3 static 关键字

    static 关键字 《Java编程思想》 中:static方法就是没有this的方法 static 修饰的方法或...

  • java面试问题总结与分享,很乱

    java中static关键字的作用 在Java中static表示“全局”或者“静态”的意思,用来修饰成员变量和成员...

  • Kotlin学习2

    1.Kotlin中static在kotlin中 没有static关键字,但是有类似java中static的用法例如...

  • Java static关键字

    声明static属性 static是Java中定义的一个关键字,主要是描述全局的概念,所以利用static关键字可...

  • Java中的static和final

    java中的static和final 此篇文章是记录我在学习Java中static和final关键字的笔记。 st...

  • Java static关键字

    Java之美[从菜鸟到高手演变]之Java中static关键字

  • 复习Java基础资料

    Java中面向字符的输入流 Java中的static关键字解析 Java中的main()方法详解 Java中普通代...

  • Java Static 用法

    Java中的Static关键字用的很多,但是总结起来,大概有:Static member、Static Block...

  • Java:3分钟带你全面了解Static静态关键字

    前言 在Java中,静态 Static关键字使用十分常见 本文全面 & 详细解析静态 Static关键字,希望你们...

  • java基础知识面试题

    static关键字什么意思?java中是否可以覆盖一个private或者是static的方法? “static”表...

网友评论

      本文标题:Java中的this、static关键字

      本文链接:https://www.haomeiwen.com/subject/lrmqhxtx.html