Java复习 - Go语言中文社区

Java复习


一、基础知识

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

JDK:java development kit Java开发工具

JRE:Java runtime environment Java运行环境

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

CLASSPATH:.class的执行路径

str.getbyte["UTF8"],获取str的UTF8编码字节
new String(str.getbyte["UTF8"],“UTF8”);将编码字节以UTF8进行编码输出

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、运算符
<<:带符号左移(符号位不动)左移几位就是乘以2的几次方
>>:带符号右移(符号位不动)右移几位就是除以2的几次方
>>>:无符号右移动(符号位移动,负数时候用补码
4、程序结构
switch(整型(shortbyteint)charString),不支持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()
		调用settergetter,直接用获取的属性调用

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

三、进程与线程

四、常用类库

五、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()方法
	没有调用过finalize(),直接调用可以自我拯救
	调用过finalize(),不能进行拯救,标记为不在存活,可以进行GC
	若对象的类没有覆写finalize()方法,直接标记为不在存活,可以进行GC
(3)GC回收算法
	1、堆被分为新生代与老年代
	2、新生代被分为Eden区、survivor-From、survivor-To,比例为(8-1-1:也就是在新生代中实际可以利用的内存空间是90%)

在这里插入图片描述

八、数据库编程

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_43251445/article/details/99048333
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