java学习第三天

来源:互联网 发布:java图形小程序代码 编辑:程序博客网 时间:2024/06/03 05:34

本周学习了面向对象,个人觉得的需要注意的地方有很多,下面说一下我自己容易犯得错误。
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编译器中的指令重排,也可能导致线程不安全,所以在以后的学习中我们会学到指令重排以及更加深入的去了解线程安全。