JavaSE基础五

  • 1 面向对象编程
  • 1.1 继承
  • 1.2 多态
  • 1.3 接口
  • 1.4 抽象
  • 1.5 面向对象得总结
  • 2 String类和类型转换
  • 2.1 String
  • 2.2 String,StringBuffer与StringBuilder的区别?
  • 2.3 类型转换:
  • 2.4 Java异常处理机制
  • 2.5 final、finally、finalize的区别
  • 3 UI图形编程和事件处理
  • 3.1 UI图形编程
  • 3.2 事件监听


1 面向对象编程

1.1 继承

1、为什么要使用继承的原因是
因为代码之间是有重复的,违背了代码的只写一次的原则。子类和父类有相同的属性和方法,以及自身的特殊特性。继承分成子类和父类的两种方法,使用继承,可以有效实现代码复用。

2、如何实现继承:
用extends关键字来表示一个 类继承了另一个类。
子类自动继承父类的属性和方法,子类中可以定义特定的属性和方法。

3、通过super来实现对父类成员的访问,super用来引用当前对象的父类。
super的使用只有三种情况:

(1)访问父类的非private成员变量,如: super.variable;

(2)调用父类中被重写的方法,如:super.Method([paramlist]);

(3)调用父类的构造函数,如:super([paramlist]);

4、this指向自己的引用,即当前方法所在类的对象。
主要作用:
(1)将自己这个对象当作参数,传送给别的对象中的方法。
(2)引用本类当前对象的属性(以来区分成员变量和形式参数)。

5、继承下的访问控制:
public―在任何类中可见
protected―在子类中或同一个包中可见
private―只在本类中可见,子类中也不可见
缺省―在同一个包中可见,子类不在一个包中,子类中也不可见

6、继承中的构造方法
子类构造的过程中必须调用其基类的构造方法。
子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法。
(1)使用this(argument_list)调用本类的另外一个构造方法;
(2)如果调用 super,必须写在子类构造方法的第一行;
如果子类的构造方法中没有显式调用基类构造方法,则系统默认调用你基类无参数的构造方法
如果子类构造方法中既没有显式调用基类构造方法,而基类中又没有无参的构造方法,则编译出错。

1.2 多态

1、多态:
多态是具有表现多种形态的能力的特征同一个实现接口,使用不同的实例而执行不同操作。
怎么实现:
(1)父类与子类之间的继承关系
(2)子类重写父类的方法
(3)记得父类引用指向子类对象

2、为什么要使用多态:
因为使用多态之后,当需要增加新的子类类型时,无需更改父类里面的,只需要测试类加下子对象的引用,程序的可扩展性及可维护性增强。

3、多态重写:
(1)必须与被重写的方法的参数列表完全匹配
(2)返回类型:必须与超类中被重写的方法中声明的返回类型一样
(3)不能重写标志为final,static的方法

1.3 接口

1、定义:
是一些方法特征的集合,但没有方法的实现。不同的对象去实现同样的接口会产生不同的效果。
2、接口的实现:
定义接口,实现接口的方法,要在类中实现接口的所有方法,接口引用指向实现类的接口的不同对象。(在于重写所有的方法,比较复杂)。
3、接口可以继承接口,可以实现多接口:
接口名 对象名 = new 类实现接口();
4、接口里面的变量在没有public的时候,编译会默认加上final,static修饰符,声明为常量,接口是常量使用最多的地方。
5、常量:
常量标识符在程序中只能被引用,而不能被重新赋值。优点是:使用常量可以增强程序的可读性、可维护性。
6、优点:
可以享受到多态性的好处,大大提高了程序的可扩展性及可维护性。

1.4 抽象

抽象类:
用abstract关键字来修饰一个类时,该类叫做抽象类;
– 抽象类必须被继承。
– 抽象类不能被直接实例化。它只能作为其它类的超类,这一点与最终类(final类)正好相反。

抽象方法:
用abstract来修饰一个方法时,该方法叫做抽象方法。
– 抽象方法必须被重写
– 抽象方法只有声明,不能有实现。
– 定义了抽象方法的类必须是抽象类。

1.5 面向对象得总结

1、面向对象总结:
面向对象:编一种思想,能让复杂的问题简单化,让我们角色从执行者变成指挥者,不要知道过程,只要知道结果。(一切皆对象。)编程的思想,是编程的思维模式,从原来的一步一步工作转换成适用对象来完成一个一个过程,完成代码的编写的工作,方法还是要一步一步的完成。

2、三大特性:

封装:
(安全性,可维护,可拓展(不同的功能实现不同的方法))。

