深入浅出谈java修饰符

深入浅出谈java修饰符

本文讲对java的类、类的方法和类的变量,做一个概括和详细描述它的作用。局部变量能有修饰符吗?其实是可以有的但是比较少,而且用次数也不多!下面是我收集java所有的修饰符,并对常用的修饰符比较全面的描述。

 

Java语言定义类的简单语法:

[修饰符]  class 类名{

       //public 和final可以同时存在,abstract不能和前面两个任意一个同时存在

       零到多个构造器定义;

       零到多个成员变量;

       零到多个方法;

}

 

Java定义方法的格式:

[修饰符]方法返回值类型方法名(形参列表){

 //由零条到多条可执行性语句组成的方法体

}

 

一、所有的修饰符:

1、访问范围修饰符:publicprotecteddefault(默认)、private

2、静态修饰符   static

3、最终修饰符   final

4、抽象修饰符   abstract

5、下面这四个修饰符,不应用在普通程序中,感兴趣的话,可以自己去了解,本文主要对上面的修饰符做总结

transient:即告诉编译器,在该类的对象进行序列化的时候,这个变量不需要持久保存。这么做的主要原因是这个变量可以通过其它的变量来获取,使用它主要是从性能的角度考虑。

volatile:指出可能有多个线程修改此变量,要求编译器优化以保证对此变量的修改能够被正确地处理。

native:用该修饰符修饰的方法在类中并没有实现,大多数情况下这类方法的实现是由CC++编写的。可以参见SunJava Native接口(JNI),JNI提供了运行时加载一个native方法的实现,并将其与一个Java类关联。

synchronized:多线程支持,当一个线程调用该方法时,就会为这个对象加一个锁,从而其它线程就不可以再次调用这个方法,直到前一个线程将其释放。

 

 

 

 

二、修饰符的应用:

 

类的修饰符
public     可以从其他类中访问
abstract  本类不能被实例化,不能有实例化对象
final       不能再声明子类,不能被继承,没有子类

 

类初始化模块的修饰符

只能用static修饰

类构造器(一种特殊的方法)的修饰符
public       可以从所有的类中访问
protected  只能从自己的类和它的子类中访问

default     这是默认模式(没有写范围修饰符的情况),不显示出来,也打不出来,在同一个包中可以访问
Private      只能在本类中访问

 

类成员的方法的修饰符
Public       可以从所有的类中访问它
Protected  只能从本类及其子类中访问它
Private     只能从本类中访问它
abstract    没有方法体,属于一个抽象类
final        子类不能覆盖它 
static       被绑定于类本身而不是类的实例

类成员的变量的修饰符

类成员里面的方法和变量其实是同一个级别的东西,修饰符基本相同,只有一个不同的,就是,类成员变量不能被abstract修饰,方法却可以。

 

方法内局部变量的修饰符
final    必须对它赋予初值并且不能修改它,一旦修改编译就报错

 

 

 

 

 

 

三、修饰符的详细解释:

 

1.访问范围修饰符

public  可以被任何类访问。

protected:可以被同一包中的所有类访问;也可以被子类访问,即使子类没有在同一包内

default (缺省时)无访问修饰符,可以被同一包中的所有类访问;如果子类没有在同一包中,不可访问

private 只能被当前类中的方法访问。

default修饰符是打不出来的,范围修饰符没写时,默认就是default


2.static修饰符:  
a.有时候程序员可能需要定义一个类成员,对它的使用不依赖于该类的任何对象,要创建这样的成员,成员的变量声明前必须加上关键字static。成员声明为static后,在创建该类的任何对象之前就可以访问它。
b.关键字static可应用于变量、方法,甚至不属于方法的一段代码块。生命静态类的对象时,不会生成静态变量副本。类的所有实例都共享一些静态变量 c.可以通过类名称来调用静态变量,也可以通过对类实例的引用来调用静态变量。但建议通过类名称来调用静态变量。
d.方法声明为静态时具有某些限制,具体如:>它们只能调用其他静态方法。 >它们必须只访问静态数据 >不能使用关键字thissuper

这里可以举个例子所以说一下:使用static修饰的类成员方法和变量,前后的变化:
用两个类来举例PeopleAPeopleB
没有使用static修饰情况:
Class PeopleA{
               int num=3
               void play(){
		//num=5;//会报错,提示要加static
               System.Out.printf”play”;
               }
}
在同一个包内的其他类方法里面,这种情况下项要访问类PeopleA里面的方法和变量可以用下面的代码:
PeopleA  p =new People();//创建类的实例化对象
Int  num= P.num;    //使用实例化对象获得数据
p.play();     //使用实例化对象调用方法
 
下面看看使用static修饰情况:
Class PeopleB{
               static int  num=3
               static void play(){
		num=5;//不会报错可以直接用
               System.Out.printf”play”;
               }
}
在同一个包内的其他类方法里面,这种情况下项要访问类PeopleB里面的方法和变量可以用下面的代码:
//不需要创建类的实例化对象,用类本身就可以调用
Int  num= PersonB.num;    //使用类本身获得数据
PersonB.play();     //使用类本身调用方法
//其实也可以用类实例化对象来访问上面的变量和方法,运行正常,但是会被编译器警告,不建议用
对比前面两种情况好像是有static的情况比较好用,但是也是有它的局限性的,而且占用内存多了些。
static定义一个变量,同一个类内的方法都可以直接使用它,而且它的值会保持在每个方法调用后变化的值,可以不断变化。
这也涉及到使用static的本质了,被static修饰的变量会共用一个地址,每次调用后都有可能改变,需要的话,后面的方法可以使用上次保存的这个变量的值。


3.final修饰符:
 afinal修饰符可应用于类、方法、和变量。final变量的内容不能更改。因此,声明final变量时,必须将其初始化
 b.声明为final的变量不会在每个实例中都占用内存,也就是说,可以认为final变量就是常量
c.通常的做法是为final变量选择大写的标识符。
 d.当关键字final应用于方法时,它意味着方法不能被重写。如果对象已声明为final,对该对象的引用则不能更改,但它的值可以更改。

4abstract修饰符:
 a.父类中的某些方法不包含任何逻辑,并且需要由子类重写。在这种情况下,应该使用关键字abstract来声明父类中的方法。
b.子类提供这种abstract这种方法的实现细节,而父类仅提供此方法的名称和声明,没有方法的主体。
c.任何一个或多个抽象方法的类也应该声明为抽象。
 d.要声明一个抽象类,在class关键字前应该加上abstract
e.抽象类不能被实例化。构造方法static类方法不能声明为abstractAbstract类的任何子类必须实现在父类中声明的所有abstract方法,否则子类必须声明为抽象类。
 fabstract类不能有对象,但它们可以用来创建对象的引用,因为Java运行时多态性是通过父类引用实现的。因此,对象可用来创建对抽象类的引用,抽象类可以指向子类的对象。
 g.如果方法定义为抽象,那么此方法所在的类也必须为抽象。


修饰符的使用也要避免冲突,比如表示范围的修饰符只能用一个,static和abstract也是相互冲突的,只能用一个,其实前后顺序倒是没有要求的,这个我试过,不过一般要把修饰范围的放在前面。


四、修饰符图解:


1、所有的修饰符




2、类的修饰符



3、局部变量和方法的修饰符



欢迎大家指导!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

峥嵘life

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值