Java SE复习(一)

一、基础知识

.java——编译——.class(字节码,可移植)——jvm执行

JDK:java development kit Java开发工具

JRE:Java runtime environment Java运行环境

PATH:操作系统的环境属性,指的是可执行命令的程序路径

CLASSPATH:.class的执行路径

1、注释、标识符、关键字

(1)注释://,/**/,/** */    @author

(2)数字字母下划线$组成,不能以数字开头,不能是关键字

2、数据类型

(1)基本数据类型

整型:byte、short、int、long

浮点型:float、double

字符型:char

布尔型:false、true

(2)引用数据类型

接口、类、数组

(3)默认为int、double

(4)大数转小数(强制转型)、小数转大数(自动转型)

(5)double中的精度丢失使用doubledecimal解决

(6)局部变量必须初始化,成员变量有默认

(7)获取Integer.MAX_VALUE/Integer.MIN_VALUE

3、运算符

<<:带符号左移

>>:带符号右移

>>>:无符号右移

4、程序结构

switch(整型(short\byte\int)\char\String),不支持long

5、方法

(1)方法重载:方法名称相同、参数个数或者类型不相同,无需关注返回值

(2)方法覆盖:方法名称、参数列表、返回值都相同

(3)方法递归:子方法的实现与原方法实现原理一致,自己则调用自己,但是递归要有出口

二、面向对象

1、类与对象

类是对象的抽象蓝图,对象是类的具体实例

2、封装性、继承性、多态性

(1)封装性:对内可见,对外不可见。使用private封装、使用setter()、getter()进行修改

(2)继承性:方法重载、方法覆盖

(3)多态性:一个类可以实现多个接口、一个接口可以继承好多接口

3、构造方法

(1)如果没有写则系统默认一个无参构造,写了就没有默认的

(2)创建一个对象后第一个执行的方法

(3)构造方法支持重载,可以写多个,调用的时候根据参数的类型来选择调用哪一个

(4)使用this.构造方法必须在第一行

4、匿名对象

匿名对象:没有一个栈上的内存指向的堆空间,用完一次后直接被GC回收。

5、数组

(1)静态动态创建数组

(2)方法接收数组、方法修改数组、方法返回数组

(3)java.util.Arrays.sort(array):升序

        Stystem.arraycopy(sour array,int begin,目标数组,int begin ,int end);

        int [] array=java.util.Arrays.copyOfRange(array,0,array.length(拷贝长度,不是数组的下标))

(4)二维数组打印

public class test{
    public static void main(String [] args) {
       int [][] array=new int [][]{{1,2,3},{4,5,6}};
       for (int i=0;i<array.length;i++){
           for (int j=0;j<array[i].length;j++){
               System.out.print(array[i][j]+" ");
           }
           System.out.println();
       }
    }
}

6、String类

7、this与super

8、引用传递

9、static关键字

10、代码块

11、抽象类、接口

12、Object类

13、匿名内部类、内类

14、异常

15、包的使用

16、新特性

17、反射

(1)反射:通过Class.forName("包+类名")找到该类,使用Object类型接收newInstance()出的实例化对象,再通过向下转型获取自己需要使用的对象,反射中不需要new关键字,降低程序耦合性。然后再调用类的构造方法、属性、普通方法等操作创建对象。后期的JavaEE中的开源框架就是根据反射得来的。java.lang.reflect

(2)反射三种用法

  • 对象.getClass()
  • 通过类.getClass()
  • Class.forName("类路径")

(3)反射使用

  • 获取父类信息
    • getClass.getPackage
    • getClass.getName
  • 获取构造方法
    • 获取无参构造方法getConstruter()
    • 获取有参构造方法getConstruter(类型.class)
  • 获取普通方法
    • 获取类中全部的public 方法getMethod()
    • 获取类中指定的public 方法getMethod("方法名",方法类型)
    • Method中的invoke(object o,para)执行某个t对象所指定的方法
  • 获取类属性
    • 获取父类属性getFields()
    • 获取本类属性getDeclaredFields()
    • 调用setter\getter,直接用获取的属性调用

(4)classLoad()类加载器:通过一个类的全限定名来获取描述该类的二进制字节流,该过程在jvm外部执行(外部执行模块:BootStarp\ExtclassLoad\AppClassLoad\自定义类加载器)

三、进程与线程

四、常用类库

五、JavaIO操作

六、类集框架

1、Collection接口

(1)List、Set都实现了Collection接口

(2)List:允许数据重复,Set:不允许数据重复

(3)List拥有get(),set()方法,可以通过get()访问list元素

(4)List三种实现:ArrayList()、Vector()、LinkedList()

(5)操作java简单类的时候List中的contains(Oject O)\remove(Object 0)需要覆写父类中的equals(),toString()

(6)ArrayList、Vector、LinkedList联系与区别?

  • 这三个都是List下常用子类
  • ArrayList与Vector都是基于数组实现、LinkedList()是基于链表实现
  • ArrayList、LinkedList线程不安全、性能高,Vector线程安全,性能较低
  • ArrayList扩容为原来的1.5倍,Vector扩容为原来2倍
  • ArrayList采用懒加载,第一次使用时才初始化一个为10的数组,Vector直接初始化一个为10的数组
  • ArrayList适用于大部分场合使用,LinkedList适用于在某一位置增删改查使用
/*
ArrayList()扩容源码
*/
private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);//新的数组长度为原来的1.5倍
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }
//Vector扩容 
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

    private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
                                         capacityIncrement : oldCapacity);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

(7)Set接口没有对Collection进行扩充,没有get方法,只能使用toArray使用下标访问元素。常用子类HashSet、TreeSet

(8)HashSet无序不重复、TreeSet有序重复(覆写compareTo()实现排序,升序)

(9)面试题:

  • Set不允许元素重复判断机制:TreeSet实现Comparable接口比较,HashSet通过(HashCode,equals同时比较)
  • 先通过HashCode找到对应元素位置,再用equal进行比较,只有两者都相同才可以算元素重复可以消除
  • 保存自定义类型时候使用List,保存系统文件使用Set(避免重复)

七、JVM

1、运行时区域:

(1)线程私有:程序计数器(唯一一个没有标记OOM的区域)、java方法栈(存放局部变量表、方法出口等)、本地方法栈

(2)线程共享:堆(存放实例)、方法区(存放已经加载过的类的信息)、运行时常量池(方法区的一部分,存放字面量(基本数据类型、常量等)与标识符(类的全限定名、方法的名称与描述符等)

2、GC

(1)如何判断对象的存活?

  • java采用可达性分析法:对象有能够到达GCroots的路径(GCroots:引用类型、静态变量、常量)
  • 引入计数器:根据计数器的值判断是否存活,引用对象值加一,释放引用减一,直到值为0。--!不能避免内存泄漏,造成对象无法回收

(2)对象的自我拯救

  • 若对象的类覆写了finalize()方法
  1. 没有调用过finalize(),直接调用可以自我拯救
  2. 调用过finalize(),不能进行拯救,标记为不在存活,可以进行GC
  • 若对象的类没有覆写finalize()方法,直接标记为不在存活,可以进行GC

(3)GC回收算法

1、堆被分为新生代与老年代

2、新生代被分为Eden区、survivor-From、survivor-To,比例为(8-1-1:也就是在新生代中实际可以利用的内存空间是90%)

3、回收算法

八、数据库编程

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值