继承:
(减少重复性,提高复用性,减少代码量),至少要两个类以上的有相同属性和方法关系,将两个类的共性描述提取出来,单独进行描述,从而简化代码,提高复用性。

多态:
父类的引用指向了自己的子类对象。有一个类的总方法,而其他类要实现相同方法,表现出不同的状态出来。

2 String类和类型转换

2.1 String

概述:
1、字符串是字符的序列,类似于字符的数组。
2、在Java中,字符串被当作对象来处理。
3、在Java中,存放字符串常量的对象用String类 。
4、对于字符串变量,由于程序中经常需要对它做添加,插入,修改等操作,一般存放在StringBuffer类的对象中。

常用方法:
1、字符串长度: length() 方法,它返回字符串对象包含的字符数。

2、字符串的位置
int indexOf()返回指定字符在此字符串中第一次出现处的索引。
int lastIndexOf():返回指定字符在此字符串中最后一次出现处的索引。

3、大小写的转换
(1)全部转成大写,小写:
String s7 = “abSFGer”;
System.out.println(s7.toUpperCase());//所有字符转换成大写
System.out.println(s7.toLowerCase());//所有字符转换成小写

(2)忽略大小写的问题:
String s1 =“abC”;String s2 = “abc”;
boolean t =s1.equals(s2);(是不忽略大小写问题)
boolean t1 =s1.equalsIgnoreCase(s2);(忽略大小写问题)

两种方法的区别:equalsIgnoreCase不区分字母大小写,而equals则须区分。

4、截数输出:截数输出 ,左边起始包括,右边结束不包括。
String s8 = s7.substring(6);
String s9 = s7.substring(5,7);

5、==和equles之间的区别
(1)==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同。
(2)==是指对内存地址进行比较 , equals()是对字符串的内容进行比较。
(3)==指引用是否相同, equals()指的是值是否相同。

6、split(String regex) :将此字符串分割为给定的字符串的匹配。
String s11 = “abc/edf/ret”;String[] string1 = s11.split("/");//转义字符

7、replace(char oldChar, char newChar) :
返回从替换所有出现的导致一个字符串 oldChar在此字符串 newChar。

8、StringBuffer中:capacity它的容量是怎么判断的,判断容量的大小,缓冲区的默认长度是从16开始。sBuffer.append(“defg”);//原来拼接新的,charAt()方法。

2.2 String,StringBuffer与StringBuilder的区别?

String 字符串常量,StringBuffer 字符串变量(线程安全),StringBuilder 字符串变量(非线程安全)。

1、String和StringBuffer区别:
(1)String和StringBuffer都有对字符串进行增删改查等操作;
(2)String长度和内容都不可变,StringBuffer长度和内容都可变;
(3)StringBuffer有反转功能;

2、StringBuffer和StringBuilder的主要区别:
(1)StringBuffer线程同步,StringBuilder线程不同步;
(2)StringBuffer效率较低,StringBuilder效率较高;
(3)多线程时使用StringBuffer,单线程时使用StringBuilder;

2.3 类型转换:

1、8个基本数据类型都有对应的封装类:
boolean->Boolean
char->Character
byte->Byte
short->Short
int ->Integer
long->Long
float->Float
double->Double

2、基本类型转String:
String.valueOf(基本类型)
例如:
float f = 343.3f;
String s = String.valueOf(f);

3、简单类型封装类.parse简单类型(String s):
例如: double val1 = Double.parseDouble(“32.33”);

2.4 Java异常处理机制

1、 异常:
异常就是在程序的运行过程中所发生的不正常的 事件,它会中断正在运行的程序。

2、异常处理是通过5个关键字来实现的:
try、catch、 finally、throw、throws
包括:编码异常,处理异常。

常发现的异常如下:

1)nullpointerException 空指针异常。

2)ArrayIndexOutofBoundsException数组下标越界。

3)ArithmeticException数学运算异常。

当有多个不同的catch异常处理时,只执行一次对应的异常,不然会显示对应的异常处理,还可以进行用throw抛出异常,留给下一个类进行执行,通过Try catch进行解决异常。

Try:执行可能产生的异常代码
Catch:捕捉异常。

2.5 final、finally、finalize的区别

Final:
含义:是关键字,修饰符。声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承,接口中定义的属性默认是final不可变
1)将变量或者方法声明为final,可以保证它们在使用中不被改变。
2)如果一个类被声明为final,就意味着它不能再派生出新的子类,不能作为父类被继承。

