码迷,mamicode.com
首页 > 编程语言 > 详细

Java常见关键字解析

时间:2017-10-14 23:38:12      阅读:442      评论:0      收藏:0      [点我收藏+]

标签:middle   包括   数据类型   microsoft   stat   派生   set   改变   1.2   

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型的变量是被包括进去的。

Java常见关键字解析

标签:middle   包括   数据类型   microsoft   stat   派生   set   改变   1.2   

原文地址:http://www.cnblogs.com/0427mybirthday/p/7668902.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!