Java期末考试知识点复习

基本常识:
开发与运行Java程序三个步骤:编辑源程序,编译,解释运行字节码

一,面向对象

面向对象程序设计特性:
封装性,继承性,多态性
★★★★★

Ⅰ。类

	  		  →类成员,static
①成员变量(属性)→实例成员,无static

②方法	  →类方法,有static
          →实例方法,无static
	方法重载:方法名相同,形参列表不同

③构造器:用来初始化实例变量
	super(。。。)=>父类构造器,子类构造器第一行!!
	this(。。。)   =>本类构造器,子类构造器第一行,
★★★
注解③:如果不主动定义一个构造器,系统提供默认的【无形参列表】的【无任何代码】的构造器
      如果主动定义了,系统就不会提供这个无任何参数的,空代码的构造器
特例:
数组被封装为对象,具有length属性,表示数组长度
★★★
数组有两种初始化方式:
	①动态初始化:数组元素不确定,只指定数组长度,int[] array = new int[4];//提供默认初始值,数组元素能直接访问
	②静态初始化:数组元素确定的,不指定数组长度;int[] array = {1,2,3,4}//自己指定初始值,长度自动确定
	【不可以既指定数组长度,又指定数组元素!!】
数组元素采用【动态初始化】时有默认初始值:
★元素是整形的,0;
★元素是浮点的,0.0;
元素是字符型,'\u0000'
★元素是布尔型,false
★元素是引用的,null
【这与实例成员和类成员完全对应,而且要与局部变量使用前必须初始化完全不同!!!】

Ⅱ。3种修饰符

①★访问权限:	      public  → protected →(友好的/默认)→ private
②★继承:		      final 和 abstract
③★区别类与实例的关系:static

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
★注解①:	         public	             protected	            (不写)            private         ★
★修饰符说明:     任意访问权限       子类访问权限+包访问权限    同一个包中可访问        本类访问权限  ★
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
						            				     
★★★★★						
注解②:
	【抽象类目的就是要【派生子类】!!!】
	final修饰类代表该类不可以被继承,如String,【就是要腌了它,不能让它有子类】
	abstract修饰该类,代表该类就是要被继承,实现其抽象方法【就是要有子类,就是不能腌】
	因此,final和abstract不可同时修饰同一个类!因为它们的作用完全相反
	
             
	抽象类和普通类区别:
	①抽象类【可以】有抽象方法(加上abstract),【特殊情况】->抽象方法只能是实例方法,不能是类方法,不可以同时用static和abstract
	②抽象类【有构造器】,但是【不能创建对象】,抽象类的构造器是被子类构造器调用的,完成抽象类成员的赋值!!!
	【普通类不可以有抽象方法】
	
	除此之外,抽象类和普通类完全一样
		
★★★★★
注解③:
	static用于区分类和实例
		static 方法 , 类方法,可以拿来就用
		static 变量,  类变量,拿来就用
		实例方法和实例变量需要创建对象之后使用
		注意: ①static方法中不可以直接调用实例方法,实例变量
		          ②实例方法中随便调用static方法,static变量

static和非static调用图解
static和非static调用图解
对象引用与栈模型:
对象引用与栈模型

Ⅲ,继承(不能继承private)

继承模型
在这里插入图片描述
及其注意问题图解: 继承模型及其注意问题图解
★★★继承的问题:
①继承不能继承private方法和属性
②类只能单继承,但是可以多层继承,可以同时实现多个接口
③接口可以实现多重继承,extends多个接口,即使继承的方法重复了也没关系,没有方法体的
★★★★★①Object是一切类的顶层父类
★②多态:
声明类型:Animal
实际类型:Bird
Animal anl = new Bird();//上转型
★重写父类方法:
两同两小一大:
①方法名和形参列表相同
②抛出异常比父类少或者相等,返回值类型比父类小或者相等
③访问权限更大或者相等
★下溯:
★如果有继承关系,则可以强转,因此强转之前常用 instanceof
left instanceof Right(left与Right存在继承关系就不会编译错误)
★如果left 是Right的子类或者Right子类的实例,则instanceof返回true,否则返回false
特别的,当left是null时,总是返回false

★调用方法的规则:
	如果该方法被子类重写,调用该方法时,用子类的方法
	没有重写,用父类的方法
★方法访问变量的规则:(可以很好的理解父类和子类定义同名变量时,访问同名变量的操作)
	①在方法中查找
	②再到本类中查找
	③上溯所有父类查找
	注意:不会往下查找子类中的变量

Ⅳ常用类的东西

①==判断两个对象是否相等:a == b
	只有当 a 和 b 都指向了同一个对象时才返回true(地址相同),否则都是false
②equals判断:
	自定义的一个判断对象是否相等的一种办法,
	通常需要重写来自Object的public boolean equals(Object obj){.....}
	请注意,这里一定要构成方法覆盖,就是形参列表一定要是Object 类型,
	最好加上@Override注释,强制编译器检查是否成功覆盖
