![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JavaSE
学习笔记
魔幻音
如果世界上真的有奇迹,那只是努力的另一个代名词。
展开
-
序列化Serializable和Parcelable
序列化介绍:序列化:将对象转换为字节序列反序列化:将字节序列恢复为对象序列化使用场景:①将内存中对象状态保存到文件或数据库中(如Session)②使用套接字在网络传送对象③用RMI传输对象Java实现序列化:引用Serializable接口,产生序列号UID即可序列号作用:涉及Java区分类:①用类名②相同类名用序列号如果不写对应序列号,在更改类内容后执行序列化和反序列化,更改前后两个类的序列号不同,但实际是同一个类导致识别失败,会产生错误。S与P两个序列化接口区别:Seriali原创 2022-04-03 22:17:46 · 993 阅读 · 0 评论 -
Java四种引用方式
强引用、软引用、弱引用、虚引用强引用:创建一个对象并且把对象赋值给引用变量 Object object = new Object();这里object属于强引用,永远不会被垃圾回收。若想使其回收,需要将变量赋值为null。软引用:如:MyObject aRef = new MyObject();SoftReference aSoftRef=new SoftReference(aRef);当我们aRef = null; 即将对象强引用移除后,aSoftRef就只原创 2022-04-03 21:00:29 · 573 阅读 · 1 评论 -
Java知识:面向对象、锁升级、Hash容器、String区别、线程池
面向对象:三大特性:①封装:对象属性及实现对外隐藏,只提供公共访问方式,提高复用性和安全性。②继承:继承是多态前提,提高代码复用性。③多态:父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,提高了程序拓展性。五大基本原则:①单一职责原则:类的功能要单一②开放封闭原则:模块对于扩展是开放的,对于修改是封闭的。③里式替换原则:子类可以替换父类出现在父类能出现的地方。④依赖倒置原则:高层次模块不应依赖于低层次模块,都应该依赖于抽象;抽象不应依赖于具体实现,具体实现应依赖于抽象。⑤接口原创 2022-03-31 12:49:13 · 367 阅读 · 0 评论 -
常见设计模式
①策略模式:strategy策略模式容易和java本身继承机制混淆,假设一个场景,鸭子作为基类,想要去扩展,很容易想到编写子类继承鸭子父类,比如某些会飞的鸭子、不同颜色的鸭子,但当种类过多时,子类过多并且维护起来太麻烦。细想不同的子类实际就是在父类基础上,对一些基础行为如:是否会飞、颜色等属性不同。那么将属性单独做成一个接口,如IFly接口 实现类Fly里保存是否可飞的属性,在构建鸭子类时,将IFly实现类作为一部分设置进去,后面再使用新鸭子类就可获得其被分配的策略属性。简单说就是将对象和行为分开,原创 2022-03-23 20:42:31 · 692 阅读 · 0 评论 -
Complex总结
在构造方法中,可利用this(),由提供的参数个数自动调用已经定义好的构造方法。当定义的方法被static修饰,可在主函数中跳过实例化类,直接以类.静态方法调用。原创 2021-01-17 11:17:01 · 367 阅读 · 0 评论 -
注解+包扫描
public void packageScan(String packaeName) throws Exception { String path = packaeName.replace('.', '/'); ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); Enumeration<URL> urls = classLoader.getResourc原创 2021-02-05 12:00:39 · 660 阅读 · 6 评论 -
RMI 远程方法调用浅析
RMI 远程方法调用,本次实现的RMI是借助配置,将想要运行的方法表示出来,借由java反射机制(获取类、对象、运行方法)和代理(方法执行前后的连接和断开)。整体分两个部分:服务器端和客户端。服务器端:等待客户端连接,待客户端将所需的方法、对象等发送到服务器后进行方法的执行,接着将结果返回给客户端。客户端:由客户配置好所需类、方法,当需要调用时连接服务器并发送所需信息,等待服务器端执行。初始化过程:因为用的代理时JDK代理,需要对应的接口,需要用户提前配置好。public static void原创 2021-07-17 18:51:16 · 253 阅读 · 0 评论 -
JDKProxy及CGLibProxy简单使用
代理意义:对一个类生成一个代理,即当执行对应方法时,可以在该方法的执行前、执行后进行额外操作、拦截。接下来由实例出发:CGLibProxy:获取代理:public static <T> T getProxy(T target) { Class<?> klass = target.getClass(); Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(klass); enhancer.s原创 2021-05-29 16:16:59 · 156 阅读 · 0 评论 -
JavaSE(接口)
interface基本语法:接口中的成员只能是公有、静态、常变量,即必须(自动)拥有public, static, final联合属性。接口中的方法只能是公有、抽象的方法,即必须(自动)拥有public, abstract联合属性。若一个类实现了一个接口,那么,这个类就是这个接口的派生类。实现接口的类,必须实现接口所规定的抽象方法;否则,该类就是抽象类。实现了接口的类的对象,一定能调用接口所规定的所有方法。规范方法:凡是实现了该接口的非抽象类,就必须实现这个接口所规定的所有抽象方法。故:指原创 2020-11-09 15:31:50 · 120 阅读 · 0 评论 -
JavaSE(抽象类)
抽象类:用关键字abstract修饰一个方法,并且只“声明”而不具体实现这个方法,就可以生成一个抽象方法:public abstract double perimeter();包含至少一个抽象方法的类,必须用abstract修饰,成为抽象类。注:抽象类是不能直接实例化的,因为抽象类存在未实现的方法。有抽象类派生出的子类,若依然有未实现的抽象方法,则子类也是抽象类。抽象类由“确定的成分”和“不确定的成分”两部分组成。“确定的部分”指类中固定的,固有的和确定的成员、方法,这些成分在抽象类中实现,原创 2020-11-09 15:31:41 · 118 阅读 · 0 评论 -
JavaSE(泛型初步)
基本类型的封装类:对于基本八大类型有对应的类类型。Byte, Character, Short, Integer, Long, Float, Double, Boolean但在java中,所谓自动拆箱与装箱就是对应的int数据类型可自动转换为Integer类的对象。泛型:public static <T> T[] appendArray(T[] m) { return m; }上述语句中的为泛型标志 T[]为泛型返回值类型 T[] m为形参变量类型其T是可以随便取的,指原创 2020-11-09 15:31:33 · 93 阅读 · 0 评论 -
JavaSE(日历类)
public static void main(String[] args) { Calendar today = Calendar.getInstance(); System.out.println(today.get(Calendar.DATE)); SimpleDateFormat sdf = new SimpleDateFormat("YYYY年MM月dd日 - HH 时 mm 分 ss 秒"); System.out.println(sdf.format(today.getTime原创 2020-11-09 15:31:23 · 74 阅读 · 0 评论 -
JavaSE(数组)
数组的定义和初始化:public static void main(String[] args) { int[] arr1 = {1, 2, 3, 4}; int[] arr2 = new int[10]; }对应的不同数据类型有不同的初值。数组遍历时,数组.length表示该数组有效元素个数。或者java有(int i : arr2),前面i指代遍历时的元素,后者表示要遍历的数组。当元素类型为类时,需申请空间:Complex[] arrc = new Complex[5]; f原创 2020-11-09 15:31:05 · 62 阅读 · 0 评论 -
JavaSE(Object类及其方法的覆盖)
一切类的基类——Object:所有类都继承于Object类。覆盖toString()方法:我们直接调用println()时,其输出方法通常不是我们想要它输出的形式,例如直接输出对象时,它输出的是对象的首地址,要想更改其输出方式,我们可以通过在当前类下覆盖toString()方法达到目的。@Override public String toString() { return this.getName(); }在cat类下通过覆盖toString()方法,当再次在demo中调用println原创 2020-11-09 15:30:58 · 763 阅读 · 0 评论 -
JavaSE(成员、方法的覆盖)
方法的覆盖:首先对语法和规则上进行说明:1.方法的覆盖只存在于有继承关系的类之间;2.子类方法名称,参数个数和类型,必须与覆盖的父类方法一致;3.第二条成立,子类方法返回值类型必须与被覆盖的父类方法一致;4.第二条成立,子类方法的修饰符不能“低于”被覆盖的分类方法;5.违反第二条,其实质是实现了方法的重载,而非覆盖。对于派生类中用于覆盖的方法,其主要作用是根据派生类不同的使用环境,对已有工具的适应性变更。关于instanceof:instanceof直译是“是实例否”作用是判别一个对象是原创 2020-11-09 15:30:45 · 229 阅读 · 0 评论 -
JavaSE(继承)
对继承关系的基本解释:子类会自动拥有父类部分或全部的属性和方法,同时可以继续定义子类自己的属性和方法,使得子类信息更详细、功能更明确当我们在一个包先写Parents类:public class Parents { public int parentPublic; private int parentPrivate; protected int parentProtected; int parentNone;}当在同一个包内写Child(继承与Parents)类时:当在构造函数中写道th原创 2020-11-09 15:30:35 · 646 阅读 · 0 评论 -
JavaSE(类的介绍.final.static)
关于final:在C语言中,为了避免“神仙数字”和提高代码可维护性,引入了宏替换概念。即#define MAX 100在java中虽然没有宏替换,但是有final,相当于C中const。被final修饰的变量就是只读变量,可以作为宏替换的替代品。如下 public final int MIN_ROW = 1; public final int MAX_ROW = 25; public void setRow(int row) { if (row < MIN_ROW || row原创 2020-11-09 15:30:27 · 105 阅读 · 0 评论 -
JavaSE(类的介绍.this)
关于this:首先回忆一下C语言中隐藏变量的概念:如下代码:int main() { int j; { int j = 10; j++; }}在这段语句分别定义了两个j,在大括号中的j即为隐藏变量,即在{}内使用的j是{}内定义的j变,this的含义与之类似。例如下面:public This(int row, int col) { this.row = row; this.col = col; }这是普通的构造方法,语句中的row,col对应当前类中的row,co原创 2020-11-09 15:30:16 · 78 阅读 · 0 评论 -
JavaSE(包的概念)
包村早的主要目的是为了所谓的:命名空间而命名空间要解决的问题是“命名冲突”每个公司、机构对包都有不同的包命名规范。包的本质就是目录,且是多级目录。原创 2020-11-09 15:29:57 · 95 阅读 · 0 评论 -
JavaSE(方法的重载)
在C语言中,每个函数及其调用都有极其明确的对应关系,形参与实参的数据类型必须严格相同。但是在Java中,为避免函数过多而导致的一系列形参实参类型混淆的问题,前辈们提出了方法重载的编程手段。public void setPoint(int x, int y) { setRow(x); setCol(y);}public void setPoint(int x) { setPoint(x, 0);}public void setPoint(SimplePoint source) { setP原创 2020-11-09 15:29:44 · 153 阅读 · 0 评论 -
JavaSE(构造方法)
在工具的合理性中,我们已经给row,col定了有效取值范围,但是当我们写出如下程序:public class First { public static void main(String[] args) { SimplePoint pointOne = new SimplePoint(); pointOne.printPoint(); }}新生成的Point里row和col值都是0,明显不符合有效取值,细看会发现我们只是实例化了一个pointOne对象,并没有赋值。在这段程序中Simp原创 2020-11-09 15:29:22 · 105 阅读 · 0 评论 -
JavaSE(工具的保护及合情)
工具的保护——权限修饰符首先对于工具的设计理念:工具不仅是为了完成当下的项目开发而设计的,更应该从“未来可再次使用”的角度思考在数据结构与算法的学习中,在表达式时讲到了对工具内部的保护,定义的结构体我们并不想要用户直接用struct.abc来修改结构体内部数据,但是C语言并没有提供相应的功能。但是java提供了三个权限修饰符:public、protected、privatepublic:其修饰的成员与方法,可以在类外任意访问(读/写)private:其修饰的成员和方法,只能在类的内部进行访问基于原创 2020-11-09 15:29:13 · 50 阅读 · 0 评论 -
JavaSE(面向对象及第一个类)
面向过程和面向对象C语言编程思想都是面向过程:解决问题需要哪些过程,并将过程进一步细分,形成一个一个功能函数,通过组合、协调这些函数,最终实现这个解决问题的过程。java面向对象:问题本身由哪些部件(对象)组成,这些部件本身有哪些属性(成员)和操作(方法)。部件和部件之间有什么内在联系,以及部件是如何联系起来的,最终也能实现应用目的。代码复用在介绍之前,先了解一下公司从开公司到完成第一个项目所需要的成本,公司从有到无,虽然硬件成本表面上很多,但实际上这些都是一次性消费,长期使用。唯独技术人员的工资是原创 2020-11-09 15:29:05 · 104 阅读 · 0 评论 -
JavaSE(八大基本类型、变量的定义及其生命域、自动类型转换)
八大基本类型:C语言包含char,short,int,long,float,double这6种最基本数据类型。而java额外多了两个:byte和booleanbyte是一字节补码;boolean的取值只有true或者false;此外,C语言中long类型为四字节补码,而java中为八字节补码(可表达的数更大/小了)注:java中没有unsigned类型修饰符,即java中类型都是补码,没有无符号数这一说对于关系运算与逻辑运算在C语言中,逻辑运算和关系运算总是用1、0表示真、假,条件表达式中非0原创 2020-11-09 15:28:57 · 675 阅读 · 0 评论 -
JavaSE(第一个程序的编写和执行)
编写及准备工作刚开始JAVA的学习,进行第一个程序的编写。首先新建一个后缀名为.java的文件注:原本windows进行文件命名要求并不严格,但因为java类名称需要和文件名称完全相同,并且java类名称的命名规则与变量名,类型名,结构体名称,函数名称等相同:1.以字母或下划线开头2.由字母字符、数字字符和下划线字符组成所以在给.java程序命名时也需要注意命名规则。public class MyFirst{ public static void main(String[] args).原创 2020-11-09 15:28:48 · 108 阅读 · 0 评论 -
多线程基础知识
进程的管理和调度:1.进程创建后进入就绪态(不是直接进入运行态),和其他进程一起竞争CPU2.只有在就绪态队列中的进程才有资格竞争CPU3.所有阻塞队列中的进程没有资格竞争CPU4.阻塞态的进程只能由运行态的进程唤醒5.阻塞态进程被唤醒后不是立刻进入运行态6.进程被进程自己阻塞线程创建:继承:public class Thread() extends Thread { public Thread(){ this.start; }}接口:public class Thread原创 2020-12-02 17:26:19 · 65 阅读 · 0 评论 -
字节、字符流
字节流:输入流:int b;FileInputStream in = new FileInputStream(String Filepath);b = in.read(); //将读取到的一个字节存到b中 读取到文件末尾会返回-1in.close; //关闭流输出流:String s;FileOutputStream out = new FileOutputStream(String Filepath);//FileOutputStream out = new FileOutpu原创 2020-11-27 22:59:48 · 50 阅读 · 0 评论 -
JavaSE(窗口编程中各部件介绍)
布局模式setLayout:BorderLayout //分为东西南北中五个位置可以放置窗口零件FlowLayout //按照窗口零件大小等属性,自动安排位置null //jlblId.setBounds(0, top, lblWidth, lblHeight);绝对布局需要用setBunds设置位置 分别为左、上侧距离左、上侧零件的距离 以及该零件长度。JRadioButton //单选按钮,当将几个JRadioButton加入到一个ButtonGroup内后,按钮只有一个能选中原创 2020-11-18 17:22:02 · 191 阅读 · 0 评论 -
JavaSE(窗口编程基础)
import javax.swing.JFrame;public class FirstWindows { private static final int height = 600; private static final int width = 800; private JFrame jfrmMain; public FirstWindows() { this.jfrmMain = new JFrame("windows"); this.jfrmMain.setSize(w原创 2020-11-09 15:32:16 · 207 阅读 · 0 评论 -
JavaSE(异常的处理)
在java编程中利用try、 catch、 throw来处理异常一:出现异常无捕获:程序运行到异常处就不再继续运行,强行停止。二:用try、 catch组合:xxx;try { 可能异常的语句; xxx;} catch (异常类 异常对象) { 处理异常的语句;}xxx;这种情况下,若出现异常,运行到可能异常的语句,跳到处理异常的语句,再继续执行最后一个xxx;例:try { result = m / n;} catch (ArithmeticException err)原创 2020-11-09 15:32:08 · 87 阅读 · 0 评论