目录
前言
纯手打,不足疏漏之处请留言,我会立刻改正,兄弟们,别只收藏不点赞呀!!!🤣🤣🤣
基本常识:
开发与运行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调用图解
对象引用与栈模型:
Ⅲ,继承(不能继承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事件监听器模型
总结:
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跨平台图解
七,最后的话,纯手打,千次阅读,70+点赞,别只收藏不点赞啊!!!🤣🤣🤣
纯手打,不足疏漏之处请留言,我会立刻改正,兄弟们,别只收藏不点赞啊!!!🤣🤣🤣