Java 基础

Java 基础

一 Java 虚拟机

1. JVM 概述

2. JVM 内存模型

3. ClassLoader

4. 垃圾回收机制

5. 从一道面试题来认识java类加载时机与过程

二 Java 集合数据类型

1. Java 集合类详解

2. Hashmap实现原理

三 Java 线程

Java多线程(一)

Java多线程(二)

Java多线程(三)

Java - 安全的退出线程

四. Java 访问修饰符

作用域 当前类 同包 子类 其他
public
protected ×
default × ×
private × ×

1. 类的成员不写访问修饰时默认为default, 默认对于同一个包中的其他类相当于公开(public),对于不是同一个包中的其他类相当于私有(private)。
2. 受保护(protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私有。

五.内部类

在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、静态内部类、匿名内部类。

1.成员内部类

  1. 成员内部类需要通过外部类的实例才能创建对象;在外部类内部可以直接创建内部类。
  2. 就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的, 这是内部类是外部类的一个成员。
  3. 在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问。
public class Outer{
        Inner inner = new Inner();
        void printOuter(){
            System.out.println("Hello World This is Outer");
        }

        public class Inner{
              void printInner(){
                System.out.println("Hello World This is Inner");
                printOuter();
            }
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Outer outer = new Outer();
        Inner inner = outer.new Inner();
    }
}

2.局部内部类

  1. 局部内部类,是指内部类定义在方法和作用域内.
  2. 局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。
public class Outer{
        Inner inner = new Inner();

        void printOuter(){
            class LocalInner{
                void printLocalInner(){
                    System.out.println("Hello World This is LocalInner");
                }
            }

            LocalInner localInner = new LocalInner();
            if(localInner != null) {
                localInner.printLocalInner();
                class LocalInnerInScope{
                    void printLocalInnerInScope(){
                        System.out.println("Hello World This is LocalInnerInScope");
                    }
                }

                new LocalInnerInScope().printLocalInnerInScope();
            }

            System.out.println("Hello World This is Outer");
        }
}

3.静态内部类

  1. static修饰内部类,称为静态内部类。静态内部类与静态内部方法相似,只能访问外部类的static成员,不能直接访问外部类的实例变量与实例方法,只有通过对象引用才能访问。作用域和静态变量类似
  2. 外部访问内部静态类 可以直接new Outer.StaticInner() 即可
static class StaticInner{

         void StaticInner(){
                System.out.println("Hello World This is Inner");
            }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        new StaticInner().StaticInner();
    }

4.匿名内部类

  1. 匿名内部类的最终目的是创建一个类的实例,但是如果某个类的实例只是用一次,在定义类的同时就创建折个类, 以这种方法定义的没有名字的类成为匿名内部类
  2. 由于匿名内部类没有名称,所以类体中不能定义构造方法
  3. 外部类的方法的形参,当所在的方法的形参需要被内部类里面使用时,该形参必须为final。

Java内部类详解
Java内部类的使用小结

Java的引用类型

  1. 强引用:平时我们编程的时候例如:Object object=new Object();那object就是一个强引用了。如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它。当内存空 间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题。
  2. 软引用(Softreference):如果一个对象只具有软引用,那就类似于可有可物的生活用品。如果内存空间足够,垃圾回收器就不会回收它,如果内存 空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存。 软引用可以和一个引用队列(referenceQueue)联合使用,如果软引用所引用的对象被垃圾回收,Java虚拟机就会把这个软引用加入到与之关联 的引用队列中。
  3. 弱引用(WeakReference):如果一个对象只具有弱引用,那就类似于可有可物的生活用品。弱引用与软引用的区别在于:只具有弱引用的对象拥有更 短暂的生命周期。在垃圾回收器线程扫描它 所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程, 因此不一定会很快发现那些只具有弱引用的对象。 弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联 的引用队列中。
  4. 虚引用(PhantomReference):“虚引用”顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象 仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收。 虚引用主要用来跟踪对象被垃圾回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之 关联的引用队列中。程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。程序如果发现某个虚引用已经被加入到引用队 列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。
    参考:java中四种引用类型

常量池

Java常量池

你可能感兴趣的:(android,Java)