Java学习之路 之 使用技巧篇
文章目录
- 一:分隔符
- 二:super 关键字
- 三:重写父类的方法可以实现
- 四:继承后的垃圾清理
- 五:接口进行向上转型操作的方式
- 六:使用 this 关键字获取内部类与外部类的引用
- 七:创建自定义异常的步骤:
- 八:随机获取集合中的某个元素
- 九:反射机制实现创建私有构造方法对象
- 十丶泛型类型限制
一:分隔符
没有统一的对字符进行分割的符号,如果向定义多个分隔符,可使用符号“|”,例如,“,|=”表示分隔符分别为“,”和 “=”。
二:super 关键字
1、在子类中调用父类构造方法
2、在子类中调用父类成员方法(除了private修饰的都可以)
三:重写父类的方法可以实现
1、修改方法体内容
2、更改成员方法的存储权限
3、修改成员方法的返回值类型
四:继承后的垃圾清理
如果使用 finalize()方法对对象进行清理,需要确保子类 finalize()方法的最后一个动作是调用父类的 finalize()方法,以保证当垃圾回收对象占用内存时,对象的所有部分都能被正常终止。
五:接口进行向上转型操作的方式
用一段源代码来表示:
package chapter10;interface drawTest{ //定义接口public void draw(); //定义方法
}//定义平行四边形类,该类继承了四边形类,并实现了 drawTest 接口
class ParallelogramgleUselnterface extends QuadrangleUselnterface implements drawTest{public void draw() { //由于该类实现了接口,所以需要覆盖draw()方法System.out.println("平行四边形.draw()");}
}//定义正方形类,该类继承了四边形类,并实现了 drawTest 接口
class SquareUselnterface extends QuadrangleUselnterface implements drawTest{public void draw() {System.out.println("正方形.draw()");}void doAnyThing() {}
}class AnyThingUselnterface extends QuadrangleUselnterface{void doAnyThing() {}
}public class QuadrangleUselnterface{ //定义四边形类public void doAnyTthing() {}public static void main(String[] args) {/* 精彩的部分开始 *///接口也可以进行 向上转型 操作drawTest[] d = {new SquareUselnterface(),new ParallelogramgleUselnterface()};//相当于//drawTest d2 = new SquareUselnterface();//drawTest d3 = new ParallelogramgleUselnterface();/* 精彩的部分结束 */for(int i=0;i<d.length;i++) {d[i].draw(); //调用 draw()方法}}}
我说一下我为什么能理解并想出跟下面两行代码是等价的:
还记得接口的概念吗,接口可以实现多重继承,那么其实实现了接口的类,那么这个类就是子类,而对接口而言他是这个类的父类
也就是说,接口就是里面这两个类的父类,所以它可以直接进行向上转型。
这里利用了多态特性和向上转型的原理,不会的一定要去好好搜一下资料理解一下,其实这里你理解了后会很有成就感真的,哇我现在就好爽!
所以说,你只要能理解下面两行代码可以向上转型给接口,就能理解上面那一行代码了。
六:使用 this 关键字获取内部类与外部类的引用
在类中,如果遇到内部类与外部类成员变量重名的情况,可以使用 this 关键字进行处理。
源代码:
public class TheSameName {private int x;private class Inner{private int x = 9;public void doit(int x) {x++; //调用的是形参 xthis.x++; //调用内部类的变量xTheSameName.this.x++; //调用外部类的变量x}}}
七:创建自定义异常的步骤:
1、创建自定义异常
2、在方法中通过throw 关键字抛出异常对象
3、如果在当前抛出异常的方法中处理异常,可以使用 try-catch 语句块捕获并处理,否则在方法的声明处通过 throws 关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
4、在出现异常方法的调用者中捕获处理异常
源代码举例:
class MyException extends Exception{public MyException(String s) { //构造方法super(s); //父类构造方法}
}public class Tran { //创建类static int avg(int number1,int number2) throws MyException{ //定义方法,抛出异常if(number1<0 || number2<0) { //判断方法中参数是否满足指定条件throw new MyException("不可以使用负数"); //错误信息}if(number1>100 || number2>100) { //判断方法中参数是否满足指定条件throw new MyException("数值太大了"); //错误信息}return (number1 + number2) / 2; //将参数的平均值返回}public static void main(String[] args) {try {int result = avg(102,150);System.out.println(result);}catch(MyException e) {System.out.println(e);}}}
八:随机获取集合中的某个元素
int i = (int)(Math.random()*list.size()); //获得0~2之间对的随机数
此时i 代表了一个随机索引,然后利用list.get(i)就可以获取随机元素了
九:反射机制实现创建私有构造方法对象
Constructor 类中有两个方法
newInstance(Object…initargs):通过该构造方法利用指定参数创建一个该类的对象,如果未设置参数则表示采用默认无参数的构造方法
setAccessible(boolean flag):如果该构造方法的权限为 private,默认不允许通过反射利用 newInstance(Object…initargs)方法创建对象。如果先执行该方法,并将入口参数设为 true,则允许创建。
结合以上两个方法即可实现,例子如下:
try {//通过执行默认没有参数的构造方法创建对象if(i==2)example = (Example_01) constructor.newInstance();else if(i == 1) //通过执行具有两个参数的构造方法创建对象example = (Example_01) constructor.newInstance("7",5);else {//通过执行具有可变数量参数的构造方法创建对象Object[] parameters = new Object[] {new String[] {"100","200","300"}};example = (Example_01) constructor.newInstance(parameters);}}catch(Exception e) {System.out.println("在创建对象时抛出异常,下面执行 setAccessible()方法");constructor.setAccessible(true); //设置允许访问}
十丶泛型类型限制
泛型类型限制除了可以向下限制之外,还可以进行向上限制,只要在定义时使用 super 关键字即可。
举例:
Test<? super List> b = null;这样定义后,对象a只接受List接口或上层父类类型。
如: b = new Test<Object>();
Java学习之路 之 使用技巧篇相关推荐
- 【java学习之路】(javaWeb篇)008.VUE
1. 学习目标 了解什么是框架 了解什么是Vue 掌握Vue的基本语法 了解Vue的生命周期 2. 内容讲解 2.1 什么是框架 任何编程语言在最初的时候都是没有框架的,后来随着在实际开发过程中不断总 ...
- 【java学习之路】(javaWeb篇)007.正则表达式专题
正则表达式 1. 学习目标 掌握正则表达式的作用 掌握正则表达式的语法 了解常见的正则表达式 2. 内容讲解 2.1 正则表达式的概念 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特 ...
- 【java学习之路】(javaWeb篇)001.HTML
HTML HTML简介 概述:HTML(HeyperText MarkUp Language)全称称之为超文本标记语言,它是世界上最简单的语言, 在开发的时候我们只需要进行页面布局(利用标签:elem ...
- 【java学习之路】(javaWeb篇)006.构造函数、JQuery函数库
构造函数 概述:在JavaScript语言当中也有所谓构造函数[constructor],JS当中构造函数要符合如下两个特征: 函数名字首个英文字母一般需要大写[不是决定形因素] 构造函数务必.必须. ...
- 【java学习之路】(javaWeb篇)005.Js之DOM、对象、函数上下文
节点树 节点[element]即为标签 概述:静态页面骨架是由标签组成,标签之间关系很像一颗大树,简称为节点树. 如下图:静态页面标签之间关系图,很像一颗大树,因为前端人称之为节点树. 认识DOM 概 ...
- 【java学习之路】(javaWeb篇)002.CSS
CSS样式 概述:CSS[Cascading Style Sheets]全称层叠样式表. 理解:可以把HTML文件想向成是一个房子骨架,里面标签(块元素.行内元素)理解为搭建房子转,CSS负责美化房子 ...
- 【java学习之路】(mysql篇)003.mysql中limit、表的创建、删除、约束
limit limit作用 将查询结果集的一部分取出来.通常使用在分页查询当中 limit怎么用呢? 完整用法:limit startIndex, lengthstartIndex是起始下标,leng ...
- 【java学习之路】(mysql篇)001.mysql基本介绍、常用命令及简单查询
什么是数据库? 数据库: 英文单词DataBase,简称DB.按照一定格式存储数据的一些文件的组合. 顾名思义:存储数据的仓库,实际上就是一堆文件.这些文件中存储了具有特定格式的数据. 什么是数据库管 ...
- 【java学习之路】(javaWeb篇)004.JavaScript part2
函数 概述:在JavaScript脚本语言中也有函数概念,函数其实就是将某一个功能进行封装,当你事项用这个功能的时候,需要调用.执行这个函数 比如:我们在前面课程当中学习过一些内置函数 内置函数ale ...
- 个人开发经历--我的java学习之路(学校篇)
个人开发经历--我的java学习之路(学校篇) 个人介绍: 姓名: 不在这里说明 联系信息: 个人历程 jdbc阶段 sql生成器 一代代码生成器 servlet阶段 servlet项目中,sql生成 ...
最新文章
- 3. SQL Server数据库状态监控 - 可用空间
- JAVA记录-Servlet RequestDispatcher请求转发
- linux常用命令大全(转)
- Hadoop生态圈以及各组成部分的简介
- Web前端开发笔记——第三章 CSS语言 第二节 CSS选择器
- springboot 页面下载文件 网页下载文件功能 文件放resourcce下面
- 12月13日 什么是help_method,session的简单理解, find_by等finder method
- 前端学习(672):if-else
- 基克的聚合 机器人_重做秒变神器!基克的聚合成辅助标配
- 会议报到和撒离时间算会期_【NKMUN2021】城市会议新模式:让心动成为可能
- mysql 事件 函数_MySQL 自定义函数和存储过程的使用
- 胡适:一个最低限度的国学书目
- Python3从零开始搭建一个语音对话机器人
- TCP协议-TCP粘包问题
- mt4的服务器在哪个文件,mt4的服务器地址
- 参考文献格式字号字体_字体字号格式要求
- 如何快速掌握技术和知识点
- Zemax学习笔记(12)- 扫描系统实例
- 爱企查显示,Keep赴港上市,冲击“线上健身第一股”
- 酒店管理与计算机未来的结合,智慧酒店:未来酒店发展新方向