




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
江苏大学计算机学院 Version 2.0 第6章高级类特性 江苏大学软件工程课程组Page 2 本章内容 Static 关键字 创建 final 类、方法和变量 创建和使用枚举的类型 使用静态导入语句 创建抽象类和方法 创建和使用接 字符串相关类(String、StringBuffer、StringBuilder) Math类(不重要) File类 Date类、Calendar类 江苏大学软件工程课程组Page 3 static 关键字 在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量 ,在第一次使用时被初始化,对于该类的所以对象来说,static成员变量 只有一份。 public class Count private int serialNumber; public static int counter = 0; public Count() counter+; serialNumber = counter; public class TestCounter public static void main (String args) Count. counter=100; Count C1 = new Count(); Count C2 = new Count(); static变量在某些方面与其他语言的全局变量类似,Java编程语言中没 有全局变量,但是static变量是一个可以被类的任何实例访问的变量 江苏大学软件工程课程组Page 4 static 关键字 用static声明的方法为静态方法(又称类方法),在调用该方法时,不会将 对象的引用传递给它,所以在static方法中不可访问非static的成员。 静态的方法不再是针对某个对象调用,所以不能访问非静态成员 class Count private int serialNumber; public static int counter = 0; public Count() counter+; serialNumber = counter; public static int getCounter() return counter; public class TestCounter public static void main (String args) System.out.println(Count.getCounter(); Count C1 = new Count(); System.out.println(Count.getCounter(); 可以通过对象引 用或类名(不需 要实例化)访问 静态成员。 江苏大学软件工程课程组Page 5 Static 属性: public static class 属性可没有类的实例从类的外部进行访问。 Static 方法: Static 方法无需创建类的实例即可被调用。 Static 方法不能访问实例变量。 Static 初始化程序: 类可在 static 块中包含在方法主体中不存在的代码。 Static 块代码在类被加载时仅执行一次。 通常,static 块用来初始化 static(类)属性。 static 关键字(续) 江苏大学软件工程课程组Page 6 final 关键字 final 关键字用于安全性原因。 它用来创建充当标准的类。 它实现了以下限制: 不能获取 final 类的子类,即final类不能被继承。 不能覆盖 final 方法。 final 变量是常量。 在 final 类中的所有方法和数据成员是显式的。 引用类型的final变量,不能引用任何其他变量 江苏大学软件工程课程组Page 7 空 final 变量 final 变量不在其声明中被初始化;其初始化被延迟: 空 final 实例变量必须在构建器中被赋值。 空 final 本地变量可在方法的主体内随时被设置。 它仅可设置一次。 江苏大学软件工程课程组Page 8 枚举的类型 enum 类型字段由一组固定的常量组成。 可使用 enum 关键字来定义 enum 类型。例如,指定 一周每一天的 enum 类型: public enum Day SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY enum 类型 只能取特定值的一个。 所有 enums 从 java.lang.Enum 显示扩展。因为 Java 不支持多重继承,enum 不能扩展为任何别的内容。 江苏大学软件工程课程组Page 9 静态导入 J2SE 5.0提供静态导入功能,能够不受限制的访问静态成员 ,而不必使用类的名字限制它们。 从类中导入静态成员: import static ; 或import static *; 单个或集中导入成员: import static cards.domain.Suit.SPADES; 或import static cards.domain.Suit.*; 无需确定静态常量的资格: PlayingCard card1 = new PlayingCard(SPADES, 2); 过度使用静态导 入功能,使程序不可读或者无法维持,而且会破 坏其命名空间和所有导入的静态成员 江苏大学软件工程课程组Page 10 抽象类 用abstract关键字来修饰一个类时,这个类叫做抽象类; abstract class classname 成员变量; 成员方法; 用abstract来修饰一个方法时,该方法叫做抽象方法。是只 声明首部没有方法体的成员方法 abstract returnType abstractMethod(paramlist) 含有抽象方法的类必须被声明为抽象类,抽象类必须被继 承,抽象方法必须被重写。如果重写不了,应该声明自己 为抽象。 抽象方法只需声明,而不需实现,而且不允许使用final修饰 abstract方法 抽象类不能被实例化。但是它们可以被子类化。 江苏大学软件工程课程组Page 11 抽象类 抽象类定义其他类的通用属性和行为。 它用作基类来获取相同类型的特定类。例如: abstract class Animal private String name; Animal(String name) = name; public abstract void enjoy(); Abstact class Cat extends Animal private String eyesColor; Cat(String n,String c) super(n); eyesColor = c; public Abstact void enjoy() ; 上述抽象方法 enjoy 由 Animal 类的子类来继承。子类 Cat 、Dog和 Monkey 以不同的方式实现此方法。 enjoy方法在 Cat类中已被覆盖 class Dog extends Animal private String furColor; Dog(String n,String c) super(n); furColor = c; public void enjoy() System.out.println(“狗叫声“); class Monkey extends Animal private String head; Monkey(String n,String c) super(n);head = c; public void enjoy() System.out.println(“猴叫声“); 江苏大学软件工程课程组 abstract类不能用new运算创建对象 对于abstract类,我们不能使用new运算符创建该类的对象 ,需产生其子类,由子类创建对象,如果一个类是 abstract类的子类,它必须具体实现父类的abstract方法, 这就是为什么不允许使用final修饰abstract方法的原因。 一个abstract类只关心它的子类是否具有某种功能 ,并不关心功能的具体行为,功能的具体行为由 子类负责实现,抽象类中的抽象方法可以强制子 类必须给出这些方法的具体实现。 抽象类 江苏大学软件工程课程组Page 13 接 口 接口(interface)是抽象方法和常量值的定义的集合。 公共接口是在客户端代码和实现该接口的类之间的一种约定。 从本质上讲,接口是一种特殊的抽象类,这种抽象类中只 包含常量和方法的定义,而没有变量和方法的实现。 抽象类仅用于在类之间有一种关系的情况。 接口定义举例: public interface Runner public static final int id = 1; public void start(); public void run(); public void stop(); 江苏大学软件工程课程组Page 14 接口特性 接口可以多重实现; 接口中声明的属性默认为 public static final 的;也只能是 public static final 的; 接口中只能定义抽象方法,而且这些方法默认为public的、 也只能是public的; 接口可以继承其它的接口,并添加新的属性和抽象方法。 江苏大学软件工程课程组Page 15 接 口 多个无关的类可以实现同一个接口。 一个类可以实现多个无关的接口。 与继承关系类似,接口与实现类之间存在多态性。 定义Java类的语法格式: class extends implements ,* * 江苏大学软件工程课程组Page 16 接 口 举 例 interface Singer public void sing(); public void sleep(); class Student implements Singer private String name; Student(String name) = name; public void study() System.out.println(“studying“); public String getName()return name; public void sing() System.out.println(“student is singing“); public void sleep() System.out.println(“student is sleeping“); 江苏大学软件工程课程组Page 17 接 口 举 例 interface Singer public void sing(); public void sleep(); interface Painter public void paint(); public void eat(); class Student implements Singer private String name; Student(String name) = name; public void study()System.out.println(“studying“); public String getName()return name; public void sing() System.out.println (“student is singing“); public void sleep() System.out.println (“student is sleeping“); 江苏大学软件工程课程组Page 18 接 口 举 例 class Teacher extends Object implements Singer,Painter private String name; public String getString() return name; Teacher(String name) = name; public void teach()System.out.println(“teaching“); public void sing()System.out.println (“teacher is singing“); public void sleep()System.out.println (“teacher is sleeping“); public void paint()System.out.println (“teacher is painting“); public void eat()System.out.println (“teacher is eating“); 江苏大学软件工程课程组Page 19 接 口 举 例 public class Test public static void main(String args) Singer s1 = new Student(“le“); s1.sing(); s1.sleep(); Singer s2 = new Teacher(“steven“); s2.sing(); s2.sleep(); Painter p1 = (Painter)s2;/也可以当作Painter来看 p1.paint(); p1.eat(); 输出结果: student is singing student is sleeping teacher is singing teacher is sleeping teacher is painting teacher is eating testI/Test.java 江苏大学软件工程课程组 接口回调 接口回调是指:可以把实现某一接口的类创建的对象的引用赋 给该接口声明的接口变量中。那么该接口变量就可以调用被类 实现的接口中的方法。实际上,当接口变量调用被类实现的接 口中的方法时,就是通知相应的对象调用接口的方法 . Interface ShowMassage void showInfo(String s); class TV implements ShowMassage public void showInfo(String s) System.out.println(s); Public class Test public static void main (String args) ShowMassage m; /声明接口 m=new TV(); /接口变量中存放对象的引用 m. showInfo(“长虹电视机”); /接口回调 江苏大学软件工程课程组Page 21 接口的使用: 声明期望实现一个或更多的类的方法 确定对象的编程接口而无需显示类的实际主体 捕捉非相关类之间的相似性而无需强制类的关系 通过声明实现几个接口的类来模拟多重继承 接口 江苏大学软件工程课程组Page 22 接口用法总结 通过接口可以实现不相关类的相同行为,而不需要考虑这 些类之间的层次关系。(就像人拥有一项本领) 通过接口可以指明多个类需要实现的方法。(描述这项本 领的共同接口) 通过接口可以了解对象的交互界面,而不需了解对象所对 应的类。 使用接口?还是抽象类? interface同时赋予了接口和抽象类的好处 如果父类可以不带任何函数定义,或任何成员变量,那么优先使用 接口。 江苏大学软件工程课程组 内部类 Java支持在一个类中声明另一个类,这样的类称作内部类, 而包含内部类的类称为外部类。 内部类可以有自己的成员变量和方法 使用内部类必须先了解内部类与包围它的外部类之间的关系,以及它 们的成员之间如何实现相互访问 内部类的类体中不可以声明类变量(静态成员变量)和类方 法(静态成员方法)。外嵌类的类体中可以用内部类声明对 象,作为外嵌类的成员。 江苏大学软件工程课程组 在内部类中访问外部类 外部类把内部类看做它的一个成员,内部类的身份如同外部类的其他成员 变量和成员方法一样。内部类如同外部类的其他成员一样可以用public, private,protected和default修饰。 一个类内部的内部成员之间可以相互访问,由于外部类把内部类看做它的 一个成员,所以内部类也可以可以访问外部类的所有成员变量和成员方法 ,包括外部类的private成员和private方法;外部类通过创建内部类对象访 问内部类的成员。 外部类的main方法或者其他类中引用内部类必须使用内部类完整的类标识 江苏大学软件工程课程组 在外部类中访问内部类 定义内部类的目的之一是为了实现封装,实现信息的隐藏。因为内部类的类名只 能出现在外部类中,或者外部类方法的语句块内。内部类隐藏于外部类内。外部 类的方法可以通过创建内部类对象来引用内部类成员。 public class OuterClass /外部类 class GetYear /内部类 private int i=2008; public void showYear( )System.out.println(i); class GetInfor /内部类 private String inf; GetInfor (String inf) this.inf = inf; public void showInfor( ) System.out.println(“Welcom to ”+inf); public void userOuter(String information) /外部类方法 GetYear y = new GetYear( ); /创建内部类对象 y.showYear( ); GetInfor d = new GetInfor(information); /创建内部类对象 d.showInfor( ); public static void main (String args) OuterClass u = new OuterClass(); u.useOuter(“Beijing”); 江苏大学软件工程课程组 静态内部类的应用 如果一个内部类是静态的,那么这个类就自动成为顶级类,没有父类 静态内部类的方法(不管是静态方法还是非静态方法)只能直接访问外部类 中静态成员,要访问外部类中非静态成员则必须在内部类创建外部类对象, 通过对象名访问外部静态成员。而且非静态内部类不能声明静态成员。 由于内部类被声明为静态后无法正常访问外部类非静态成员,这收到了很大 的限制。一般情况下,当一个内部类不需要访问外部类成员,或者是需要声 明静态成员,或者是仅仅为了隐藏在外部类内时,可以把内部类声明为静态 的 。 静态内部类的使用主要有几个方面原因: 需要在内部类定义静态成员 希望隐藏内部类 避免类名重复。在开发大型的应用程序的时候需要设计大量的类,类存在重名的 可能。为了避免这种情况,可以把可能重名的类设置为static、public的内部类。 其他类在引用的时候要是有完整的内部类名标识(外部类名.内部类名),这样 就可以避免重复。 江苏大学软件工程课程组 静态内部类的应用 public class staticInclass public static class Person private int age; private String name; static int count=0; Person(String n,int a) name=n; age=a; count+; public void dis() System.out.println(“count= “+count+“t“+name+“t“+age); public static void main (String args) staticInclass.Person p1=new staticInclass.Person(“John“,20); p1.dis(); staticInclass.Person p2=new staticInclass.Person(“Jone“,22); p2.dis(); staticInclass.Person p3=new staticInclass.Person(“Jim“,21); p3.dis(); 江苏大学软件工程课程组 静态内部类的特殊用处 在开发应用程序的时候要编写大量的类,并需要对类进行调试。根据静态内 部类的特点,编写一个类时,在类中可以定义一个静态内部类以提供一个独 立的、可选的辅助功能,如用在代码测试和演示,这个方便而有效。 public class Outer /外部类 private int i,j; static int s=1; Outer(int a,int b)i=a;j=b; public void dis()System.out.println(i+ “ ”+j); public static class TestOuter /含有静态main方法的静态内部类 public static void main (String args) /测试外部类 Outer t= new Outer(10,100); /创建外部类对象 t.dis();System.out.println(s) /静态内部类可以访问外部类的静态成员 为了测试外部类而定义的内部类必须是静态的,因为只有静态内部类才可以定义静态的 main方法,在该方法完成对外部类的测试 江苏大学软件工程课程组 String 类 java.lang.String 类代表不可变的字符序列。 “xxxxx” 为该类的一个对象。 String类的常见构造方法: String(String original) 创建一个String对象为original的拷贝。 String(char value) 用一个字符数组创建一个String对象 String(char value,int offset,int count) 用一个字符数组从offset项开始的count个字符序列创建一个String对象 江苏大学软件工程课程组 String 类举例(1) public class Test public static void main(String args) String s1 = “hello“; String s2 = “world“; String s3 = “hello“; System.out.println(s1 = s3); /true s1 = new String (“hello“); s2 = new String(“hello“); System.out.println(s1 = s2); /false System.out.println(s1.equals(s2); /true char c= s,u,n, ,j,a,v,a; String s4 = new String(c); String s5 = new String(c,4,4); System.out.println(s4); /sun java System.out.println(s5); /java 江苏大学软件工程课程组 String 类常用方法(1) public char charAt(int index) 返回字符串中第index个字符。 public int length() 返回字符串的长度。 public int indexOf(String str) 返回字符串中出现str的第一个位置 public int indexOf(String str,int fromIndex) 返回字符串中从fromIndex开始出现str的第一个位置 public boolean equalsIgnoreCase(String another) 比较字符串与another是否一样(忽略大小写) public String replace(char oldChar,char newChar) 在字符串中用newChar字符替换oldChar字符 江苏大学软件工程课程组 String 类举例(2) public class Test public static void main(String args) String s1 = “sun java“,s2 = “Sun Java“; System.out.println(s1.charAt(1);/u System.out.println(s2.length();/8 System.out.println(s1.indexOf(“java“);/4 System.out.println(s1.indexOf(“Java“);/-1 System.out.println(s1.equals(s2);/false System.out.println(s1.equalsIgnoreCase(s2); /true String s = “我是程序员,我在学java“; String sr = s.replace(我,你); System.out.println(sr); /你是程序员,你在学java 江苏大学软件工程课程组 String 类常用方法(2) public boolean startsWith(String prefix) 判断字符串是否以prefix字符串开头 public boolean endsWith(String suffix) 判断字符串是否以prefix字符串结尾 public String toUpperCase() 返回一个字符串为该字符串的大写形式 public String toLowerCase() 返回一个字符串为该字符串的小写形式 public String substring(int beginIndex) 返回该字符串从beginIndex开始到结尾的子字符串 public String substring(int beginIndex,int endIndex) 返回该字符串从beginIndex开始到endIndex结尾的子字符串 public String trim() 返回将该字符串去掉开头和结尾空格后的字符串 江苏大学软件工程课程组 String 类举例(3) public class Test public static void main(String args) String s = “Welcome to Java World!“; String s1 = “ sun java “ ; System.out.println(s.startsWith(“Welcome“); /true System.out.println(s.endsWith(“World“); /false String sL = s.toLowerCase(); String sU = s.toUpperCase(); System.out.println(sL); /welcome to java world! System.out.println(sU); /WELCOME TO JAVA WORLD! String subS = s.substring(11); System.out.println(subS);/Java World! String sp = s1.trim(); System.out.println(sp);/sun java 江苏大学软件工程课程组 String 类常用方法(3) 静态重载方法 public static String valueOf()可以将基本类型数据转换为字符串;例 如: public static String valueOf(double d) public static String valueOf(int i) b + “”; 方法 public String split(String regex)可以将一个字符串按照 指定的分隔符分隔,返回分隔后的字符串数组。 江苏大学软件工程课程组 String 类举例(4) public class Test public static void main(String args) int j = 1234567; String sNumber = String.valueOf(j); /j+” System.out.println (“j 是“+sNumber.length()+“位数。“); String s = “Mary,F,1976“; String sPlit = s.split(“,“); for(int i=0;i角度 toRadians(double angdeg) 角度-弧度 江苏大学软件工程课程组 File 类 java.io.File类代表系统文件名(路径或文件名)。 File类的常见构造方法: public File(String pathname) 以pathname为路径创建File对象,如果pathname 是相对路径,则默认的当前路径在系统属性 user.dir中存储。 File的静态属性String separator存储了当前系统的 路径分隔符。 江苏大学软件工程课程组 通过File对象可以访问文件的属性。 public boolean canRead() public boolean canWrite() public boolean exists() public boolean isDirectory() public boolean isFile() public boolean
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市更新项目基础设施拆迁补偿及环境修复协议
- 幼儿园高级教师岗位聘用合同(双语教学版)
- 商品标签信息存储与安全管理协议
- 物业管理合同变更确认及服务质量保证书
- 在线教育平台教师聘用与职业发展合作协议
- 抖音短视频IP授权与商业合作开发合同
- 新能源项目融资合作框架及风险评估服务协议
- 高端固态电池生产线运维与技术创新合作合同
- 港澳台青年实习兼职就业指导与实习实训合同
- 新能源汽车充电站项目建设与运营风险分担协议
- 中国学生营养日主题班会
- 2024年全国行业职业技能竞赛(电力交易员)备考试题库大全(浓缩800题)
- 人流手术报告单
- 脑卒中患者的药物管理确保正确用药避免风险
- 新课标下识字教学的方法与实践
- 【瑞幸咖啡财务分析报告(附财务报表)5300字(论文)】
- JGT475-2015 建筑幕墙用硅酮结构密封胶
- 机械工业出版社2020《人工智能导论》课程同步PPT课件第4章 搜索算法
- 说专业-物流管理专业
- 钢结构门头施工方案
- 住房城乡建设领域重大安全风险隐患清单
评论
0/150
提交评论