Java从入门到“放弃”(二)

Java基础知识

1.1 String、StringBuffer、StringBuilder三者区别

        String字符串常量

        StringBuffer字符串变量(线性安全)

        StringBuilder字符串变量(非线程安全)

        String中的String类使用final关键字修饰字符数组来保存字符串,private final char value[],String对象是不可变的,也就是可以理解为常量,线程安全。

        AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。

        StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。

        StringBuilder并没有对方法进行同步锁,所以是非线程安全的。

1.2 接口和抽象类的区别

        实现:抽象类的子类使用extends来继承;接口必须使用implements来实现接口。

        构造函数:抽象类可以有构造函数;接口不能有。

        main方法:抽象类可以有main方法,并且我们能运行它;接口不能有main方法。

        实现数量:类可以实现很多接口;但是只能继承一个抽象类。

        访问修饰符:接口中的方法默认使用public修饰;抽象类中的方法可以是任意访问修饰符。

1.3String常用的方法

        indexOf():返回指定字符的索引。

        charAt():返回指定索引处的字符。

        replace():字符串替换。

        trim():去除字符串两端空白。

        split():分割字符串,返回一个分割后的字符串数组。

        getBytes():返回字符串的byte类型数组。

        length():返回字符串长度。

        toLowerCase():将字符串转成小写字母。

        toUpperCase():将字符串转成大写字母。

        substring():截取字符串。

        equals():字符串比较。

1.4 单例模式是什么

        单例模式:某一个类的实例在多线程环境下只会被创建一次出来。

        单例模式分为饿汉式单例模式,懒汉式单例模式和双检锁单例模式三种。

        饿汉式:线程安全,一开始就初始化

public static Singleton instance = new Singleton();
        private Singleton() {}
        public static Singleton getInstance() {
            return instance;
        }
    }

        懒汉式:非线程安全,延迟初始化

public class Singleton {
    private static Singleton instance;
    private Singleton() {}
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

双检锁:线程安全,延迟初始化

public class Singleton {
    private static Singleton singleton;
    private Singleton() {}
    public static Singleton getSingleton() {
        if (singleton == null) {
            synchronized (Singleton.class) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}

1.5反射

        在Java中的反射机制是指在运行状态中,对于任意一类都能够知道这个类所有的属性和方法;并且对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象方法的功能成为Java语言的反射机制。

        获取Class对象的3种方法:

        调用某个对象的getClass()方法

        Person p=new.Person();

        Class clazz = p.getClass():

        调用某个类的class属性来获取该类对应的Class对象

        Class clazz=Person.class;

        使用Class类中的forName()静态方法(最安全/性能最好)

        Class clazz = Class.forName(“类的全路径”)

你可能感兴趣的:(java,jvm,开发语言)