![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
学习Java基础
文章平均质量分 51
Dragon.liu
这个作者很懒,什么都没留下…
展开
-
设计模式——代理模式
代理模式代理设计模式就是将辅助性的操作交给代理类区完成,真正操作交给真实主体类静态代理public interface Subject { /** * 主体对象要做的事 */ public void sleepWithfei();}package dailims;public class EmperorA implements Subject{ @Override public void sleepWithfei() { System.out.println("皇帝要和原创 2021-09-24 17:49:50 · 45 阅读 · 0 评论 -
设计模式—工厂模式
工厂模式工厂模式的出现是为了降低代码之间的耦耦合度,耦合度就是上层代码对象下层代码之间的依赖程度,依赖程度越高耦合度就越高。简单工厂模式public interface Animal { public abstract void eat();}public class Bird implements Animal{ @Override public void eat() { System.out.println("吃虫子"); }}public class Pig imple原创 2021-09-24 17:04:19 · 115 阅读 · 0 评论 -
设计模式-适配器模式
适配器模式在接口(或者抽象类)与子类之间定义一个中间类,让中间类去实现接口,然后子类再去继承中间类,这样的好处是子类可以选择性覆盖接口的方法,这种设计思想叫作适配器设计模式public interface Animal { public void eat(); public void sleep(); public void walk(); public void creep(); public void flying();}package shipeiqims;public cl原创 2021-09-24 15:33:51 · 45 阅读 · 0 评论 -
设计模式-模板设计模式
模板设计模式定义一个抽象父类,在该中组织子类方法的调用,在这个类中定义出一个方法来实现子类方法调用的组织,这个方法叫作模板方法,该类叫作模板类。模板方法:组织子类方法的调用,定义出一个骨架抽象方法:要求子类覆写的方法final修饰的方法:该方法不让被子类覆写(比如说吃饭的方法就是要求子类自己选择方式)钩子方法:在父类中默认实现了,子类可以选择性覆写,方法名一般以do开头package mubanns;public abstract class Templetpattern { /*原创 2021-09-24 15:16:15 · 45 阅读 · 0 评论 -
设计模式-装饰者模式
装饰者模式在不必改变原类文件和使用继承的情况下,动态地拓展一个对象的功能。他是通过创建一个包装对象,也就是装饰来包裹真实的对象。装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。装饰对象包含一个真实对象的引用装饰者模式与继承关系的目的都是要扩展对象的功能,但是装饰着可以提供比继承更多的灵活性。解决了使用继承带来的大量的子类。通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合package zhuangshims;pub原创 2021-09-24 14:38:17 · 52 阅读 · 0 评论 -
设计模式—单例设计模式
单利设计模式单例设计模式是让某个类在程序的一次运行或者一个运行的容器中只产生一个对象特征:构造方法私有化将本类对象保存到一个静态属性中提供一个静态方法取得本类对象什么时候使用:控制资源时使用,通过线程同步起到控制资源的并发访问控制实例数量时使用,达到节约资源的作用做为数据共享时使用,可以在不建立直接关联的条件下,让多个不相关的两个线程或进程间实现数据共享优点:1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。2、避免对资源的多重原创 2021-09-24 11:26:58 · 73 阅读 · 0 评论 -
利用反射获取构造和属性
import java.io.Serializable;public class Emp implements Serializable,Cloneable{ private Integer empno; private String ename; private String job; private Double sal; private Integer mgr; private Integer deptno; private Date hirdate; public Emp() {原创 2021-09-22 20:33:34 · 51 阅读 · 0 评论 -
字节输入流应用
将指定目录所有文件复制到目标目录package maz;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/** * 将指定文件夹的下的所有文件复制到另一指定文件夹 * @author Dragon.liu * */public class Copydemo { public static void main(St原创 2021-09-15 14:22:00 · 52 阅读 · 0 评论 -
2021-08-28
用三目运算找出三个数中的极值依次判断,嵌套class Demo{ public static void main(String[] args) { int a = 3; int b = 4; int c = 5; int max = a>b? (a>c? a:c):(b>c? b:c); int min = a<b? (a<c? a:c):(b<c? b:c); System.out.println("min:"+min); System原创 2021-08-28 14:15:37 · 34 阅读 · 0 评论 -
键盘输入20210411
键盘输入import java.util.Scanner;/*计算圆的周长和面积。键盘输入 */public class Test { public static void main(String[] args) throws Exception { Scanner sr = new Scanner(System.in); final double pi = 3.1415926; System.out.print("输入半径r:"); double r =原创 2021-04-11 23:30:05 · 43 阅读 · 0 评论 -
了解clone方法(深拷贝、浅拷贝)
1、clone方法拷贝对象分为浅拷贝和深拷贝,参考官方文档创建并且返回一个对象的副本。确切的说这个副本要取决于这个对象的类(如果这个对象的类没有实现接口Cloneable,则无法拷贝)。正常来说所有的对象都可以使用这个方法。一般来说,被这个方法返回(被克隆出来的对象)的对象要独立于被克隆的对象,为了实现这种独立性,这个被返回的对象的某些属性在返回之前有必要去修改。通常,在克隆这些内部具有深层结构的可变对象的时候要使用他们的副本的引用来替换他们的引用。如果一个类包含的只是原始数据(基本数据类型)或者是不原创 2021-01-04 20:43:29 · 813 阅读 · 0 评论 -
了解Object类
一、了解官方文档public class ObjectClass Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class.所有层次结构的类都把Object作为基础,每个类都把Object作为自己的超类(基类),所有的对象。包括数组都实现了这个类(Object)原创 2021-01-04 15:50:25 · 106 阅读 · 0 评论 -
关于GC的问题
一、相关算法如果内存不足的情况下会触发GC回收垃圾对象。相关的算法理论。Mark-Sweep(标记-清除)算法标记阶段:标记出所有需要被回收的对象。清除阶段:回收被标记的对象所占用的空间。存在问题:容易产生内存碎片,碎片太多可能就会导致后续过程中需要为大对象分配空间时无法找到足够的空间而提前触发新的一次垃圾收集动作。(产生空间碎片)Copying(复制算法)将可用内存按照容量划分为大小相等的两块。每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另一块上面。然后再把原创 2021-01-02 23:06:37 · 491 阅读 · 0 评论 -
了解JVM(二)
一、堆与GC的联系堆还可以继续划分为更小的单位:新生代(包括伊甸园、存活区、伸缩区)、老年代(老年代、伸缩区)、元空间(包括了伸缩区)GC线程会对垃圾进行回收(在对象创建的时候可能会引发GC线程在堆中回收垃圾)对象创建的过程当创建一个新对象的时候需要为新对象申请空间,在伊甸园区申请,但是需要判断伊甸园区的空间对否充足,充足则申请成功,如果不充足则触发MinorGC回收不活跃的对象(不经常使用的对象),回收之后再判断伊甸园区空间是否充足?充足则申请成功,对象也就创建成功;如果依然不充足,则判断存原创 2021-01-02 15:57:19 · 109 阅读 · 1 评论 -
了解JVM(一)
初步认识虚拟机Java虚拟机(JVM),它是由软件技术模拟计算机运行的一个虚拟的计算机。相当于一个翻译官的角色。我们都知道Java的程序需要经过编译后产生.Class 文件,接下来要将class文件加载到内存中,JVM才能识别并运行它。Java能轻松实现跨平台。JVM的生命周期JVM在Java程序开始执行的时候,他才运行,程序结束的时候他就停止。一个Java程序会开启一个JVM进程,JVM中的线程分为两种:守护线程和普通线程。守护线程是JVM自己使用的线程,比如垃圾回收(GC)就是一个守护线程。普通原创 2021-01-02 14:09:01 · 67 阅读 · 0 评论 -
异常处理小结
异常处理流程一些问题1. throws 和 throw 的区别throws:1.抛出的是方法中可能出现的异常,抛给调用处处理;2.声明的位置在方法名称之后throw:1.抛出的人工实例化的异常对象(自己创建的一个异常对象),相当于程序出现了一个异常;2.声明的位置在方法体内2.Exception和RuntimeException的区别和练习Exception是RuntimeException的父类Exception类型的异常需要强制进行处理,如果不处理编译无法通过。RuntimeE原创 2020-12-31 16:09:02 · 159 阅读 · 3 评论 -
throw关键字
throws是将方法中的异常抛出给调用处处理,而throw是抛出的使我们创建的一个异常(我们自己实例化的一个异常对象)package com.CoderLB;public class Test { public static void main(String[] args) { System.out.println("程序开始执行"); try{ String [] strs = {"1234","12ss3"};原创 2020-12-31 15:00:32 · 112 阅读 · 0 评论 -
throws关键字(一)
抛出异常package com.CoderLB;public class Test { public static void main(String[] args) { //调用处没做任何处理 fun(); } public static void fun() throws ArithmeticException,NumberFormatException,ArrayIndexOutOfBoundsException{ Sys原创 2020-12-30 20:40:25 · 688 阅读 · 2 评论 -
多异常处理
多个catch语句处理多个异常可以使用多个catch语句,每个catch匹配一种异常package com.CoderLB;import com.baidu.vo.Dept;import com.baidu.vo.Emp;import com.dao.IBaseDAO;import java.lang.reflect.Field;import java.lang.reflect.Member;import java.lang.reflect.Method;public class原创 2020-12-30 19:28:13 · 302 阅读 · 0 评论 -
异常的捕获
处理异常package com.CoderLB;public class Test { public static void main(String[] args) throws Exception { System.out.println("开始执行程序"); String str = "abcd"; System.out.println(Integer.parseInt(str)); System.out.println("程原创 2020-12-30 16:21:39 · 111 阅读 · 1 评论 -
了解常见的异常
常见的异常见官方文档1、算数异常java.lang.ArithmeticExceptionpublic class Hi{ public static void main(String[] args) { int num = 2/0; }}//输出:EException in thread "main" java.lang.ArithmeticException: / by zero at Hi.main(Hi.java:3)2、数组越界异常java.lang.ArrayInde原创 2020-12-30 15:11:33 · 80 阅读 · 0 评论 -
了解匿名内部类
匿名内部类如果使用匿名内部类必须在抽象类或者接口的基础上实现基本的匿名内部类package com.CoderLB;import com.baidu.vo.Dept;import com.dao.IBaseDAO;public class Test { public static void main(String[] args) { //使用匿名内部类创建一个对象 IBaseDAO<String,Dept> baseDAO = new I原创 2020-12-29 18:39:29 · 57 阅读 · 1 评论 -
了解内部类
概念内部类就是在一个类中继续定义一个类,内部类的好处就是方便内部类访问外币类的私有属性, 但是内部类在安卓开发中使用比较多。定义内部类package com.CoderLB;public class Outer { private String name="张三"; //定义一个内部类 public class Inner{ public void say(){ //在内部类中访问外部类(Outer)的私有属性原创 2020-12-29 15:46:40 · 90 阅读 · 0 评论 -
对象的比较
自定义对象的比较如果使用“==”则比较的是两个对象的地址信息,但是我们正常认为两个对象的所有属性值相等两个对象就相等。package com.baidu.vo;import java.io.Serializable;//部门表简单Java类public class Dept implements Serializable { private Integer deptno; private String dname; public Dept(){}; public原创 2020-12-29 14:30:22 · 79 阅读 · 0 评论 -
了解通配符
通配符的概念问题package com.CoderLB;public class Person<A> { private A age; public A getAge() { return age; } public void setAge(A age) { this.age = age; }}public class Test { public static void main(String[]原创 2020-12-28 14:30:42 · 233 阅读 · 0 评论 -
了解泛型方法
了解如果在调用方法的时候的参数类型不确定,或者方法的返回值类型不确定,那么可以将这个方法定义为泛型方法。一般在工具类中会经常使用到。1. 泛型方法的返回值也可以定义为泛型2. 泛型方法一般在工具类中使用定义泛型方法public class Hi{ public static void main(String[] args) { fun(new Object()); } public static <T> void fun(T t){ System.out.print原创 2020-12-27 20:49:10 · 585 阅读 · 0 评论 -
了解泛型接口(二)
在实现类中继续使用泛型,之后再实例化实现类对象的时候才指定具体的占位符的类型package com.baidu.vo;import com.dao.IBaseDAO;public class EmpDAOImpl<K,V> implements IBaseDAO<K,V> { @Override public int daoCreate(V vo) { System.out.println("数据创建完成"); re.原创 2020-12-27 20:22:55 · 66 阅读 · 0 评论 -
了解泛型接口(一)
准备开发一个项目最基本的目的是将数据库中的数据显示到客户端或者客户端的数据可以将数据录入数据库实现数据的交互。关系型数据库(比如MySQL)和非关系型数据库(Redis)。关系型数据库是由表组成的,一张数据表一般保存一类信息,那么一张数据表在Java中就对应一个简单Java类(vo 类),我们会定义一个接口来规范操作这张表的实现类开发。先定义两个简单JAVA类package com.baidu.vo;import java.io.Serializable;//部门表简单Java类public原创 2020-12-27 17:21:53 · 137 阅读 · 0 评论 -
了解泛型的概念
关于Object类Object是Java提供一个最大的父类,Java提供的所有其他引用类型都继承这个类比如说String类package com.CoderLB;public class People { private Object age; public Object getAge() { return age; } public void setAge(Object age) { this.age = age; }}原创 2020-12-27 14:12:43 · 256 阅读 · 2 评论 -
了解可变参数
可变参数本质上就是数组,但使用比数组简单定义方式:参数类型…参数名称计算数组中的数值之和public class Hi { public static void main(String[] args) { //创建数组 int [] num={1,2,3,4,5,6,7}; System.out.println(fun(num)); } public static int fun(int [] nums){原创 2020-12-24 13:10:45 · 68 阅读 · 0 评论 -
接口的相关问题
接口和抽象类的区别no区别抽象类接口1定义关键字abstractinterface2成员组成常量、变量、普通方法、抽象方法、构造方法全局常量、抽象方法3访问权限四种权限public4关系c抽象类可以实现接口接口不能继承抽象类5继承关键字extendsimplements6设计模式模板设计模式、适配器设计模式工厂设计模式、代理设计模式7局限一个子类只能继承一个父类,(单继承局限)可以一个子类实现多个接口(无原创 2020-12-23 22:34:38 · 172 阅读 · 0 评论 -
接口相关的语法
一个子类可以实现多个接口package com.baidu.dao;//接口一public interface IDeptDAO { /** * 删除数据 * @return */ public int doRemove();}package com.baidu.dao;//第二个接口public interface IEmpDAO { /** * * @param emopno 要更新的数据编号 * @r原创 2020-12-23 21:22:46 · 87 阅读 · 0 评论 -
接口的简单了解
概念接口也是一个特殊的类,没有自己的构造方法,在接口中只能定义全局常量、抽象方法、静态方法(一般不会定义),要定义一个结构需要使用关键字inferface.定义接口package com.baidu.dao;public interface IEmpDAO { //定义一个全局常量 public static final String NAME="张三"; /** * 负责更新数据 * @param empno 要更新的数据编号 * @ret原创 2020-12-23 17:03:34 · 138 阅读 · 0 评论 -
了解多态
类的多态需求:有四个类,Student、Worker、Teacher、Doctor要求在一个类中定义方法来将以上类作为方法的参数接受。现在能想到可以使用方法的重载接受。如下:package com.CoderLB;import java.io.Serializable;import java.sql.SQLOutput;public class Student { public void say() { System.out.println("我是一个学生");原创 2020-12-20 23:42:35 · 142 阅读 · 0 评论 -
了解向上转型,向下转型
一、向上转型父类子类对象之间的转换分为向上转型和向下转型向上转型:通过子类对象(小范围)实例化父类对象(大范围),这种属于自动转换。(将一个子类类型的对象赋值给一个父类类型的变量)语法:父类类型 变量 = new 子类类型();package com.CoderLB;/** * 定义一个抽象类 */public abstract class Person { //定义一个普通方法 public void getInfo(){ System.out.print原创 2020-12-18 21:17:48 · 220 阅读 · 1 评论 -
了解抽象方法和抽象类
抽象方法和抽象类有一个需求:要求父类的某个方法必须被子类覆写,那么就需要将父类的方法定义为抽象方法(强制要求被覆写),如果哟个类中出现了抽象方法,那么这个类必须定义为抽象类。语法:定义抽象类:public abstract class 类名{};定义抽象方法:public abstract 返回值类型 方法名{};定义一个抽象类package com.CoderLB;/** * 定义一个抽象类 */public abstract class Person { //定义一个普原创 2020-12-17 20:30:15 · 103 阅读 · 0 评论 -
访问权限的了解
访问权限的简介访问权限控制:指的是本类及本类内部成员(成员变量,成员方法,内部类)对其他类的可见性,即这些内容是否与其其他类访问。一共四种访问权限。权限控制大小:public>protected>default(包访问权限)>private**public:**所修饰的类、变量、方法,在内外包均具有访问权限;**protected:**这种权限是为继承而设计的,protected所修饰的成员,对所有子类是可以访问的,但只对同包的类是可以访问的,对外包的非子类是不可以访问的。原创 2020-12-16 17:41:38 · 1317 阅读 · 0 评论 -
初识方法的覆写(重写)override
方法的重写在子类中定义一个和父类一样的方法,叫作子类覆写(重写)了父类的方法。public class Hi{ public static void main(String[] args) { B b = new B(); b.getinfo(); }}class A{ public void getinfo(){ System.out.println("This is a father method"); } }class B extends A{ public vo原创 2020-12-16 16:10:13 · 180 阅读 · 0 评论 -
继承中this和super的问题
this 和 super的区别this:在实例方法中则表示调用该方法的对象的引用。在构造方法中则表示在本类中构造方法之间的相互调用。super:如果出现在构造方法中,表示子类调用父类的构造方法,其实super还可以引用父类的变量或者是普通方法super和this在构造方法中只能出现在第一行public class Hi{ public static void main(String[] args) { C c = new C(); System.out.println("na原创 2020-12-13 14:53:36 · 250 阅读 · 0 评论 -
初探多重继承20201213
多重继承语法:class A{}//父类class B extends A{}//B类具备了A类的操作class C extends B{}//C类具备了A类和B类的所有操作package com.CoderLB;public class A { String name="张三"; public A(){ System.out.println("这A类是一个无参构造"); } public A(String name){ S原创 2020-12-13 13:57:59 · 52 阅读 · 0 评论