您的位置:首页 > 编程语言 > Java开发

java关键字

2018-03-12 17:15 141 查看
1. static

1.static只能修饰 变量 和方法,表示该变量和方法属于类而不是实例。2.被static修饰的成员,建议只能由类去访问。3.static静态代码块内部 不能使用 this关键字,this是对实例的引用,static 方法禁用this关键字引用静态变量,要么不用,要么用类.静态变量。4.static属于类,在类加载时,static修饰的所有会随同加载。5.通过类访问静态成员,不会触发构造器6.static修饰的不能用super关键字,因为super是指向父类的对象,static是类所有的,不绑定对象7.static修饰的变量,存在线程安全问题2.final1.用于修饰类、变量和方法,被修饰的类、变量和方法表示不可改变,一旦被初始化,就不可改变2.final修饰的成员变量必须由程序员显示指定初始值。编译出错信息:The blank final field [变量名] may not have been initialized3. 类变量,1.声明该变量时指定初始值2.静态代码块中指定初始值。4.实例变量,1.声明该变量时指定初始值 2.构造器中指定初始值 3.非静态代码块。(注意,代码块会先于构造器执行)。5.局部变量,1.定义时指定初始值2.代码之后定义初始值。6.形参,不可改变。7.修饰基本数据类型和引用类型变量区别:基本类型一旦初始化,不可改变;修饰引用类型,只需保证这个引用类型变量所引用的地址不变,即一直引用同一个对象,至于对象内部怎么变不管。8.作用定义宏变量,将final变量 变为直接量,在解析期,进行变量引用替换。(基本算数表达、或者字符串连接)。



9. final 方法,对protected和public无法重写(protected,public修饰符可互换)。private毫无关系,因为子类根本不会继承。10.final 类,不可有子类,无法被继承。11.不可变类:8个包装类和String类均是不可变类,一旦创建实例后,实例变量不可变3.abstractabstract关键字,用来修饰类和方法1.有抽象方法的类只能是抽象类,抽样类可以无抽象方法。2.抽象方法无方法体,即{}。3.抽象类不能实例化,无法使用new 调用构造器实例化,报错:Cannot instantiate the type XXX4.抽象类,可以包含 成员变量、方法、(构造器、初始代码块,创建子类实例被调用)、内部类5.含有抽象方法的类(1.直接定义抽象方法2.继承抽样类,未完全实现抽象方法3.实现一个接口,未包含全部方法实现),可以被定义成抽象类6.发挥多态性,无须强制转换成子类7.abstract类,只能被继承;abstract方法,需要子类提供实现(重写)8.abstract 和static 无法同时修饰方法,但可以修饰内部类9.abstract 和final不能同时使用10.abstract  和private 不能同时修饰方法11.抽样类,模板模式的设计,避免子类设计随意性,代码重用。12.更高级的抽样类,及接口(interface),多个类共同的公共行为规范,包含成员变量(只能静态变量,不定义也会自动加入static final 关键字)、方法(只能是抽象实例方法、类方法、默认方法)、内部类(内部接口、枚举)13.接口和抽样类的比较1.相同点:1)都不能被实例化,只能被实现或者继承 2)都可以包含抽样方法2.不同点:1)接口体现的是一种规范,不应该也不应当经常变动 ;抽样类是一种模板,一种中间品,不完善,需要子类去完善这个父类  2)接口只能包含抽样方法、类方法和默认方法 3)接口只能定义静态变量4)接口不能包含构造器、初始代码块;抽样类中的构造器和初始代码块,是让子类调用构造器完成相关初始化的5)单继承、多实现工厂模式:面向接口编程,依赖接口,而不是具体的实现类,低耦合。工厂负责构建相关的具体类匿名内部类(java 8之前必须要求 手动加入final 修饰变量,8可以自动加入),如果被内部类使用后,试图更改该变量,报错:Local variable parameter defined in an enclosing scope must be final or effe
c2b1
ctively final


4.thisthis,对当前对象的地址引用。1. 引用当前对象的属性,常在set中使用


2.引用当前对象


3.构造器中引用其它构造器


4.引用当前对象方法


5.super、extendsextends,继承父类,构造器无法继承,一般和特殊的关系,继承成员变量和方法1.重写方法(override):两同两小一大原则,两同:方法名、形参列表相同;两小:子类返回类型、抛出异常比父类更小或者相等;一大,子类访问权限比父级大或者相同;覆盖的方法,必须要么都是类方法,要么都是实例方法2.重载(overload):方法名同,返回值或者形参不同指向自己超类(父类)对象的一个指针引用,主讲构造器引用父类没有显示构造无参构造器,而是复写一个带有参数的;子类构造器,默认会去加载父级的无参数构造器,若不指定,报错。解决:1.父级显示构造无参数构造器 2.子级无参数构造器引用 父级参数构造器 super(xxx) 3.子级构造参数构造器,引用 父级参数构造器 super(xxx)。


6.transient1.序列化对象时,不参与序列化的对象2.可以重写对象的writeObject 和readObject 方法,自定义序列化7. throw 与throws(check异常,要么抛出、要么try catch 捕获并处理)throws:声明抛出异常,只能在方法签名中使用,交由上一级调用者处理,声明的抛出异常,只能和上一级调用的异常相同或者更小


throw:主动自行抛出异常实例(人为观念定义的异常)8. finallyfinally 修饰的代码块不管是否出现异常,都会执行,主要用来释放资源jdk1.7后改进 catch,可catch多个用'|'分割,ex为final修饰;改进finally,try(定义 资源必须实现AutoCloseable、Closeable 两者任何一个接口)
9.nullnull是任何引用类型的默认值null值无法赋值为基本数据类型,报错:Type mismatch: cannot convert from null to int,可以使用它们的包装类null 对象可以调用类的静态方法,不可调用实例对象null 作为方法的传参10.nativeJNI:java native interface,java本地方法接口,,java代码 --->JNI---->c/c++方法native ,用java代码方法,调用非java方法1.编译java成 class2.生成头文件 h:源文件地址 javah -classpath class文件根地址 类全限定名默认位置当前位置


3.编写 .c文件4.生成dll共享库,java程序load库,5.调用native方法是由系统本身实现的,这也是java跨平台的一个原理,在不同平台调用不同的native方法11. volatile1.保证共享变量的可见性:任何线程读取变量时,必须清空自己的本地变量,强制从主内存中获取值;任何线程改写变量时,必须立即将变量同步到主内存2.干预指令重新排序3.无法保证对变量修改的原子性(1.synchronized修饰2.lock3.原子类对象)4.作用:1.状态标记量例如两个线程轮番交替打印


2.单例模式双检测


13. synchronizedsynchronized:互斥锁,当前仅有一个线程可对其进行操作。1.修饰实例方法,对this当前对象加锁关键字加在非静态方法,锁住的对象是该类的实例对象,不同实例之间互不影响






2.修饰类方法,对类对象进行锁定加在 static 方法,锁住的是类对象


3.一个对象锁,一个类锁,他俩不是一个锁,不会有影响,会有线程安全问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息