修饰符

类修饰符

类修饰符只能是public、abstract、final或默认的(friendly),注意,friendly只是默认的,什么都不写即可,不能直接写上friendly,否则编译报错。

访问修饰符:

1、public:公共类,可以被任何对象访问。

2、friendly:默认的,相同包下的对象才能访问。

修饰符:

3、abstract:抽象类,没有实现的方法,需要子类提供方法实现。类中只要有一个抽象方法,就必须定义为抽象类,但是抽象类中不一定必须有抽象方法。

4、final:最终类(非继承类),不能被其他类继承。如果类被声明为final,则表示类不能被继承,也就是说不能有子类。所以final类不能被声明为abstract抽象类。即final关键字和abstract关键字不能同时使用。

成员变量修饰符:

访问修饰符:

1、public:方法为公共的,所有对象都可访问。

2、private:私有的,只允许自己的类访问,其他任何类(包括子类)都不能访问。

3、protected:保护的,只允许自己的类和子类以及同一个包内的类访问,子类中可以覆盖此变量,若子类没有在同一个包下,也可以访问。

4、friendly:默认的(友好的),同一个包内对象可以访问,其他包中类不能访问。即使是子类,若没有在同一个包下,也不可以访问。

修饰符:

5、final:最终修饰符,此变量值不能变。

6、static:静态修饰符,变量被所有对象共享,所有实例都可以使用该变量,变量属于这个类。(静态变量和transient一样,都不可以被序列化)。

7、transient:过度修饰符,变量是系统保留的,暂无特别作用的临时性变量。告诉编译器,在类的对象序列化时,此变量不需要持久保存。(只能修饰变量,不能修饰方法和类)

一个对象只要实现了Serilizable接口就可以被序列化(序列化是指将对象转换为可以存储或者传输的形式),但是有时候有些属性不希望被序列化,比如银行卡账户,密码等信息,这时,只要将相应的属性定义为transient即可,例如:

定义一个user类(此类必须实现Serializable接口,否则不能序列化),将对象信息输出到文件中:

user u = new user();
		u.setUsername("fengxiaotao");
		u.setPassword("123456");
ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("F:\\a\\user.txt"));
			out.writeObject(u);
			out.flush();
	out.close();

这时可以将对象的账号和密码都输出,但是如果将password属性定义为transient,则password字段不会被传输到文件中:


ObjectInputStream in = new ObjectInputStream(new FileInputStream("F:\\a\\user.txt"));
			user u2 =(user) in.readObject();
			System.out.println(u2.getUsername());
	System.out.println(u2.getPassword());

输出为:

fengxiaotao

null

     可见,反序列化时,没有从文件中获取到相应信息。如果username被static修饰,那么username也不可以被序列化,因为静态变量不管是否被transient修饰,都不可以被序列化。

说明:

若实现的不是Serializable接口,而是Externalizable接口,则默认所有属性都不可以序列化,与是否被transient修饰无关,需要在writeExternal方法中指定需要序列化的变量。

volatile:易失修饰符,变量可以同时被几个线程控制和修改。

方法修饰符:

访问修饰符:

1、public:公共控制符

2、private:私有方法,只有自己的类能访问,其他类(包括子类)不可以访问。

3、protected:保护访问控制符,只可以被自己的类和子类以及同一个包内的对象访问,若子类没有在同一个包下,也可以访问。

4、friendly:缺省的,同一个包下才能访问。

修饰符:

5、final:该方法不能被重载。

6、static:该方法不需要实例化就可以使用

7、synchronize:同步修饰符,多线程中使用,运行前对方法加锁,运行后解锁。

8、native:本地修饰符,指该方法的方法体由其他语言在程序外实现。

 

特殊修饰符:

1、    static

例如类user中有

普通变量public Stringname="fxt";

和静态变量:publicstatic String pass="123";

a)      static静态变量:

其他类访问静态变量时,不需要实例化那个类,就可以直接使用,例如user.pass,而普通变量需要实例化后使用:user u = new user();  u.name。

并且当本类中要使用某变量时,如果是普通变量,不能直接使用,需要实例化,而静态变量则可以直接使用。

b)      static静态方法:

静态方法和静态变量类似,也是可以不实例化类就可以直接使用。

c)      static静态块

 static {

      System.out.println("fxt");

}

当类加载时,类中静态块中的内容就会执行,例如实例化这个类:user u= new user();就会执行输出”fxt”内容的代码。

类加载说明:程序若要运行,首先要将代码加载到内存中,然后才能与CPU交互,Java中.class文件若要执行,首先要加载到内存,这一步就是类加载。当需要创建对象时new user(),首先要类加载,才能new对象,静态代码块在类加载时会被加载,然后整个应用程序的生命周期中不会再次被加载,所以也说明了静态块就执行一次,不会执行第二遍。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值