Java基础知识整理

2021/7/29 22:06:02

本文主要是介绍Java基础知识整理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  1. 类与对象
    类是一个模板:抽象,对象是一个具体的实例

    类是一个抽象的概念 狗

    对象是一个具体的狗 小明家的旺财

  2. 方法
    定义、调用

  3. 对应的引用

    • 引用的类型: 基本类型
    • 对象是通过引用来操作的:栈---->堆
  4. 属性:字段Field 成员变量

    默认初始化

    • 数字
    • char
    • boolean
    • 引用

    修饰符 属性类型 属性名 = 属性值

  5. 对象的创建和使用

    • 必须使用new 关键字创造对象,构造器
    • 对象的属性
    • 对象的方法
  6. 类:

    • 静态的属性 属性
    • 动态的行为 方法

封装、继承、多态

封装

  • 该露的露
    • 程序设计追求“高内聚,低耦合”。高内聚就是类内部数据操作细节自己完成,不允许外部干涉;低耦合:尽暴露少量的方法给外部使用。
  • 封装(数据的隐藏)
    • 通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这成为信息隐藏。

属性私有:set/get

继承

  • 继承的本质是对某一批类的抽象,
  • super
    1. super调用父类的构造方法,必须在构造方法的第一个
    2. super必须只能出现在子类的方法或者是构造方法
    3. super和this不能同时调用方法
对比 代表的对象不同 前提 构造方法
this 本身调用这个对象 没用继承也可以使用 本类的构造
super 代表父类对象的应用 只能在继承条件下才可以使用 父类的构造

方法重写

重写都是方法的重写的,和属性无关

需要有继承关系,子类重写父类的方法!

  1. ​ 方法名必须相同
  2. 参数列表必须相同
  3. 修饰符:范围可以扩大
  4. 抛出的异常:范围,可以被缩小,但不能扩大

重写,子类的方法必须跟父类必要一致:方法体不同

为什么需要重写:

  1. 父类的功能,子类不一定需要,或者不一定满足!

    Alt+Insert :override

多态

  1. 多态是方法的多态,属性没有多态

  2. 父类和子类,有联系 类型转换异常! ClassCastException !

  3. 存在条件:继承关系,方法需要重写,父类引用指向子类对象!Father f1 = new Son();

    无法被重写的

    1. static 方法,属于类,它不属于实例
    2. final 常量
    3. private 方法

类型转化

  1. 父类引用指向子类的对象
  2. 把子类转换为父类,向上转型
  3. 把父类转换为子类,向下转型:强制转换
  4. 方便方法的调用,减少重复的代码

抽象类

  1. 不能new这个抽象类,只能靠子类去实现它:约束
  2. 抽象类中可以写普通方法
  3. 抽象方法必须在抽象类中

抽象类不可以单继承,只能用接口

接口

作用

  • 约束
  • 定义一些方法,让不同的人实现
  • public abstract
  • public static final
  • 接口不能被实例化,接口中没有构造方法
  • implements可以实现多个接口
  • 必须重写接口中的方法

implements 类可以实现接口 implements 接口
实现了接口中的类,就需要重写接口中的方法
利用接口实现多继承

异常处理机制

2091636-f506097108282cec

try

catch

finally

工厂模式

简易工厂模式

该模式对对象创建管理方式最为简单,因为其仅仅简单的对不同类对象的创建进行了一层薄薄的封装。该模式通过向工厂传递类型来指定要创建的对象,其UML类图如下:

1419489-20190628154133368-906051111

下面我们使用手机生产来讲解该模式:

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类图如下:

img

也就是定义一个抽象工厂,其定义了产品的生产接口,但不负责具体的产品,将生产任务交给不同的派生类工厂。这样不用通过指定类型来创建对象了。

接下来继续使用生产手机的例子来讲解该模式。

其中和产品相关的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),如下图所示。

1342932338_7774

特征:

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基础知识整理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程