1、Chapter 3 JSPChapter 3 JSP中的中的JavaJava程序程序JavaJava数据类型数据类型运算符和表达式运算符和表达式JavaJava控制语句控制语句JavaJava面向对象编程基础面向对象编程基础引言引言 一个简单的一个简单的JavaJava程序程序 因因java文件源代码是文本文件,则用户可用任何文本编辑器来编辑,如文件源代码是文本文件,则用户可用任何文本编辑器来编辑,如Editplus等,推荐等,推荐Eclipse或或Jbuilder,可直接测试程序。可直接测试程序。JDk也可运行程序。也可运行程序。引言引言 一个简单的一个简单的JavaJava程序程序 Jav
2、aJava是一种面向对象语言,类是面向对象语言的基本构件。关键字是一种面向对象语言,类是面向对象语言的基本构件。关键字classclass用来定义类,用来定义类,publicpublic是权限修饰符,是权限修饰符,MyhelloMyhello是创建的类名是创建的类名.类体。类体。Main()Main()是是JavaJava应用程序的入口,应用程序的入口,main()main()方法声明开头的修饰符必须被指方法声明开头的修饰符必须被指定为定为public(public(公共公共)、static(static(静态静态)、void(void(不返回任何值不返回任何值)。argsargs是是Stri
3、ngString类型的形式参数。类型的形式参数。String argsString args或或String argsString argsSystem.out.println()System.out.println()是输出语言的固定写法。是输出语言的固定写法。SystemSystem是一个系统类的是一个系统类的名称,其第一个字母必须大写;名称,其第一个字母必须大写;outout是是SystemSystem类提供的一个标准输出流;类提供的一个标准输出流;Println()Println()是标准输出流是标准输出流outout提供的方法,用于输出信息。提供的方法,用于输出信息。3.1 Java
4、3.1 Java 数据类型数据类型JavaJava标识符标识符常量和变量常量和变量JavaJava中的简单数据类型中的简单数据类型数组数组JavaJava标识符及命名规则标识符及命名规则标识符可简单理解为一个名字,用来标识包名、类标识符可简单理解为一个名字,用来标识包名、类名、方法名、常量名、变量名、接口名、对象名、数名、方法名、常量名、变量名、接口名、对象名、数组名、文件名等有效的字符序列。如:组名、文件名等有效的字符序列。如:MyhelloMyhello。命名规则:命名规则:“见名知义见名知义”3.1 Java3.1 Java 数据类型数据类型JavaJava标识符标识符常量和变量常量和变
5、量JavaJava中的简单数据类型中的简单数据类型数组数组程序中所处理的数据表现为两种形式:常量和变量。程序中所处理的数据表现为两种形式:常量和变量。常量常量引言:引言:供求关系或某原因供求关系或某原因商品价格变动:商品商品价格变动:商品 变量变量变量变量备课:思考,如何引入,提起学生兴趣?备课:思考,如何引入,提起学生兴趣?3.1 Java3.1 Java 数据类型数据类型JavaJava标识符标识符常量和变量常量和变量JavaJava中的简单数据类型中的简单数据类型数组数组数数 据据 类类 型型 计算机程序处理的对象是各种数据,数据类型是指计算机程序处理的对象是各种数据,数据类型是指数据的
6、内在表现形式。数据的内在表现形式。根据现实世界数据的不同形式,根据现实世界数据的不同形式,数据就划分为多种不同的类型。数据就划分为多种不同的类型。数据类型不同,能进行的运算不同,取值范围也不数据类型不同,能进行的运算不同,取值范围也不同,在计算机语言中还反映为数据的存储形式不同同,在计算机语言中还反映为数据的存储形式不同。JavaJava的每种数据类型占用固定的内存长度,与软硬的每种数据类型占用固定的内存长度,与软硬件平台无关;每种数据类型均有一个缺省的数值。件平台无关;每种数据类型均有一个缺省的数值。基本类型基本类型数值类型数值类型整型(整型(bytebyte、shortshort、inti
7、nt、longlong)实型(实型(float doublefloat double)字符型(字符型(charchar)布尔型(布尔型(booleanboolean)复合类型复合类型数组数组类(类(classclass)接口(接口(interfaceinterface)表表3-1 Java语言的数据类型语言的数据类型Java取消了无符号数据类型。取消了无符号数据类型。数据类型数据类型案例:案例:SimpleTypes.java数据类型转换数据类型转换Java是强类型语言,赋值操作时要对类型进行检查。是强类型语言,赋值操作时要对类型进行检查。3.1 Java3.1 Java 数据类型数据类型Ja
8、vaJava标识符标识符常量和变量常量和变量JavaJava中的简单数据类型中的简单数据类型数组数组数组数组数组数组数组数组数组数组Chapter 3 JSPChapter 3 JSP中的中的JavaJava程序程序JavaJava数据类型数据类型运算符和表达式运算符和表达式JavaJava控制语句控制语句JavaJava面向对象编程基础面向对象编程基础运算符运算符表达式表达式运算符优先级运算符优先级Chapter 3 JSPChapter 3 JSP中的中的JavaJava程序程序JavaJava数据类型数据类型运算符和表达式运算符和表达式JavaJava控制语句控制语句JavaJava面向
9、对象编程基础面向对象编程基础JavaJava语句语句案例:案例:JavaJava控制语句控制语句条件语句条件语句循环语句循环语句跳转语句跳转语句条件语句条件语句案例:案例:score条件语句条件语句JavaJava控制语句控制语句条件语句条件语句循环语句循环语句跳转语句跳转语句循环语句循环语句案例:案例:循环语句循环语句案例:案例:循环语句循环语句嵌套嵌套whilewhile和和do-whiledo-while语句语句JavaJava控制语句控制语句条件语句条件语句循环语句循环语句跳转语句跳转语句跳转语句跳转语句Chapter 3 JSPChapter 3 JSP中的中的JavaJava程序程
10、序JavaJava数据类型数据类型运算符和表达式运算符和表达式JavaJava控制语句控制语句JavaJava面向对象编程基础面向对象编程基础JavaJava面向对象编程基础面向对象编程基础面向对象编程的基本概念面向对象编程的基本概念Java中的类和对象中的类和对象修饰符修饰符抽象类和接口抽象类和接口包包对象:表示客观世界中的任何实体对象:表示客观世界中的任何实体(物理实体物理实体.人为概念人为概念.有明确边有明确边界和意义的东西界和意义的东西:人人.公司公司.窗口窗口.贷款等贷款等);类:具有共同属性和共同操作对象的集合。类:具有共同属性和共同操作对象的集合。半径为半径为2cm的红色圆的红色
11、圆半径为半径为3cm的蓝色圆的蓝色圆半径为半径为4cm的绿色圆的绿色圆相同属性(圆心坐标、半径和颜色)相同属性(圆心坐标、半径和颜色)和相同的操作(移动位置、改变大小)和相同的操作(移动位置、改变大小)圆类圆类面向对象编程的基本概念面向对象编程的基本概念面向对象的基本概念就是对象和类。面向对象的基本概念就是对象和类。类是对象的抽象,它描述了属于该对象类型的所有对象的性类是对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是其对应类的一个实例。质,而一个对象则是其对应类的一个实例。面向对象编程的基本特征面向对象编程的基本特征封装性封装性公司公司(算法、研发、测试、采购、后勤算法、研
12、发、测试、采购、后勤):总经理总经理、部门经理部门经理、各部门员工各部门员工越俎代庖越俎代庖 面向对象编程的基本特征面向对象编程的基本特征继承性继承性继承是指一个对象直接使用另一个对象的属性和方法。继承是指一个对象直接使用另一个对象的属性和方法。汽车汽车(轿车轿车/卡车卡车/越野车越野车/面包车面包车/公共汽车公共汽车)面向对象编程的基本特征面向对象编程的基本特征继承性继承性C+中支持多继承。中支持多继承。相同部分的属性和方法只编写一次,则减少了重复代码相同部分的属性和方法只编写一次,则减少了重复代码的编写,提高的编写,提高 了代码的可重用性和编程效率。了代码的可重用性和编程效率。面向对象编程
13、的基本特征面向对象编程的基本特征多态性多态性多态性:多态性:发送消息给某个对象,让该对象自行决定响应何种行为。发送消息给某个对象,让该对象自行决定响应何种行为。不同对象收到相同消息时产生多种不同的行为方式。不同对象收到相同消息时产生多种不同的行为方式。挪开挪开(车车/凳子凳子)面向对象编程的基本特征面向对象编程的基本特征多态性多态性面向对象语言编程的优势:体现在封装性、继承性、多态性。面向对象语言编程的优势:体现在封装性、继承性、多态性。多态是一种机制,多态是一种机制,在类的继承中得以实现,在类的继承中得以实现,在方法调用在方法调用时得以体现。时得以体现。创建类创建类extends用于类的继承
14、用于类的继承,即创建一个类得子类时使用,即创建一个类得子类时使用该关键字;该关键字;implements用于实践接口的关键字用于实践接口的关键字。在在Java中创建类之后,还需要为类添加类体中创建类之后,还需要为类添加类体(由成员变量和方法构成由成员变量和方法构成)成员变量和方法成员变量和方法格式格式Java中是通过类来封装对象的属性和行为。中是通过类来封装对象的属性和行为。对象属性对象属性是通过是通过类的成员变量类的成员变量来表示的;来表示的;对象行为对象行为是通过是通过类的成员方法类的成员方法来表示的。来表示的。Java中完整的类声明格式如下:中完整的类声明格式如下:权限修饰符权限修饰符
15、class 类的名称类的名称 权限修饰符权限修饰符 数据类型数据类型 成员变量成员变量1;权限修饰符权限修饰符 返回值类型返回值类型 成员方法名成员方法名1(形参类型形参类型 形参变量形参变量)方法体;方法体;return 返回值;返回值;成员变量和方法成员变量和方法案例案例获取成员变量的值获取成员变量的值可以通过可以通过get方法来实现,方法来实现,即即get与成员变量与成员变量名的第一个字母大写组成的方法名;名的第一个字母大写组成的方法名;为成员变量赋值为成员变量赋值可以通过可以通过set方法来实现,方法来实现,即即set与成员变量名的与成员变量名的第一个字母大写组成的方法名;第一个字母大
16、写组成的方法名;public class Student public String name;/定义成员变量定义成员变量name public void setName(String xm)/定义定义set方法方法 name=xm;/方法体,设置成员变量方法体,设置成员变量name的值的值 public String getName()/定义定义get方法方法 return name;/方法体,获得成员变量方法体,获得成员变量name的值的值 get方法的返回值类型必须与对应成员变量的类型相同;方法的返回值类型必须与对应成员变量的类型相同;set方法中为成员变量赋值的形参数据类型必须也要与对
17、应成方法中为成员变量赋值的形参数据类型必须也要与对应成员变量的类型相同;员变量的类型相同;对象创建对象创建引言引言在在Java中通过中通过new关键字和类的构造方法关键字和类的构造方法来创建类的实例来创建类的实例(即即对象对象),有了类的实例就可以访问类的成员变量和方法了。有了类的实例就可以访问类的成员变量和方法了。利用方法的重载的形式,利用方法的重载的形式,可以实现构造方法,可以实现构造方法,在一个类中提供在一个类中提供多个构造方法;多个构造方法;在初始化时候,针对不同的情况,来调用相应的构造方法在初始化时候,针对不同的情况,来调用相应的构造方法方法重载方法重载构造方法构造方法构造方法是一个
18、与类同名的方法,构造方法是一个与类同名的方法,主要用于创建对象,进行主要用于创建对象,进行初始化操作,初始化操作,无返回值。无返回值。对象创建对象创建Persion zsan=new Persion()Persion lisi=new Persion(20)在在Java中通过中通过new关键字和类的构造方法关键字和类的构造方法来创建类的实来创建类的实例例(即对象即对象),有了有了类的实例类的实例就可以访问类的成员变量和就可以访问类的成员变量和方法了。方法了。System.out.println(zsan.age);System.out.println(lisi.age);“对象名对象名.成员变
19、量成员变量”或或“对象名对象名.方法方法”来访问对象的属性和来访问对象的属性和行为。行为。案例:案例:Persion对象创建对象创建案例案例案例:案例:Employee对象创建对象创建案例案例修饰符修饰符访问控制修饰符访问控制修饰符案例:案例:Employee2staticstatic修饰符修饰符在在Java中如果希望中如果希望某个变量的值能被所有的对象共享某个变量的值能被所有的对象共享,可可将该变量声明为静态变量。将该变量声明为静态变量。案例:案例:StaticTest当类的一个实例改变了静态成员变量的值,当类的一个实例改变了静态成员变量的值,类的其他实例类的其他实例在使用静态成员变量时,其
20、值是改变后的值。在使用静态成员变量时,其值是改变后的值。finalfinal变量变量final修饰符:可以修饰类、成员变量和成员方法。修饰符:可以修饰类、成员变量和成员方法。final变量只能在声明时为其赋值,在程序运行过程中不允变量只能在声明时为其赋值,在程序运行过程中不允许改变许改变final变量的值。变量的值。案例:案例:f1finalfinal类类finalfinal方法方法final方法:方法:子类可以继承父类的子类可以继承父类的final方法,方法,但是不能重写父但是不能重写父类的类的final方法。方法。因此,当我们声明了类中的方法,而不希望因此,当我们声明了类中的方法,而不希望
21、子类重写某个方法时,就可把该方法声明为子类重写某个方法时,就可把该方法声明为final方法。方法。抽象类抽象类引言引言u所有的对象都是通过类来描绘的,但并不是所有的类都是用所有的对象都是通过类来描绘的,但并不是所有的类都是用来描绘对象的,来描绘对象的,如果一个类中没有包含足够的信息来描绘一个如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。具体的对象,这样的类就是抽象类。u抽象类往往用来表征我们在对问题领域进行分析、抽象类往往用来表征我们在对问题领域进行分析、设计中得设计中得出的抽象概念,出的抽象概念,是对一系列看上去不同,但是本质上相同的具是对一系列看上去不同,但是本质
22、上相同的具体概念的抽象。体概念的抽象。u比如:如果我们进行一个图形编辑软件的开发,比如:如果我们进行一个图形编辑软件的开发,就会发现问就会发现问题领域存在着圆、题领域存在着圆、三角形这样一些具体概念,它们是不同的,三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,但是它们又都属于形状这样一个概念,形状这个概念在问题领形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念域是不存在的,它就是一个抽象概念。正是因为抽象的概念 在在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。类
23、是不能够实例化的。抽象类抽象类引言引言u抽象类:抽象类:他定义的对象和方法不能由他自身实现,而要由使他定义的对象和方法不能由他自身实现,而要由使用他的类去实现,也就是他只是说明了对象,并没有真正的去用他的类去实现,也就是他只是说明了对象,并没有真正的去完成他,完成的动作要有,具体使用的类去实现。完成他,完成的动作要有,具体使用的类去实现。u普通类:普通类:定义的对象和方法,要有具体的动作,也就是自己定义的对象和方法,要有具体的动作,也就是自己实现自己定义的方法和动作,具有实际的现象与效果!实现自己定义的方法和动作,具有实际的现象与效果!抽象类抽象类:把对象的共同属性和方法提取出来,设计一个更加
24、把对象的共同属性和方法提取出来,设计一个更加通用的类。通用的类。抽象类和接口抽象类和接口抽象类抽象类:把对象的共同属性和方法提取出来,设计一个更加通用的类。:把对象的共同属性和方法提取出来,设计一个更加通用的类。四边形四边形(4条边、边长、面积条边、边长、面积)抽象类抽象类抽象类的具体实现:平行四边形、正方形、长方形、梯形等等。抽象类的具体实现:平行四边形、正方形、长方形、梯形等等。抽象方法不能有方法体,抽象方法不能有方法体,包括大括号也不允许有,且抽象方法必须包括大括号也不允许有,且抽象方法必须以分号以分号“;”结束。结束。如果一个类中有抽象方法,如果一个类中有抽象方法,那这个类就一定要定义
25、为抽象类,且在那这个类就一定要定义为抽象类,且在具体的子类中实现所有的抽象方法。具体的子类中实现所有的抽象方法。案例:案例:Test3接口接口接口接口接口:接口:一种规范,在接口中只能定义常量和方法,而不能实现方法。一种规范,在接口中只能定义常量和方法,而不能实现方法。接口中的方法都是抽象的方法,不需要接口中的方法都是抽象的方法,不需要abstract关键字,默认就是关键字,默认就是抽象的方法。抽象的方法。接口:接口:盖房子的图纸盖房子的图纸绘图员按开发商要求绘图员按开发商要求(不关心用什么材料去盖不关心用什么材料去盖)开发商安排工人依据图纸样式盖楼。开发商安排工人依据图纸样式盖楼。盖起的大楼
26、就是图纸的具体实现。盖起的大楼就是图纸的具体实现。接口中定义的方法只关心该方法能做什么,而不关心具体怎么做。接口中定义的方法只关心该方法能做什么,而不关心具体怎么做。接口接口创建与实现创建与实现案例:案例:Test43在在Java中使用中使用interface关键字来创建接口,格式:关键字来创建接口,格式:public interface 接口名称接口名称 常量定义;常量定义;方法定义;方法定义;在在Java中使用中使用implements关键字来实现接口,格式:关键字来实现接口,格式:public class 类名类名 implements 接口名接口名 类体;类体;注意:在注意:在Java
27、中一个类只能有一个直接父类,但可实现多个接口。中一个类只能有一个直接父类,但可实现多个接口。包的引入包的引入实例:衣柜实例:衣柜衣服衣服隔断隔断包包package:Java提供的一种管理文件的机制。把实现不同功能提供的一种管理文件的机制。把实现不同功能的类和接口分别放入不同的包中,当需要使用某个类或接口时,的类和接口分别放入不同的包中,当需要使用某个类或接口时,只要引入其对应的包,就可以使用包中的类和接口。只要引入其对应的包,就可以使用包中的类和接口。类名冲突:类名冲突:若创建的类和接口变多时,存在若创建的类和接口变多时,存在类名重复类名重复问题。问题。若需要使用某个同名的类时,若需要使用某个
28、同名的类时,bug:Java虚拟机不允许有两个虚拟机不允许有两个及以上的同名类。及以上的同名类。措施:将他们放入不同的包中。措施:将他们放入不同的包中。实例:实例:java.utiljava.sql完整的类路径:完整的类路径:java.util.Date 或或 java.sql.Date案例:案例:java.util.Date dt=new java.util.Date();包的创建包的创建注意:注意:若在创建时没有为类指定所在的包,则自动保存到默认的包中。若在创建时没有为类指定所在的包,则自动保存到默认的包中。格式:格式:Package 包名;包名;包的引用包的引用Test类就是包类就是包a
29、a.bb的类,的类,Test的完整路径为的完整路径为”aa.bb.Test”格式:格式:package 包名包名.类名类名;案例:案例:Test(要先创建包要先创建包)课堂练习课堂练习包创建和引用包创建和引用案例:案例:新建新建Project项目,在该项目中创建项目,在该项目中创建aa.bb包,然后再引入包,然后再引入java.util包中的包中的Date类,并创建类,并创建ShiJian类,练习包的创建和引用。类,练习包的创建和引用。课堂练习课堂练习相同包之间的访问相同包之间的访问案例:案例:在已经建立在已经建立Project项目中创建项目中创建mr.bbb包,然后在该包中创建包,然后在该包
30、中创建Test和和ImpTest两个类,测试同包之间类的访问。两个类,测试同包之间类的访问。Test类代码如下:类代码如下:ImpTest类代码如下:类代码如下:在在Java中如果两个或多个类在同一包中,在一个类中可以直接创建其中如果两个或多个类在同一包中,在一个类中可以直接创建其他类的实例,然后通过类的实例访问类中的成员变量和方法,而不需他类的实例,然后通过类的实例访问类中的成员变量和方法,而不需要引用包。要引用包。课堂练习课堂练习不同包中类之间的访问不同包中类之间的访问案例:案例:在已经建立在已经建立Project项目中创建项目中创建mr.aaa包和包和mr.zzk包,然后分包,然后分别在
31、包中创建别在包中创建Exam和和ImpExam两个类,测试不同包之间类的访问。两个类,测试不同包之间类的访问。Exam类代码如下:类代码如下:ImpExam类代码如下:类代码如下:在在Java中如果两个或多个类不在同一包中,要在一个类中创建其他类中如果两个或多个类不在同一包中,要在一个类中创建其他类的实例,就必须要先引用所要使用的类的完整类路径,即引用所要使的实例,就必须要先引用所要使用的类的完整类路径,即引用所要使用的包中的类,然后才能创建类的实例,并通过类的实例访问类中的用的包中的类,然后才能创建类的实例,并通过类的实例访问类中的成员变量和方法,否则就会出错。成员变量和方法,否则就会出错。
32、课堂练习课堂练习finalfinal变量变量案例:案例:在已经建立在已经建立Project项目中创建项目中创建mingri包,并在该包中创建包,并在该包中创建T1类,在该类类,在该类中定义一个中定义一个final变量,然后再主方法中创建变量,然后再主方法中创建T1类的实例,并测试能否改变类的实例,并测试能否改变final变变量的值。量的值。案例:案例:在已创建的项目在已创建的项目Project的包的包mingri中创建中创建T1类的之类类的之类ExT1,然后再然后再ExT1类中测试是否能重写父类类中测试是否能重写父类T1中的中的final方法。方法。课堂练习课堂练习finalfinal方法方法
33、课堂练习课堂练习继承性继承性案例:案例:在项目的包在项目的包aaa中创建中创建A和和B两个类,使类两个类,使类B是类的子类,然后在子类是类的子类,然后在子类中创建的实例,并通过该实例分别调用类和类的方法,掌握继承的原理。中创建的实例,并通过该实例分别调用类和类的方法,掌握继承的原理。课堂练习课堂练习抽象类抽象类案例:案例:在项目的包在项目的包aaa中创建抽象类中创建抽象类Example及其子类及其子类SubExample,在抽象类,在抽象类Example中分别定义一个成员方法和一个抽象方法,并在子类中进行测试。中分别定义一个成员方法和一个抽象方法,并在子类中进行测试。课堂练习课堂练习权限访问权
34、限访问案例:案例:在项目的包在项目的包aaa中创建类中创建类Exm,在该类中分别定义在该类中分别定义4种权限修饰符的成员变种权限修饰符的成员变量并附初值,然后在主方法中创建类的实例,并分别输出这量并附初值,然后在主方法中创建类的实例,并分别输出这4个成员变量的值,个成员变量的值,测试上述测试上述4种权限修饰符的成员变量在当前类中的可见性。种权限修饰符的成员变量在当前类中的可见性。案例:案例:在项目的包在项目的包aaa中创建类中创建类SameExm,也就是和前一个例子中创建的也就是和前一个例子中创建的Exm类类都放在同一个包都放在同一个包aaa中,然后在中,然后在SameExm类的主方法中创建类
35、类的主方法中创建类Exm的实例,并分的实例,并分别输出类别输出类Exm中中4个成员变量的值,测试上述个成员变量的值,测试上述4种权限修饰符的成员变量在相同包种权限修饰符的成员变量在相同包的其他类中的可见性。的其他类中的可见性。课堂练习课堂练习权限访问权限访问案例:案例:在项目的包在项目的包aaa中创建类中创建类ExtExm,该类继承前例该类继承前例Exm类,然后在类,然后在ExtExm类的主方法中创建类类的主方法中创建类ExtExm的实例,并分别输出的实例,并分别输出Exm类中类中4个成员变量的值。并个成员变量的值。并测试上述测试上述4种权限修饰符的成员变量在相同包的字类中的可见性。种权限修饰
36、符的成员变量在相同包的字类中的可见性。课堂练习课堂练习权限访问权限访问案例:案例:在项目中创建包在项目中创建包bbb,并在该包中创建,并在该包中创建DisExm类,也就是该类与类,也就是该类与Exm类类不在同一个包中,然后在不在同一个包中,然后在DisExm类的主方法中创建类的主方法中创建Exm类的实例,并分别输出类的实例,并分别输出Exm类中类中4个成员变量的值。并测试上述个成员变量的值。并测试上述4种权限修饰符的成员变量在不同包的其种权限修饰符的成员变量在不同包的其他类中的可见性。他类中的可见性。课堂练习课堂练习权限访问权限访问案例:案例:在项目中创建包在项目中创建包bbb,并在该包中创建,并在该包中创建DisExtExm类,该类继承类,该类继承Exm类,类,然后在然后在DisExtExm类的主方法中创建类的主方法中创建DisExtExm类的实例,并分别输出类的实例,并分别输出Exm类中类中4个成员变量的值。并测试上述个成员变量的值。并测试上述4种权限修饰符的成员变量在不同包的字类中的可种权限修饰符的成员变量在不同包的字类中的可见性。见性。课堂练习课堂练习权限访问权限访问