③Java采用【Unicode】编码,每个【字符】至少占用2个字节,所以char都是2个字节,但boolean只是1字节
④gc是垃圾回收器,当没有引用指向了堆中的动态内存时,会自动回收这块内存
⑤String的
	charAt(int index)返回字符串特定下标处的字符,用于遍历字符串
	indexOf(int)

二,IO

★★★File类,File类的对象代表了一个【目录】或者【真正的文件】,但是【不能对其进行读写】,
	     只能获取一下路径,新建一些文件之类的
	
★★★★★判断字符流:①er结尾的都是字符流,Reader/Writer,FileReader/FileWriter都是字符流
	     ②以Stream结尾的都是字节流,InputStream/OutputStream,FileInputStream/FileOutputStream都是字节流

★★关联到指定文件的流(构造器里面填入指定的文件路径的字符串即可):

			字节流:FileInputStream/FileOutputStream,
			字符流:FileReader/FileWriter
★★★字节流和字符流区别:
	①字节流可以读取任意类型文件,但是字符流不可以,字符流读取文本文件方便,
	比如字节流可以读取图片,字符流做不到
	②字符流读取文本文件很方便,比字节流快
	③字节流是按字节读取,每个字节都能存储一定的信息
	  字符流是按字符读取 
	④字节流针对文件操作,没有搞缓冲区,
	【字符流】是有缓冲区的,可以把缓冲区理解成内存,先在内存上操作,内存上处理速度快,
	再把内存上的文件内容写到外存里面,而且是要强制关闭流时,才能强制刷新缓冲区
	把缓冲区的内容强制全部刷到文件里面,如果不关闭流,则文件内容不会有变化!!!
	【要么flush一下,要么close()关闭流】

★★★转换流:就是把字节流包装成字符流去读取文件,目的就是为了更方便的读取,【没有字符流转换成字节流的】
	
	常用的流:InputStreamReader/OutputStreamWriter【由于是er结尾,所以都是字符流】
	
	新增的方法:
		BufferedReader的readLine(),一行一行读,返回String,
		BufferedWriter的newLine

三,异常处理

先上图:
在这里插入图片描述
Runtime异常(运行时才发生的异常):
ArithmeticException, 除0异常
ClassCastException, 只有当把引用的【声明类型】转换成引用指向对象的【实际类型】才能成功,否则都是失败
IllegalArgumentException,
IndexOutOfBoundsException,索引越界异常,太常见了
NumberFormatException, 数字格式异常,比如Integer.parseInt("123 "); 多了空格也会导致异常,含字母也会
NullPointerException, 空指针异常,让空引用指向其内存空间,显然是不合理的

异常处理:【图示说明】
当有方法抛出异常时,会自动生成异常对象,交给JRE运行时环境处理,JRE在方法调用栈中,一层一层地
寻找特定的处理该异常的方法,如果找不到处理异常方法会继续向上找,直到main方法,如果main方法也
没有特定的try-catch块去处理,就会自动交给JVM处理,JVM的处理方式就是打印跟踪栈信息,中断程序运行

当业务要求下,语法不会犯异常时,但是不符合业务要求时,这时候就需要自定义异常了
往往用if语句判断,throw 异常实例来抛出异常

Runtime异常可以什么也不管,但是非Runtime异常要么抛出(throws)要么就是try-catch

try后面不是一定要接上catch的,比如try-finally就不需要catch了

catch块的要求,先捕获小异常,再捕获大异常

四,GUI★★★★★★★★★★★★★★★

先上图:GUI事件监听器模型
GUI事件监听器模型
总结:
AWT和Swing的区别:
AWT的是重量级,组件风格和系统相关
Swing是轻量级,组件风格和系统无关
必须背下来的几个常用的类的组件
①JFrame 窗体框架
②JTextField 单行文本框
③JTextArea 多行文本
④JButton 按钮
⑤JPanel 面板
⑥JLabel 标签
AWT常考的默认布局:
★★★Frame: BorderLayout
★★★Panel: FlowLayout

都有setText和getText方法的组件
	①JLabel
	②JTextField
	③JTextArea

常用方法
	setBounds
	setVisible,添加true设置为可见
	actionPerformed
常用接口
	ActionEvent
导包:
	import java.awt.*;
	import java.awt.event.*;
常见布局管理器
FlowLayout
BorderLayout
GridLayout
CardLayout	

注意:
必须把组件放到面板里面,在把面板添加到JFrame里面用,不然就不好使了!!

五,多线程

实现多线程2个方法
①继承Thread类,重写run方法
②实现Runnable,重写run方法

六,Java文件及跨平台原理图解

Java文件编译及运行
Java文件编译及运行
Java跨平台图解
Java跨平台图解

七,最后的话

纯手打,不足疏漏之处请留言,我会立刻改正

猜你喜欢

转载自blog.csdn.net/weixin_46028606/article/details/107197383