Finally:
含义:是异常处理语句结构的一部分,而不管无异常发生,表示总是执行。
特别是在关闭数据库连接这方面,如果程序员把数据库连接的close()方法放到finally中,就会大大降低程序出错的几率。
但是捕获程序抛出的异常之后,既不加处理,也不继续向上抛出异常,这样并不好,并且return、continue和break都没能阻止finally语句块的执行。
Finaliza:是Object类的一个方法,垃圾收集器将对象从内存中清除出去前,做必要的清理工作。在GC清理它所从属的对象时被调用的,如果执行它的过程中抛出了无法捕获的异常,GC将终止对改对象的清理,直到下一次GC开始清理这个对象时,它的finalize()会被再次调用。

3 UI图形编程和事件处理

3.1 UI图形编程

Swing的容器有:容器有两类:顶级容器,中间容器。

1)JFrame(顶级容器):
用于框架窗口的类,此窗口带有边框、标题、用于关闭和最小化窗口的图标等。
JPanel:最灵活、最常用的中间容器。

2)Swing中的常用组件:
This.add(除了菜单,组件名字);//添加

this.setJMenuBar(创建菜单类名);//菜单面板

This.pack();//包裹,目的是因为包裹的面板之后才可以进行显示。

this.setLayout(null);//默认布局,是属于布局管理器,设置为空时是默认的清空。

this.setBackground();//颜色问题

this.setPreferredSize(new Dimension));//在窗口里面设置面板大小

setBounds:由 x 和 y 指定左上角的新位置,由 width 和 height 指定新的大小。

setBounds(206,30,100,50);//位置的x,y坐标,与宽高

setFont(new Font(null,Font.ITALIC,25));//设置设置字体样式和大小

this.setTitle//设置窗口标题

this.setResizable(false)设置窗口大小不可变,如果大小为true,可以自定义窗口大小,如果为False是固定的大小。

setDefaultCloseOperation()设置默认的关闭方式是:

(1)默认是不关闭

(2)设置EXIT_ON_CLOSE表示,关闭窗口后退出

(3)关闭时什么都不做,设置为do_nothing_on_close

3)Swing 菜单由菜单栏、菜单和菜单项构成:
JMenuItem菜单项(外观可以修改,如字体、颜色、背景、边框等),JMenu(菜单以文本字符串形式显示)。菜单类中要继承的是JMenuBar

菜单常用组件:

JButton:定义面板按钮(JButton类允许用图标、字符串或两者同时构造一个按钮)

JLabel:定义面板文字,既可以显示文本也可以显示图像,设置:JLabel label = new JLabel()。

JTextField 组件允许输入或编辑单行文本,定义文本框输入。

JPasswordField:构造一个使用给定文本存储模型和给定列数的新

JPasswordField。其他构造方法馈通此构造方法。将回显字符设置为 ‘*’,但可以通过当前外观更改。

3.2 事件监听

1、监听步骤

(1)创建监听类,实现动作监听的接口
(2)挂载,要先创建类的窗口,new出你的监听类,动作监听类的主要是按钮或组件才需要进行监听。
(3)需要对于按钮设置动作命令,当你设置完命令的时候,点击的时候进行事件的监听。
(4)根据结果执行不同的方法。
画图:要有image的文件:创建一个data类存一个又一个的image,为啥image不能new,是因为是一个抽象类,抽象类是不能实例化,接口也不可以,通过 new imageIcon(文件路径).getImage();当程序运行的时候,直接通过路径进行。

2、鼠标监听

(1)创建鼠标监听类,采用的是继承的方式对于鼠标的适配器对于鼠标的实现,抽象实现类重写方法,只需要实现我们所需要的监听。
(2)重写的是mousePressed方法,要做一个点击的效果,当点击的时候有两个方法,一个是点击一个按下,也可以有很多可以实现的地方。

3、碰撞
(1)矩形和点:
点有没有在矩形内,主要是因为有包含关系。
(2)矩形和矩形之间的关系:
之间是相交关系,如果有两个矩形有相交就会有产生一个公共的矩形。通过e.getPoint可以拿到鼠标点击的点。

4、窗口的适配器
窗口的监听是继承一个窗口的适配器,只重写一个方法,就是对于提示退出,表示一个正在退出的过程。joptionPang.showConfirmDialog(null),(提示语),标题,表示进行判断。
然后对于这个进行判断,这个完全相反,就是对于0是关闭,1是打开。

5、设置默认关闭的方式:
hide默认是隐藏。设置默认关闭的是:Do_nosing

6、delay延迟:单位是毫秒

7、定时器的使用:
(1)导包:javax.swing.Timer;创建一个定时器类,创建一个timer对象,注册一个或多个侦听器,调用start()方法。

(2)延时声明:private Timer timer = new Timer(1000,actionListener);//导swing的包

(3)动作监听类,new监听类,重写actionPerformed的方法
匿名的内部类:只使用内部类,只使用一次。