Java基础

2017-11-14  本文已影响8人  小炉炉

基础的不能再基础的Java题。

1.内存结构:
    栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放。
    堆内存:数组和对象,通过new建立的实例都存放在堆内存中。
    方法区:静态成员、构造函数、常量池、线程池
    本地方法区:window系统占用
    寄存器:
2.Person p = new Person();在内存中做了哪些事情
(1)将Person.class文件加载进内存中。
(2)如果p定义在主方法中,那么,就会在栈空间开辟一个变量空间p。
(3)在堆内存给对象分配空间。
(4)对对象中的成员进行默认初始化。
(5)对对象中的成员进行显示初始化。
(6)调用构造代码块对对象进行初始化。(如果没有就不执行)
(7)调用构造方法对对象进行初始化。对象初始化完毕。
(8)将对象的内存地址赋值给p变量,让p变量指向该对象。
3.sleep()和wait()的区别:
(1)这两个方法来自不同的类,sleep()来自Thread类,和wait()来自Object类。
(2)sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用了b的
sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。而wait()
是Object类的非静态方法
(3)sleep()释放资源不释放锁,而wait()释放资源释放锁; 
(4)使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使
用,而sleep可以在任何地方使用
4.final关键字(重点)
(1)最终的意思,可以用于修饰类,方法,变量。
(2)final修饰的类不能被继承。
       final修饰的方法不能被重写。
       final修饰的变量是一个常量。只能被赋值一次。
       内部类只能访问被final修饰的局部变量。
5.接口interface
(1)当一个类中的方法都是抽象的时候,java提供了另一种表示方式,叫接口。
       用interface关键字表示。类与接口关系用implements表示。
    (2)接口的成员特点
        A:成员变量
            是常量,默认修饰 public static final    
        B:成员方法
            都是抽象的,默认修饰 public abstract  
    (3)关系
        A:类与类的关系
            是继承关系。类与类只能单继承,可以多重继承。
        B:类和接口的关系
            是实现关系。类可以多实现接口。
            类在继承一个类的同时,可以实现多个接口。
        C:接口和接口的关系
            是继承关系。接口可以多继承接口。
    (4)接口的特点
        A:是对外暴露的规则
        B:是功能的扩展
        C:接口的出现降低耦合性。
            耦合(类与类之间的关系)
            内聚(类完成功能的能力)
            编程规范:低耦合,高内聚。
        D:接口可以多实现。如:CPU和主板、笔记本的USB插口、插座
    (5)接口和抽象类的区别
        A:抽象类只能被单继承
           接口可以多实现,接口的出现避免了多继承的局限性。
        B:抽象类中的数据特点:
                成员变量:可以是变量,也可以是常量
                成员方法:可以是抽象方法,也可以是非抽象方法
                构造方法:有构造方法
           接口中的数据特点:
                成员变量:是常量。默认修饰 public static final
                成员方法:都是抽象方法。都有默认修饰 public abstract
                构造方法:没有构造方法
        C:抽象类中定义的是继承体系中的共性功能。
           接口中定义的是继承体系中的扩展功能。
        D:抽象类被继承是"is a"关系:xx是yy的一种
           接口被实现是"like a"关系:xx像yy的一种
6.单例设计模式
(1)设计模式:
        解决某类问题行之有效的方法,是一种思想,是规律的总结
    (2)用来保证某个类在内存中只有一个对象
    (3)保证唯一性的思想及步骤
        **为了避免其他程序建立该类对象,先禁止其他程序建立该类
对象,即将构造函数私有化
        **为了其他程序访问到该类对象,须在本类中创建一个该类私有对象
        **为了方便其他程序访问到该类对象,可对外提供一个公共访问方式

    比如API中的Runtime类就是单例设计模式。

    (4)单例设计模式的两种方式
        A:饿汉式 当类加载的时候,就创建对象。    
        class Student
        {
            private Student(){}
            
            private static final Student s = new Student();
            
            public static Student getInstance()
            {
                return s;
            }
        }
        B:懒汉式 当使用的使用,才去创建对象。
        class Student
        {
            private Student(){}

            private static final Student s = null;
            
            public static Student getInstance()
            {
                if(s==null) 
                {
                    //线程1就进来了,线程2就进来了。
                    s = new Student();
                }
                return s;
            }
        }
    饿汉式和懒汉式的区别:
        **
        饿汉式是类一加载进内存就创建好了对象;
        懒汉式则是类才加载进内存的时候,对象还没有存在,只有调用了
getInstance()方法时,
        对象才开始创建。
        **
        懒汉式是延迟加载,如果多个线程同时操作懒汉式时就有可能出现线程安全
问题,解决线程安全问题可以加同步来解决。但是加了同步之后,每一次都要比较锁,
效率就变慢了,所以可以加双重判断来提高程序效率。
    注:开发常用饿汉式,因为饿汉式简单安全。懒汉式多线程的时候容易发生问题。
7.
上一篇下一篇

猜你喜欢

热点阅读