java学习第三天

本周学习了面向对象,个人觉得的需要注意的地方有很多,下面说一下我自己容易犯得错误。
1.static声明的方法是静态的,静态方法中只能直接调用本类中的其它的静态成员和方法,对于非静态的成员变量和方法,需要用类实例化一个对象,使用对象.方法()或者对象.成员变量调用。
2.若在A类中调用B类的静态成员变量或者方法,可以使用B类.成员变量或B类.方法()。
3.静态方法中不能使用this和super关键字.

4.private修饰的属性或方法只能在本类中进行访问,如果要对属性或者方法进行修改,需要在类中创建一个公开的即public的方法。

例如: 单例设计模式为饿汉式和懒汉式

package single;
/*
 * “饿汉式”单例模式:当类加载到JVM时,单例对象直接创建
 * */
public class HungrySingleInstance {

    // 在该类内部实例化对象
    private static HungrySingleInstance single=new HungrySingleInstance();

    // 私有化构造方法,防止外部实例化该类的对象
    private HungrySingleInstance(){

    }
    // 静态方法,获取单例对象
    public static HungrySingleInstance getSingleInstance() {
        return single;
    }
}
package single;
/*
 * “懒汉式”单例模式:当类加载到JVM时,并不直接创建单例对象,用户请求单例对象时(用户需要使用时),才实例化该单例对象
 * */
public class LazySingleInstance {

    // 在该类内部实例化对象
    private static LazySingleInstance single;

    // 私有化构造方法,防止外部实例化该类的对象
    private LazySingleInstance(){

    }

    // 静态方法,获取单例对象
    public static synchronized LazySingleInstance getSingleInstance() { //synchronized防止多线程,加锁
        if(single==null){
            System.out.println("第一次访问单例,创建......");
            single=new LazySingleInstance();
        }
        return single;
    }
}

虽然在上面的代码中添加了synchronized同步锁,锁住了整个类,但是由于JVM编译器中的指令重排,也可能导致线程不安全,所以在以后的学习中我们会学到指令重排以及更加深入的去了解线程安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值