Java的关键字

访问控制:private 、protected、public

序号范围privatedefaultprotectedpublic
1本类访问
2同一包下的不同类访问×
3不同包下的子类访问××
4不同包下的非子类 访问×××

private:private修饰的变量和方法只能在本类中访问
default:如果一个类的方法和变量,不使用private,protected,public 修饰,则可以在同一个包下的不同类访问这个类的实例方法和变量
protected:如果一个类的方法和变量,使用protected的修饰,则可以在本类、同一包下的不同类、不同包下的子类内部使用,但是在不同包下创建的子类实例是不能调用protected修饰的方法和变量的

父类,包demo.demo1

package demo.demo1;

public class DemoProtecedParent {
    protected Integer a;

    protected String getSay(String name){
        return name;
    }
}

子类在demo.demo2包下,在子类内部调用父类的protected方法

package demo.demo2;

import demo.demo1.DemoProtecedParent;

public class DemoProtectedChild extends DemoProtecedParent {
    public static void main(String[] args) {
        DemoProtectedChild demoProtectedChild = new DemoProtectedChild();
        demoProtectedChild.getSay("只能在自己子类内部使用");
        Integer a = demoProtectedChild.a;
    }
}

子类在demo.demo2包下,即不同包下的非子类 ,不能调用子类继承至父类的getSay方法和 a 属性,编译报错

package demo.demo2;

public class Demo2 {
    public static void main(String[] args) {
        DemoProtectedChild child = new DemoProtectedChild();
        Integer a = child.a;  //编译报错
        child.getSay("不同包下不同类,不能调用子类实例的getSay方法");
    }
}

public:public修饰的变量和方法,其他类可以通过该实例对象调用public方法

同步变量:volatile

volatile关键字用于表示可以被多个线程异步修改的成员变量。
volatile的目标用途是为了确保所有线程所看到的指定变量的值都是相同的。

调用外部语言:native

native关键字可以应用于方法,以指示该方法是用Java以外的语言实现的。
Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。

可以将native方法比作Java程序同C程序的接口,其实现步骤:

1、在Java中声明native()方法,然后编译;

2、用javah产生一个.h文件;

3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);

4、将第三步的.cpp文件编译成动态链接库文件;

5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。

transient:非序列化

transient 关键字可以应用于类的成员变量,以便指出该成员变量不应在包含它的类实例已序列化时被序列化。

当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。

Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。
transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。

延伸一下序列化
1、序列化是干什么的?

简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。

2、什么情况下需要序列化

a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;

final 最终、不可改变

final 关键字可以应用于类,以指示不能扩展该类(不能有子类)。final 关键字可以应用于方法,以指示在子类中不能重写此方法。一个类不能同时是 abstract 又是 final。abstract 意味着必须扩展类,final 意味着不能扩展类。一个方法不能同时是 abstract 又是 final。abstract 意味着必须重写方法,final 意味着不能重写方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值