Java基础知识整理
2021/7/29 22:06:02
本文主要是介绍Java基础知识整理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
-
类与对象
类是一个模板:抽象,对象是一个具体的实例类是一个抽象的概念 狗
对象是一个具体的狗 小明家的旺财
-
方法
定义、调用 -
对应的引用
- 引用的类型: 基本类型
- 对象是通过引用来操作的:栈---->堆
-
属性:字段Field 成员变量
默认初始化
- 数字
- char
- boolean
- 引用
修饰符 属性类型 属性名 = 属性值
-
对象的创建和使用
- 必须使用new 关键字创造对象,构造器
- 对象的属性
- 对象的方法
-
类:
- 静态的属性 属性
- 动态的行为 方法
封装、继承、多态
封装
- 该露的露
- 程序设计追求“高内聚,低耦合”。高内聚就是类内部数据操作细节自己完成,不允许外部干涉;低耦合:尽暴露少量的方法给外部使用。
- 封装(数据的隐藏)
- 通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这成为信息隐藏。
属性私有:set/get
继承
- 继承的本质是对某一批类的抽象,
- super
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者是构造方法
- super和this不能同时调用方法
对比 | 代表的对象不同 | 前提 | 构造方法 |
---|---|---|---|
this | 本身调用这个对象 | 没用继承也可以使用 | 本类的构造 |
super | 代表父类对象的应用 | 只能在继承条件下才可以使用 | 父类的构造 |
方法重写
重写都是方法的重写的,和属性无关
需要有继承关系,子类重写父类的方法!
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大
- 抛出的异常:范围,可以被缩小,但不能扩大
重写,子类的方法必须跟父类必要一致:方法体不同
为什么需要重写:
-
父类的功能,子类不一定需要,或者不一定满足!
Alt+Insert :override
多态
-
多态是方法的多态,属性没有多态
-
父类和子类,有联系 类型转换异常! ClassCastException !
-
存在条件:继承关系,方法需要重写,父类引用指向子类对象!Father f1 = new Son();
无法被重写的
- static 方法,属于类,它不属于实例
- final 常量
- private 方法
类型转化
- 父类引用指向子类的对象
- 把子类转换为父类,向上转型
- 把父类转换为子类,向下转型:强制转换
- 方便方法的调用,减少重复的代码
抽象类
- 不能new这个抽象类,只能靠子类去实现它:约束
- 抽象类中可以写普通方法
- 抽象方法必须在抽象类中
抽象类不可以单继承,只能用接口
接口
作用
- 约束
- 定义一些方法,让不同的人实现
- public abstract
- public static final
- 接口不能被实例化,接口中没有构造方法
- implements可以实现多个接口
- 必须重写接口中的方法
implements 类可以实现接口 implements 接口
实现了接口中的类,就需要重写接口中的方法
利用接口实现多继承
异常处理机制
try
catch
finally
工厂模式
简易工厂模式
该模式对对象创建管理方式最为简单,因为其仅仅简单的对不同类对象的创建进行了一层薄薄的封装。该模式通过向工厂传递类型来指定要创建的对象,其UML类图如下:
下面我们使用手机生产来讲解该模式:
public interface Phone { void make(); }public class MiPhone implements Phone { public MiPhone() { this.make(); } @Override public void make() { // TODO Auto-generated method stub System.out.println("make xiaomi phone!"); } }public class IPhone implements Phone { public IPhone() { this.make(); } @Override public void make() { // TODO Auto-generated method stub System.out.println("make iphone!"); } }public class PhoneFactory { public Phone makePhone(String phoneType) { if(phoneType.equalsIgnoreCase("MiPhone")){ return new MiPhone(); } else if(phoneType.equalsIgnoreCase("iPhone")) { return new IPhone(); } return null; } }public class Demo { public static void main(String[] arg) { PhoneFactory factory = new PhoneFactory(); Phone miPhone = factory.makePhone("MiPhone"); // make xiaomi phone! IPhone iPhone = (IPhone)factory.makePhone("iPhone"); // make iphone! } }工厂方法模式
和简单工厂模式中工厂负责生产所有产品相比,工厂方法模式将生成具体产品的任务分发给具体的产品工厂,其UML类图如下:
也就是定义一个抽象工厂,其定义了产品的生产接口,但不负责具体的产品,将生产任务交给不同的派生类工厂。这样不用通过指定类型来创建对象了。
接下来继续使用生产手机的例子来讲解该模式。
其中和产品相关的Phone类、MiPhone类和IPhone类的定义不变。
AbstractFactory类:生产不同产品的工厂的抽象类
public interface AbstractFactory { Phone makePhone(); }XiaoMiFactory类:生产小米手机的工厂(ConcreteFactory1)
public class XiaoMiFactory implements AbstractFactory{ @Override public Phone makePhone() { return new MiPhone(); } }AppleFactory类:生产苹果手机的工厂(ConcreteFactory2)
public class AppleFactory implements AbstractFactory { @Override public Phone makePhone() { return new IPhone(); } }演示:
public class Demo { public static void main(String[] arg) { AbstractFactory miFactory = new XiaoMiFactory(); AbstractFactory appleFactory = new AppleFactory(); miFactory.makePhone(); // make xiaomi phone! appleFactory.makePhone(); // make iphone! }}
GUI
边界布局(BorderLayout)
边界布局管理器把容器的的布局分为五个位置:CENTER、EAST、WEST、NORTH、SOUTH。依次对应为:上北(NORTH)、下南(SOUTH)、左西(WEST)、右东(EAST),中(CENTER),如下图所示。
特征:
l 可以把组件放在这五个位置的任意一个,如果未指定位置,则缺省的位置是CENTER。
l 南、北位置控件各占据一行,控件宽度将自动布满整行。东、西和中间位置占据一行;若东、西、南、北位置无控件,则中间控件将自动布满整个屏幕。若东、西、南、北位置中无论哪个位置没有控件,则中间位置控件将自动占据没有控件的位置。
l 它是窗口、框架的内容窗格和对话框等的缺省布局。
1、 常见的构建函数和方法
构造方法摘要
BorderLayout(): 构造一个组件之间没有间距(默认间距为0像素)的新边框布局。
BorderLayout(int hgap, int vgap) : 构造一个具有指定组件(hgap为横向间距,vgap为纵向间距)间距的边框布局。
方法摘要
int
getHgap() : 返回组件之间的水平间距。
int
getVgap() : 返回组件之间的垂直间距。
void
removeLayoutComponent(Component comp): 从此边框布局中移除指定组件。
void
setHgap(int hgap): 设置组件之间的水平间距。
void
setVgap(int vgap) : 设置组件之间的垂直间距。
网格布局
网格布局特点:
l 使容器中的各组件呈M行×N列的网格状分布。
l 网格每列宽度相同,等于容器的宽度除以网格的列数。
l 网格每行高度相同,等于容器的高度除以网格的行数。
l 各组件的排列方式为:从上到下,从左到右。
l 组件放入容器的次序决定了它在容器中的位置。
l 容器大小改变时,组件的相对位置不变,大小会改变。
l 设置网格布局行数和列数时,行数或者列数可以有一个为零。若rows为0,cols为3,则列数固定为3,行数不限,每行只能放3个控件或容器。若cols为0,rows为3,则行数固定为3,列数不限,且每行必定有控件,若组件个数不能整除行数,则除去最后一行外的所有行组件个数为:Math.ceil(组件个数/rows)。
Math.ceil(double x):传回不小于x的最小整数值。比如行数为3,组件数为13个,则Math.ceil(13/3)=5,即第一行,第二行组件数各为5个,剩下的组件放在最后一行。
l 若组件数超过网格设定的个数,则布局管理器会自动增加网格个数,原则是保持行数不变。
构造方法摘要 GridLayout(): 创建具有默认值的网格布局,即每个组件占据一行一列。 GridLayout(int rows, int cols) :创建具有指定行数和列数的网格布局。Rows为行数,cols为列数。 GridLayout(int rows, int cols, int hgap, int vgap) :创建具有指定行数、列数以及组件水平、纵向一定间距的网格布局。
这篇关于Java基础知识整理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20RabbitMQ教程:新手入门指南
- 2024-11-20Redis教程:新手入门指南
- 2024-11-20SaToken教程:新手入门指南
- 2024-11-20SpringBoot教程:从入门到实践
- 2024-11-20Java全栈教程:从入门到实战
- 2024-11-20Java微服务系统教程:入门与实践指南
- 2024-11-20Less教程:初学者快速上手指南
- 2024-11-20MyBatis教程:新手快速入门指南
- 2024-11-20QLExpress教程:初学者快速入门指南
- 2024-11-20订单系统教程:从入门到实践的全面指南