版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 第4章 接口、内部类和Java API 根底接口内部类和内部接口Java.lang中的根底类库Java.until 包中的工具类库接口接口与实现接口的类Java用接口实现多继承接口的定义及声明格式接口interface)是一组抽象方法,常量和内嵌类型的集合。是一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成声明格式:interface A/ 定义接口Apublic static final String AUTHOR = “李四 ;/ 全局常量public abstract void print() ;/ 抽象方法public abstract String getInfo() ;/
2、 抽象方法interface A/ 定义接口AString AUTHOR = “李四 ;/ 全局常量void print() ;/ 抽象方法String getInfo() ;/ 抽象方法类图表示接口的实现接口的使用中也必须有子类,子类必须覆写全部抽象方法,通过implements关键字实现。一个子类可以实现多个接口。那么子类如果不是抽象类的话,肯定要覆写接口中的全部抽象方法。Demo- 接口的实现interface A/ 定义接口Apublic String AUTHOR = 李四 ;/ 全局常量public void print() ;/ 抽象方法public String getInfo
3、() ;/ 抽象方法interface B/ 定义接口Bpublic void say() ;/ 定义抽象方法class X implements A,B/ X类同时实现A和B两个接口public void say()System.out.println(Hello World!) ;public String getInfo()return HELLO ;public void print()( + AUTHOR) ;public class InterfaceDemo03public static void main(String args)X x = new X() ;/ 实例化子类对象
4、x.say() ;x.print() ;接口实现的类图表示继承抽象类实现接口interface A/ 定义接口Apublic String AUTHOR = 李四 ;/ 全局常量public void print() ;/ 抽象方法public String getInfo() ;/ 抽象方法abstract class B/ 定义抽象类Bpublic abstract void say() ;/ 定义抽象方法 class X extends B implements A/ X类线继承B类,再实现A接口public void say()System.out.println(Hello Worl
5、d!) ; public String getInfo()return HELLO ; public void print()( + AUTHOR) ; ;public class InterfaceDemo04public static void main(String args)X x = new X() ;/ 实例化子类对象x.say() ;x.print() ; ;Demo继承抽象接口类在使用中,一个抽象类可以实现一个接口,那么对于抽象类的子类那么就必须同时覆写接口和抽象类中定义的所有抽象方法。interface A/ 定义接口Apublic String AUTHOR = “李四 ;
6、/ 全局常量public void print() ;/ 抽象方法public String getInfo() ;/ 抽象方法abstract class B implements A/ 定义抽象类B,实现接口Apublic abstract void say() ;/ 定义抽象方法class X extends B/ X类线继承B类public void say()System.out.println(Hello World!) ; public String getInfo()return HELLO ; public void print()( + AUTHOR) ; ;public
7、class InterfaceDemo05public static void main(String args)X x = new X() ;/ 实例化子类对象x.say() ;x.print() ; ;接口的继承一个接口不能继承一个抽象类,但是却可以通过extends关键字继承多个接口,实现接口的多继承。 格式: interface 子接口 extends 父接口A, 父接口B, interface A/ 定义接口Apublic String AUTHOR = 李四 ;/ 全局常量public void printA() ;/ 抽象方法 interface Bpublic void pri
8、ntB() ; interface C extends A,Bpublic void printC() ; class X implements C/ X类线继承B类public void printA()System.out.println(A、Hello World!) ;public void printB()System.out.println(B、Hello MLDN) ;public void printC()System.out.println(C、Hello LXH) ; ;public class InterfaceDemo06public static void main(
9、String args)X x = new X() ;/ 实例化子类对象x.printA() ;x.printB() ;x.printC() ; ;内部类和内部接口内部类的定义-在一个类的内部还存在另外一个类Demo -定义内部类class Outer/ 定义外部类private String info = hello world ;/ 定义外部类的私有属性class Inner/ 定义内部类public void print()/ 定义内部类的方法System.out.println(info) ; / 直接访问外部类的私有属性;public void fun()/ 定义外部类的方法new
10、Inner().print() ;/ 通过内部类的实例化对象调用方法;public class InnerClassDemo01public static void main(String args)new Outer().fun() ;/ 调用外部类的fun()方法;内部类的优缺点Demo-内部类的优点class Outer/ 定义外部类private String info = hello world ;/ 定义外部类的私有属性public void fun()/ 定义外部类的方法new Inner(this).print() ;/ 通过内部类的实例化对象调用方法public String
11、 getInfo()/ 增加了一个getter方法取得info内容return ;class Inner/ 定义内部类private Outer out = null ;/ 声明Outer对象public Inner(Outer out)this.out = out ;public void print()/ 定义内部类的方法() ;/ 直接访问外部类的私有属性;public class InnerClassDemo02public static void main(String args)new Outer().fun() ;/ 调用外部类的fun()方法;使用内部类的最大优点,可以方便的访
12、问外部类中的私有属性。 注意: 以上的内部类,是无法在外部直接调用的,是无法按照外部类的形式使用的。使用static声明内部类如果一个内部类使用static关键字声明,那么此内部类就称为外部类,可以直接通过外部类.内部类 进行访问。class Outer/ 定义外部类private static String info = hello world ;/ 定义外部类的私有属性static class Inner/ 使用static定义内部类为外部类public void print()/ 定义内部类的方法System.out.println(info) ;/ 直接访问外部类的私有属性;publi
13、c void fun()/ 定义外部类的方法new Inner().print() ;/ 通过内部类的实例化对象调用方法 ;public class InnerClassDemo03public static void main(String args)new Outer.Inner().print() ;/ 调用外部类的fun()方法;在外部访问内部类一个内部类除了可以通过外部类访问,也可以直接在其他类中调用,但是调用的格式 : 外部类.内部类 内部类对象=外部类实例.new 内部类;class Outer/ 定义外部类private String info = hello world ;/
14、 定义外部类的私有属性class Inner/ 定义内部类public void print()/ 定义内部类的方法System.out.println(info) ; / 直接访问外部类的私有属性 ;public void fun()/ 定义外部类的方法new Inner().print() ;/ 通过内部类的实例化对象调用方法 ;public class InnerClassDemo04public static void main(String args)Outer out = new Outer(); / 外部类实例化对象Outer.Inner in = out.new Inner()
15、 ;/ 实例化内部类对象in.print() ;/ 调用内部类的方法 ;在方法中定义内部类一个内部类可以在任意的位置上定义,下面看一下在方法中定义内部类class Outer/ 定义外部类private String info = hello world ;/ 定义外部类的私有属性public void fun(final int temp)/ 定义外部类的方法class Inner/ 在方法中定义的内部类public void print()/ 定义内部类的方法(类中的属性: + info) ;/ 直接访问外部类的私有属性(方法中的参数: + temp) ; ;new Inner().pri
16、nt() ;/ 通过内部类的实例化对象调用方法 ;public class InnerClassDemo05public static void main(String args)new Outer().fun(30) ;/ 调用外部类的方法; java.lang中的根底类库Object 类Math类Comparable可比较接口根本数据类型的包装类String字符串类Class类System系统类和Runtime运行时类Object类 java.lang语言包是Java语言的核心类库,包含Java语言必不可少的系统类定义,包括Object类、根本数据库类型包装类、数学类、字符串类、线程类、异
17、常类等。Object 类: 在Java中所有的类都有一个公共的父类就是Object类,一个类只要么有明显的继承一个类,那么肯定是Object类的子类。 以下代码的含义是一致的。 class Person extends Object class Person Demo - Object 类的应用class Demo/ 定义Demo类,实际上就是继承了Object类;public class ObjectDemo01public static void main(String args)Demo d = new Demo() ;/ 实例化Demo对象(不加toString()输出:+d) ;(加
18、上toString()输出:+d.toString() ;从以上代码的运行结果可以发现,加与不加 toString完成的功能是一样的,即对象在打印的时候一定会调用 toString()方法,是默认调用的。 equals 方法 - 完成两个对象的比较class Personprivate String name ;/ 定义name属性private int age ;/ 定义age属性public Person(String name,int age) = name ;this.age = age ;public boolean equals(Object obj)if(this=obj)/ 地
19、址相等return true ;/ 肯定是同一个对象if(!(obj instanceof Person)/ 不是Person对象return false ;Person per = (Person) obj ;/ 向下转型if(.equals()&per.age = this.age)return true ;/ 依次比较内容elsereturn false ; public String toString()return 姓名: + + ;年龄: + this.age ; ;public class ObjectDemo03public static void main(String ar
20、gs)Person per1 = new Person(李四,30) ; / 实例化PersonPerson per2 = new Person(李四,30) ; / 实例化PersonSystem.out.println(per1.equals(per2)?是同一个人! : 不是同一个人!) ;System.out.println(per1.equals(hello)?是同一个人! : 不是同一个人!) ; ;class Personprivate String name ;/ 定义name属性private int age ;/ 定义age属性public Person(String na
21、me,int age) = name ;this.age = age ;public String toString()return 姓名: + + ;年龄: + this.age ;public class ObjectDemo02public static void main(String args)Person per = new Person(“李四,30) ; / 实例化Person(对象信息: + per) ;Demo - Object 类的应用Demo - 使用Object接收接口实例interface Apublic String getInfo();class B imple
22、ments Apublic String getInfo()/ 覆写方法return Hello World! ;public class ObjectDemo04public static void main(String args)A a = new B() ;/ 向上转型,为接口实例化Object obj = a ;/ 使用Object接收,向上转型A x = (A)obj ;/ 向下转型System.out.println(x.getInfo() ;Demo - 接收一个数组public class ObjectDemo05public static void main(String
23、args)int temp = 1,3,5,7,9 ;/ 定义数组Object obj = temp ;/ 使用Object接收数组print(obj) ;public static void print(Object o)if(o instanceof int)/ 判断是否是整型数组int x = (int)o ;for(int i=0;ix.length;i+)System.out.print(xi + t) ;总结Object 类是所有类的父类,只要是引用数据类型都可以使用Object 进行接收对象在进行向下转型之前一定要先发生向上转型,要使用instanceof关键字判断 equals
24、(): 对象比较时调用 String类也是Object 类的子类Math 类Math类提供E,PI常量和一组数学函数。表示数学操作。public class MathDemo01public static void main(String args)/ Math类中的方法都是静态方法,直接使用“类.方法名称()的形式调用即可(求平方根: + Math.sqrt(9.0) ;(求两数的最大值: + Math.max(10,30) ;(求两数的最小值: + Math.min(10,30) ;System.out.println(2的3次方: + Math.pow(2,3) ;(四舍五入: + Ma
25、th.round(33.6) ;Comparable 可比较接口 Democlass Student implements Comparable / 指定类型为Studentprivate String name ;private int age ;private float score ;public Student(String name,int age,float score) = name ;this.age = age ;this.score = score ;public String toString()return name + tt + this.age + tt + thi
26、s.score ;public int compareTo(Student stu)/ 覆写compareTo()方法,实现排序规那么的应用if(this.scorestu.score)return -1 ;else if(this.scorestu.age)return 1 ;else if(this.agestu.age)return -1 ;elsereturn 0 ;public class ComparableDemo01public static void main(String args)Student stu = new Student(张三,20,90.0f),new Stu
27、dent(李四,22,90.0f),new Student(王五,20,99.0f),new Student(赵六,20,70.0f),new Student(孙七,22,100.0f) ;java.util.Arrays.sort(stu) ;/ 进行排序操作for(int i=0;istu.length;i+)/ 循环输出数组中的内容System.out.println(stui) ;二叉树算法Demopublic class ComparableDemo02public static void main(String args)Comparable com = null ;/ 声明一个C
28、omparable接口对象com = 30 ;/ 通过Integer为Comparable实例化(内容为: + com) ;/ 调用的是toString()方法;Democlass BinaryTreeclass Node/ 声明一个节点类private Comparable data ;/ 保存具体的内容private Node left ;/ 保存左子树private Node right ;/ 保存右子树public Node(Comparable data)this.data = data ;public void addNode(Node newNode)/ 确定是放在左子树还是右子
29、树if(newNode.data pareTo(this.data)=0)/ 放在右子树if(this.right=null)this.right = newNode ;/ 没有右子树那么将此节点设置成右子树elsethis.right.addNode(newNode) ;/ 继续向下判断public void printNode()/ 输出的时候采用中序遍历if(this.left!=null)() ;/ 输出左子树System.out.print(this.data + t) ;if(this.right!=null)() ;private Node root ;/ 根元素public v
30、oid add(Comparable data)/ 参加元素Node newNode = new Node(data) ;/ 定义新的节点if(root=null)/ 没有根节点root = newNode ;/ 第一个元素作为根节点elseroot.addNode(newNode) ; / 确定是放在左子树还是放在右子树public void print()() ;/ 通过根节点输出;public class ComparableDemo03public static void main(String args)BinaryTree bt = new BinaryTree() ;bt.add
31、(8) ;bt.add(3) ;bt.add(3) ;bt.add(10) ;bt.add(9) ;bt.add(1) ;bt.add(5) ;bt.add(5) ;(排序之后的结果:) ;bt.print() ;根本数据类型的包装类目标掌握包装类的作用掌握包装类的自动装箱及自动拆箱的操作掌握包装类的转换操作包装类介绍说明Number 类Demo- 包装类的装箱及拆箱装箱: 将根本数据类型变为包装类称为装箱拆箱: 将包装类的类型变为根本数据类型称为拆箱public class WrapperDemo01public static void main(String args)int x = 30
32、 ;/ 根本数据类型Integer i = new Integer(x) ;/ 装箱:将根本数据类型变为包装类int temp = Value();/ 拆箱:将一个包装类变为根本数据类型;public class WrapperDemo02public static void main(String args)float f = 30.3f ;/ 根本数据类型Float x = new Float(f) ;/ 装箱:将根本数据类型变为包装类float y = x.floatValue();/ 拆箱:将一个包装类变为根本数据类型;自动装箱拆箱JDK 1.5之前对于程序本身来说包装类是不能直接进行
33、“+ - * / + - “ 是不可以的,因为是一个类,所以不可以这样操作。但是在JDK 1.5之后对程序的包装类功能进行了改变,增加了自动装箱及自动拆箱的功能,而且也可以使用包装类直接进行数字运算。 public class WrapperDemo03public static void main(String args)Integer i = 30 ;/ 自动装箱成IntegerFloat f = 30.3f ;/ 自动装箱成Floatint x = i ;/ 自动拆箱为intfloat y = f ;/ 自动拆箱为float;包装类的应用包装类还有一个最大的优点: 将字符串变为指定的数据
34、类型Demo- 包装类的应用public class WrapperDemo04public static void main(String args)String str1 = 30 ;/ 由数字组成的字符串String str2 = 30.3 ;/ 由数字组成的字符串int x = Integer.parseInt(str1) ;/ 将字符串变为int型float f = Float.parseFloat(str2) ;/ 将字符串变为float型(整数乘方: + x + * + x + = + (x * x) ;(小数乘方: + f + * + f + = + (f * f) ; Wra
35、pperDemo05字符串类 StringString 类中的常用方法字符数组与字符串一个字符串可以变为字符数组,同样,也可以把一个字符数组,变为一个字符串。public class StringAPIDemo01public static void main(String args)String str1 = hello ;/ 定义字符串char c = str1.toCharArray() ; / 将一个字符串变为字符数组for(int i=0;ic.length;i+)/ 循环输出System.out.print(ci + 、) ; () ;/ 换行String str2 = new S
36、tring(c) ;/ 将全部的字符数组变为StringString str3 = new String(c,0,3) ;/ 将局部字符数组变为StringSystem.out.println(str2) ;/ 输出字符串System.out.println(str3) ;/ 输出字符串 ;从字符串中取出制定位置的字符public class StringAPIDemo02public static void main(String args)String str1 = hello ;/ 定义String对象System.out.println(str1.charAt(3) ;/ 取出字符串中
37、第四个字符;字符串与byte数组的转换public class StringAPIDemo03public static void main(String args)String str1 = hello ;/ 定义字符串byte b = str1.getBytes() ;/ 将字符串变为byte数组System.out.println(new String(b) ;/ 将全部的byte数组变为字符串System.out.println(new String(b,1,3) ;/ 将局部的byte数组变为字符串;取出字符串的长度public class StringAPIDemo04public
38、 static void main(String args)String str1 = “hello lixiaoyu ;/ 定义字符串变量System.out.println(+str1+的长度为:+str1.length() ;查找指定的字符串是否存在public class StringAPIDemo05public static void main(String args)String str1 = abcdefgcgh ;/ 声明字符串System.out.println(str1.indexOf(c) ;/ 查到返回位置System.out.println(str1.indexOf
39、(c,3) ;/ 查到返回位置,从第4个位置开始查找System.out.println(str1.indexOf(x) ;/ 没有查到返回-1;去掉空格public class StringAPIDemo06public static void main(String args)String str1 = hello ;/ 定义字符串System.out.println(str1.trim() ;/ 去掉左右空格后输出;字符截取public class StringAPIDemo07public static void main(String args)String str1 = hello
40、 world ;/ 定义字符串System.out.println(str1.substring(6) ; / 从第7个位置开始截取System.out.println(str1.substring(0,5) ; / 截取05个位置的内容;拆分字符串public class StringAPIDemo08public static void main(String args)String str1 = hello world ;/ 定义字符串String s = str1.split( ) ;/ 按空格进行字符串的拆分for(int i=0;is.length;i+)/ 循环输出System.
41、out.println(si) ;大小写转换public class StringAPIDemo09public static void main(String args)(将hello world转成大写: + hello world.toUpperCase() ;(将HELLO WORLD转成小写: + HELLO WORLD.toLowerCase() ;判断是否以指定的字符串开头或结尾public class StringAPIDemo10public static void main(String args)String str1 = *HELLO ;/ 定义字符串String st
42、r2 = HELLO* ;/ 定义字符串if(str1.startsWith(*)/ 判断是否以“*开头(*HELLO以*开头) ;if(str2.endsWith(*)/ 判断是否以“*结尾(HELLO*以*结尾) ;不区分大小写的比较public class StringAPIDemo11public static void main(String args)String str1 = HELLO ;/ 定义字符串String str2 = hello ;/ 定义字符串(HELLO equals hello + str1.equals(str2) ;(HELLO equalsIgnoreC
43、ase hello + str1.equalsIgnoreCase(str2) ;/ 不区分大小写的比较;字符串替换功能public class StringAPIDemo12public static void main(String args)String str = hello ;/ 定义字符串String newStr = str.replaceAll(l,x);/ 现在将所有的l替换成x(替换之后的结果: + newStr) ;Class 操作类P119System 系统类和Runtime运行时类System系统类提供标准输入输出常量和访问系统资源的方法。System类是一些与系统相
44、关的属性和方法的集合,在System类中所有的属性都是静态的。Demo - System 类的应用public class SystemDemo01public static void main(String args)long startTime = System.currentTimeMillis() ;/ 取得开始计算之前的时间int sum = 0 ;/ 声明变量for(int i=0;i + this) ;public class SystemDemo04public static void main(String args)Person per = new Person(张三,30
45、) ;per = null ;/ 断开引用System.gc() ;/ 强制性释放空间;只有强制性调用gc()的时候才发现对象被回收,当然,如果不调用,那么系统也会在一定时间内自动进行回收。对象的生命周期Runtime 类Runtime:运行时,是一个封装了JVM进程的类;每一个Java程序实际上就是启动了一个JVM进程,那么每一个JVM进程都是对应一个runtime实例。Demo - Runtime类应用public class RuntimeDemo01public static void main(String args)Runtime run = Runtime.getRuntime(
46、);/ 通过Runtime类的静态方法进行实例化操作System.out.println(JVM最大内存量: + run.maxMemory() ;/ 观察最大的内存,根据机器的不同,环境也会有所不同System.out.println(JVM空闲内存量: + run.freeMemory() ;/ 取得程序运行的空闲内存String str = Hello + World + ! +“t + “Welcome + “To + “School + ;System.out.println(str) ;for(int x=0;x1000;x+)str += x ;/ 循环修改内容,会产生多个垃圾(
47、操作String之后的,JVM空闲内存量: + run.freeMemory() ;run.gc() ;/ 进行垃圾收集,释放空间(垃圾回收之后的,JVM空闲内存量: + run.freeMemory() ;Runtime与Process类除了观察内存使用量之外,也可以直接使用runtime 类运行本级的可执行程序,例如:调用记事本public class RuntimeDemo02public static void main(String args)Runtime run = Runtime.getRuntime() ;/ 取得Runtime类的实例化对象tryrun.exec(notep
48、ad.exe) ;/ 调用本机程序,此方法需要异常处理catch(Exception e)e.printStackTrace() ;/ 打印异常信息/ System.out.println(e) ;Process类 exec方法的返回值是Process. 表示一个进程的操作类。可以通过deestroy方法销毁掉一个进程。public class RuntimeDemo03public static void main(String args)Runtime run = Runtime.getRuntime() ;/ 取得Runtime类的实例化对象Process p = null ;/ 定义进程变量tryp = run.exec(notepad.exe) ; / 调用本机程序,此方法需要异常处理catch(Exception e)e.printStackTrace() ;/ 打印异常信息/ System.out.println(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026上半年四川成都市温江区卫生健康局下属事业单位考核招聘8人备考题库【黄金题型】附答案详解
- 2026广西钦州市统计局面向社会招聘编外人员2人备考题库带答案详解(培优b卷)
- 2026广东梅州市人民医院第2批招聘43人备考题库带答案详解(达标题)
- 哈药集团股份有限公司2026届春季校园招聘备考题库【b卷】附答案详解
- 2026上海交通大学公共卫生学院栾洋课题组博士后招聘备考题库及参考答案详解(培优)
- 2026中共湖南省委党校(湖南行政学院)招聘高层次人才17人备考题库及答案详解【历年真题】
- 2026四川大学华西医院生物医学大数据研究院郭安源教授课题组博士后招聘备考题库【学生专用】附答案详解
- 2026广东河源市妇幼保健院招聘合同制专业技术人员25人备考题库附完整答案详解【夺冠】
- 2026四川宜宾珙县总工会第一次招聘社会化工会工作者1人备考题库含答案详解
- 2026四川宜宾长宁县淯江文旅集团有限公司招聘员工20名备考题库【完整版】附答案详解
- 肺部真菌感染诊疗规范与临床实践
- 2025年贵州省高考物理试卷真题(含答案)
- 2026贵州省气象部门第二批公开招聘应届毕业生22人笔试备考试题及答案解析
- 昆明市公安局盘龙分局2026年第一批勤务辅警招聘(120人)笔试模拟试题及答案解析
- 医院感染预防护理培训课件
- 医护一体化业务查房制度
- 第2课 幸福生活是奋斗出来的 课件+视频-2025-2026学年道德与法治三年级下册统编版
- 2026年c语言考试题库100道【历年真题】
- 2025-2026学年统编版七年级道德与法治下册全册教案
- GB/T 18302-2026国旗升挂装置基本要求
- 2026年春季学期小学五年级下册信息科技(清华版·贵州)教学计划含进度表
评论
0/150
提交评论