实验1java访问修饰符权限.docx
- 文档编号:30457276
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:10
- 大小:18.12KB
实验1java访问修饰符权限.docx
《实验1java访问修饰符权限.docx》由会员分享,可在线阅读,更多相关《实验1java访问修饰符权限.docx(10页珍藏版)》请在冰豆网上搜索。
实验1java访问修饰符权限
实验一:
访问修饰符权限
实验说明:
分别对四中访问修饰符进行说明。
1.公有类型修饰符public
public修饰的类、属性或方法可以被任何类访问,无论它
们是否在同一个包下,没有任何限制。
类中被设定为public的
方法是这个类对外的接口。
每个Java程序的主类都必须是
public类。
下面创建一个案例,演示在程序中调用另外一个包的类的方法。
在PublicTest包下有一个类PublicA,代码如下:
packageexample.PublicTest;
publicclassPublicA
{
publicinti=10;//定义一个public类型变量
publicStringmethod(Strings)//定义一个public类型方法
{
s="Hello,"+s;//修改字符串s
returns;//返回修改后的字符串
}
}
在ProtectTest包下再写一个与类PublicA没有任何关系
的类PublicD,代码如下:
packageexample.ProtectTest;
importexample.PublicTest.PublicA;//引入PublicTest包
下的类PublicA
publicclassPublicD
{publicstaticvoidmain(String[]args)
{PublicAa=newPublicA();
System.out.println(a.i*3);//访问类PublicA的变量i
System.out.println(a.method("public"));//访问类PublicA的方法method
}
}
运行结果:
30
Hello,public
因此,如果一个成分使用public修饰时,它是公有的,意
味着它可以被程序中的任何对象访问,也可以在程序中的任
何地方使用。
2受保护类型修饰符protected
protected修饰的方法或者属性可以被其他包中的子类访
问。
当类的属性或者方法希望被其子类访问,而不希望被其
他类访问的时候,可以将属性和方法设置为protected类型。
例
如在ProtectTest包下有一个类ProtectA,代码如下:
packageexample.ProtectTest;
publicclassProtectA
{protectedinti=10;//定义一个protected类型变量
pro1tectedStringmethod(Strings)//定义一个protected类
型方法
{
s="Hello,"+s;
returns;
}
}
在ProtectTest2包下有一个类ProtectB,它是ProtectA的子类。
此时创建ProtectB类型的对象后可以对类ProtectA的属性和方法进行访问,而无法使用类ProtectA创建的对象访问其属性和方法。
代码如下:
packageexample.ProtectTest2;
importexample.ProtectTest.ProtectA;
publicclassProtectBextendsProtectA
{publicstaticvoidmain(String[]args)
{ProtectBb=newProtectB();
System.out.println(b.i*3);//访问类ProtectA的变量i
System.out.println(b.method("protected"));//访问类ProtectA
的方法method
//ProtectAa=newProtectA();
//a.i;//访问类ProtectA的变量i,编译出错
//a.method("protected");//访问类ProtectA的方法method,
编译出错
}
}
这个例子中,如果对注释中的语句进行编译的话,会出现
错误。
运行结果:
30
Hello,protected
3无符号类型修饰符default
default修饰的方法或者属性只能被自己包中的方法或类所访问,不能被其他包中的方法和类访问。
当类的属性或者方法不希望被其他包访问的时候,可以将属性和方法设置为default类型。
例
如在DefaultTest包下有一个类DefaultA,代码如下:
packageexample.DefaultTest;
publicclassDefaultA
{Defaultinti=10;//定义一个protected类型变量
Stringmethod(Strings)//定义一个无符号类型方法
{
s="Hello,"+s;
returns;
}
}
在DefaultTest2包下有一个类DefaultB。
此时创建DefaultB类型的对象后不能对类DefaultA的属性和方法进行访问。
代码如下:
packageexample.DefaultTest2;
importexample.DefaultTest.DefaultA;
publicclassDefaultB
{publicstaticvoidmain(String[]args)
{b=newProtectB();
System.out.println(b.i*3);//访问类DefaultA的变量i
System.out.println(b.method("protected"));//访问类DefaultA
的方法method
//a.i;//访问类ProtectA的变量i,编译出错
//a.method("protected");//访问类ProtectA的方法method,
编译出错
}
}
这个例子中,如果对注释中的语句进行编译的话,会出现
错误。
4私有类型修饰符private
使用private修饰的类成员,只能被该类自身的方法访问
和修改,而不能被任何其他类(包括该类的子类)访问和引用。
因此,private修饰符具有最高的保护级别。
可以用如下例子
说明。
例如下面的例子在PrivateA类中使用private定义了一个
私有变量和一个私有方法。
在PrivateB中访问PrivateA中的
变量和方法时,编译器出错,具体代码如下:
classPrivateA
{
privateinti=10;//定义一个私有变量
privateStringmethod(Strings)//定义一个私有方法
{s="Hello,"+s;
returns;
}
}
publicclassPrivateB
{
publicstaticvoidmain(String[]args)
{
PrivateAa=newPrivateA();//创建对象a
a.i;//访问PrivateA的私有变量i,编译出错
a.method("private");//访问PrivateA的私有方法,编译出错
}
}
如果要访问和修改这些私有的变量和方法,只能在PrivateA
类中进行,修改代码如下:
publicclassPrivateA
{
privateinti=10;
privateStringmethod(Strings)
{
s="Hello,"+s;
returns;
}
publicstaticvoidmain(String[]args)
{
PrivateAa=newPrivateA();
System.out.println(a.i*3);
System.out.println(a.method("private"));
}
}
在PrivateA中定义了一个私有变量和一个修改字符串的私有方法。
在main方法中通过创建类PrivateA的对象a,修
改私有变量的值,并调用私有方法method,
运行结果如下:
30
Hello,private
在实际应用中,对于那些不希望其他类访问的属性和方
法都可以定义为private私有类型,实现了数据的封装,保证某
些属性和方法不被外部所看到在实际应用中,如果只想让该类的子类得到访问权限,限制其他包中的类访问该类的方法和属性,就可以将其设置为protected类型。
由于设置为protected类型的方法或者属性可以被其子类访问和修改,所以如果想修改该类中的某个方法,只要子类中使用了这个方法,哪么继承该类的子类就需要进行修改。
当然,被protected修饰的方法和属性也可以被同一个包
中的类访问。
加入在ProtectedTest包中有一个类ProtectC,那
么类ProtectC也可以访问类ProtectA的属性和方法,例如:
packageexample.ProtectTest;
publicclassProtectC
{publicstaticvoidmain(String[]args)
{ProtectAa=newProtectA();
System.out.println(a.i);//访问类ProtectA的变量i
System.out.println(a.method("protcted"));//访问类ProtectA
的方法method
}
}
运行结果:
10
Hello,protected
5.修饰词static
1、static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,被static修饰的成员变量和成员方法独立于该类的任何对象。
也就是说,它不依赖类特定的实例,被类的所有实例共享(因此可以用來统计一个类有多少个实例化对象),所以有些属性希望被所有对象共享,则必须将其声明为static属性,被static声明的属性成为全局属性。
2、只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。
因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
3、类中定义的静态代码块会优先于构造块先执行,而且不管有多少个对象,静态代码块只执行一次
例1:
classPersonE{
privateStringname;
privateintage;
privatestaticStringcountry="A城";
publicPersonE(Stringname,intage){
this.name=name;
this.age=age;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
publicstaticStringgetCountry(){
returncountry;
}
publicstaticvoidsetCountry(Stringcountry){
PersonE.country=country;
}
publicvoidinfo(){
System.out.println("姓名:
"+this.getName()+","+"年龄:
"+this.getAge()+","+"城市:
"+country);
}
}
publicclassStaticUse{
publicstaticvoidmain(String[]args){
PersonEper1=newPersonE("张三",20);
PersonEper2=newPersonE("李四",22);
System.out.println("---------修改之前--------");
per1.info();
per2.info();
System.out.println("---------修改之後---------");
PersonE.setCountry("B城");
per1.info();
per2.info();
}
}
6.修饰词final
java中引入了final关键字,这个关键字在c/c++中没有,另外java中不再有const关键字,虽然const仍旧是java中的保留字,但是java并没有实现它1.final变量:
final修饰变量时有两层意思:
1>:
表示一个编译期间的常量(c++中用const来实现)
2>:
表示一个变量一旦初始化了,其值便不能改变了
1、final变量(常量)
final修饰的变量有三种:
静态变量、实例变量和局部变量,分别表示三种类型的常量。
一旦给final变量初值后,值就不能再改变了。
final修饰的是内部类型的时候,表示其值无法改变,但是当final修饰的是一个用户定义的类型的引用时,final的意思略有不同,它表示该变量不能再引用别的对象,但是被引用的对象是可以改变的!
另外可以有frankfinal变量(空白final),及定义该final变量的时候可以不给出初始值,但必须保证其值在使用之前初始化,但是,final空白在final关键字final的使用上提供了更大的灵活性,为此,一个类中的final数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。
另外也可以有static的final变量,这个时候它占据一个无法修改的内存!
另外不能有空白的staticfinal变量,在定义的时候必须给出其初值!
对于final变量java解释器都不提供初值!
2.final方法
final方法的表示该方法在包含该方法的类被继承时候,该方法不能被覆盖,另外private方法也默认为final的.如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
使用final方法的原因有二:
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。
编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
3.final类
如果final修饰一个类的时候,表示这个类不能被继承,final类中的变量可以选择是否为final变量,final类的成员方法没有机会被覆盖.但是其中的方法都默认为final的。
在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。
4、final参数
当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 java 访问 修饰 权限