• Java常见关键字解析


    Java常见关键字解析

    Java关键字与保留字

      1,Java 关键字列表 (依字母排序 共50组):

       abstract, assert, boolean, break, byte, case, catch, char, class, const(保留关键字), continue, default, do, double, else, enum, extends, final, finally, float, for, goto(保留关键字), if, implements, import, instanceof, int, interface, long, native, new, package, private, protected, public, return, short, static, strictfp, super, switch, synchronized, this, throw, throws, transient, try, void, volatile, while

      2,保留字列表 (依字母排序 共14组),Java保留字是指现有Java版本尚未使用,但以后版本可能会作为关键字使用:true,false,null,byValue, cast, future, generic, inner, operator, outer, rest,var, goto (保留关键字) , const (保留关键字)

      3、goto和const是保留字也是关键字。

    java标识符

    标识符就是用于Java程序中变量,类,方法等命名的符号,
    1Java标识符只能由数字、字母、下划线_或$符号以及Unicode字符集组成
    [2]Java标识符必须以字母、下划线“_”或“$”符号以及Unicode字符集开头
    [3]Java标识符不可以是Java关键字、保留字(const、goto)和字面量(true、false、null)
    [4]Java标识符区分大小写,是大小写敏感的

    1、 构造器

    1、 this关键字

    this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。
    类方法不能用this调用。

    2、 static关键字

    static方法就是没有this的方法。
    在static方法内部不能调用非静态方法;而在非静态方法中是可以调用静态方法的,且可以在没有创建任何对象的前提下。
    static不能修饰成员变量,即static修饰字段的语句行不能出现在main方法及其它方法中。Java中静态变量只能在类主体中定义,不能在方法中定义。 静态变量属于类所有而不属于方法。

    2、 访问控制权限

     


     

     

    2.1、 private:你无法访问的

      只能当前类能够访问private修饰的变量或方法

    2.2、 default:包访问权限(默认default)

      同一个包内的所有类都可以访问没有修饰符(即默认)的变量或方法。即当前的包中的所有其他类对那个成员都有访问权限,但对于包之外的类,却是不能访问该成员的。

      取得对某成员访问权的途径有如下方式:

       1. 用public修饰成员,任何人在任何地方都有访问权限
       2. 不加访问权限修饰词,并将其他类放在同一包内
       3. 继承,继承来的类可以访问父类的public成员和protected成员
       4. 提供get和set方法,以读取和改变数值(JavaBeans的基本原理)

    2.3、 protected:继承访问权限

      基类的protected成员只有派生类能够访问(同一包内的其他类也可以访问)

    2.4、 public:接口访问权限

      所有的类都可以访问。对于接口来说只能使用public修饰。

    2.5、 类的访问权限

    为了控制某个类的访问权限

    1. 修饰词必须出现于class之前(默认修饰(去掉public)为包访问控制权限)
    2. 每个编译单元(文件)都只能有一个public类。
    3. public类的名称必须与含有该编译单元的文件名相同(包括大小写)
    4. 编译单元内完全不带public修饰也有可能。在这种情况下可以随便对文件命名。

    注意

    1. 类不可以是private,及protected的。只能是public或默认包访问权限。(实际上内部类可以使private或protected,但这是一个特例)

    2. 如果不希望其他任何人对该类有访问权限,可以把所有的构造器都指定为private,从而阻止任何人创建该类的对象。

      在这种情况下可以在该类的static成员内部创建,例如:

    		//第一种方式
    			class Soup1{
    				private Soup1(){
    				}
    				public static Soup1 makeSoup(){
    					return new Soup1();     //通过静态成员创建该类的对象
    				}
    			}
    		//第二种方式(用到了设计模式-单例模式)
    			class Soup2{
    				private Soup2(){
    				}
    				private static Soup2 ps1 = new Soup2();
    
    				public static Soup2 acess(){
    					return new Soup1();     //通过静态成员创建该类的对象
    				}
    				pubblic void f(){
    
    				}
    			}
    

    3、 final关键字

    3.1、 final数据

    1、 final关键字可以用于成员变量、本地变量、方法以及类。
    2、 final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误。
    3、 你不能够对final变量再次赋值。
    4、 本地变量必须在声明时赋值。
    5、 在匿名类中所有变量都必须是final变量。
    6、 final方法不能被重写。
    7、 final类不能被继承。
    8、 没有在声明时初始化final变量的称为空白final变量(blank final variable),它们必须在构造器中初始化,或者调用this()初始化。不这么做的话,编译器会报错“final变量(变量名)需要进行初始化”。

    final+基本数据类型:在Java中对基本数据类型用final修饰表示这类变量可在编译时执行计算式,减轻运行负担,但在定义时必须对其进行赋值。

    final+static+基本类型数据:即编译期常量,只占据一段不能改变的存储空间。将用大写表示,并使下划线分隔各个单词。

    final+对象或数组(数组也是一个对象):final使引用恒定不变。一旦引用被初始化指向一个对象,就无法把它改为指向另一个对象。但对象自身是可变的。

    注意:不能因为某个数据是final的就认为它在程序编译完成时就知道他的值了,也可能实在程序执行运行时才知道他的值的。例如private final value = rand.nextInt(20),在编译完成时并不知道value的值,在程序执行运行后才知道它的值的。

    空白final:例如private final int num;
    final在使用时一般在定义处赋值,而对于这种空白final定义类型没有在定义处赋值就必须在构造器中赋值。

    final参数:当final用来修饰参数时,
    若修饰的参数为基本类型参数(final int i),则基本类型的值不能被改变,即只能读不能执行i++,i--等改变i的值的操作。否则不能编译。
    若修饰的参数为对象(final Car car)时,不能更改指向的对象的参数引用;如car = new Car()就是错误的用法。

    3.2、 final方法

    final修饰的方法,无法被覆盖。
    注意:其实类中的所有private方法都隐式地指定为final的。所以private final void f() 这种写法编译器不会不报错的。 由于private修饰的方法子类是访问不到的,子类更加不可能去覆盖了,所以与final修饰的方法无法被覆盖并不冲突。

    3.3、 final类

    final修饰的类不能被继承。
    final修饰的类中的类成员跟普通的类的类成员没有区别;但是final类中的方法都是隐式指定为final类型的

    String

    String str1 = "hello";
    String str2 = "he" + new String("llo");
    System.err.println(str1 == str2);
    

    String str1 = "hello";这里的str1指的是方法区的字符串常量池中的“hello”,编译时期就知道的; String str2 = "he" + new String("llo");这里的str2必须在运行时才知道str2是什么,所以它是指向的是堆里定义的字符串“hello”,所以这两个引用是不一样的。
    如果用str1.equal(str2),那么返回的是True;因为两个字符串的内容一样。

    instanceof

    o instanceof Class 若instanceof左边的参数为null,则返回FALSE。

    transient

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

  • 相关阅读:
    PHP抓取页面的几种方式
    MySQL性能优化的最佳20+条经验
    linux下导入、导出mysql数据库命令
    8个必备的PHP功能开发
    jquery中的children()和contents()的区别
    centos 通用开发工具及库安装 有了它不用愁了
    将bat批处理文件注册成windows服务
    squid隐藏squid的版本号
    squid如何屏蔽User-Agent为空的请求
    RHEL/CentOS 6.x使用EPEL6与remi的yum源安装MySQL 5.5.x
  • 原文地址:https://www.cnblogs.com/0427mybirthday/p/7668902.html
Copyright © 2020-2023  润新知