二、基础语法-标识符和关键字(阶段二)
一、标识符
Java遵守“驼峰命名”法则。骆驼式命名法就是当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母,例如:myFirstName、myLastName,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。
二、关键字
- 关键字:被java语言赋予特定含义的单词
- 关键词特点:组成关键字的字母全部小写
- 注意事项:goto和const 为保留字,目前并不使用
continue关键字和break关键字
continue关键字
使用地方:continue关键字只能用于循环结构。
作用: 跳过本次循环,重新开始下一趟循环。
例子:
public class HelloWorld {
public static void main(String[] args) {
//打印单数
for (int j = 0; j < 10; j++) {
if(0==j%2)
continue; //如果是双数,后面的代码不执行,直接进行下一次循环
System.out.println(j);
}
}
}
打印结果是:1 3 5 7 9。
break关键字
使用地方:用于switch结构和循环结构
作用:
1.如果用于switch结构,跳出当前的case语句
2.如果用于循环结构中,跳出当前循环结构。
例子:
public class HelloWorld {
public static void main(String[] args) {
//打印单数
for (int j = 0; j < 10; j++) {
if(0==j%2)
break; //如果是双数,直接结束循环
System.out.println(j);
}
}
}
打印结果是:什么都不打印
this关键字
this关键字代表对象自身,如果new了一个对象之后,则这个this就是一个指向这个对象自己的一个引用,如下图:
根据上述描述,我们知道this是用于在方法内部获取当前对象的引用的关键字,其用法与其他引用并无不同。
用途:
- this调用本类中的属性,也就是类中的成员变量
- this调用本类中的其他方法;
- this调用本类中的其他构造方法,调用时要放在构造方法的首行。
这几点都非常好理解,因为指向的是对象自身,能操作的自然都是成员变量以及类的方法。有了这些知识之后,我们再来看一个java代码里经常看到的构造方法写法:
public class Test{
private String s;
public Test(String s){
this.s = s;
}
}
初学者常常对这里有两个s感到困惑,现在我们就知道了,等号左边的this.s获取的是当前对象即外部的s字符串,而等号右边的s则必然是括号里的参数,因此这就把括号里的参数赋值给了成员变量s。this常常用于这种成员变量名字和方法参数一样的情形。
最后,我们来扩展一点题外话,关于static关键字。理解了this关键字之后,static关键字就能更加全面的被理解。static方法就是没有this的方法。注意这里需要仔细理解这个没有的意思。为什么说没有,是因为在static方法内部不能调用非static的方法,但反过来是可以的,且不需要创建对象。因此static方法很很像全局方法,关于static的用法,请参考另一篇单独的博客:[java] static关键字总结.
final关键字
final是java的一个关键字,他可以用于修饰类,方法,变量。此关键字的作用在于表明它所修饰的内容是不可改变的。
1 修饰变量
final顾名思义是最终的意思,他修饰变量意味着这个变量的值不能再更改。一个即是static又是final的常量会占据一段不能改变的内存空间。对于这样的常量,我们的命名规范是约定俗成的大写字母加下划线,如下:
private static final int TEST_FINAL = 1;
在修饰引用变量的时候,这个值是指的其引用不变,但引用的对象的内容是可变的。而在修饰基本变量如int时,则意味着这个基本类型的值不能改变。值得注意的是,final在修饰String类的对象时,其值和修饰基本变量类型是一样不能改变的。答案可以在这篇博客中找到:[Java] String类深度解析。这里不再展开。
2 修饰方法
final修饰的一个方法代表这个方法可以被继承,但是不可以被子类重写。一般对一个方法加上final关键字作为修饰,代表这个方法你认为不需要再重写和修改,而是想要确保在继承中方法的行为保持不变。
在过去,建议使用final 方法的另一个原因在于效率,final方法是在程序编译的时候就静态绑定了,但是在如今的jvm中这个速度已经可以忽略不计了。并且,也不再建议出于效率目的使用final。
此外,一个类中所有的private方法都是隐式的被指定为final 的。因此对private方法添加final关键字没有任何意义。private方法不能被取用,因此也无法覆盖。
3 修饰类
final类不能被继承,其修饰的类功能通常是完整的。
与finally区别?finally 通常用在异常处理中。异常处理可以参考这篇文章:java异常机制详解。
与finalize区别?finalize是在Object类中定义的方法,是在垃圾回收时虚拟机调用来终结对象的方法。
transient关键字
我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。
然而在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化,打个比方,如果一个用户有一些敏感信息(如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输,这些信息对应的变量就可以加上transient关键字。换句话说,这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。
总之,java 的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。关于此关键字需注意下面三点:
- 一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
- transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
- 被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
Super关键字
主要存在于子类方法中,用于指向子类对象中父类对象。其作用包括下面几种
- 访问父类的属性
- 访问父类的函数
- 访问父类的构造函数
return关键字
return 关键字在java里面有两方面用途:
- 指定一个方法返回什么值
- 退出当前方法,并返回指定的值
对于返回值为void的方法,我们可以不写return语句,原因在于结尾处会生成一个隐式的return。
instanceof关键字
Instanceof关键字的作用是返回一个布尔值,告诉我们一个对象是不是某个特定类的一个实例。例如:
if(x instanceof Dog){
}
即在判断x对象是不是Dog类的一个实例。
Instanceof关键字是RTTI,动态类型判断技术的其中一种表现形式。关于RTTI的更多内容,请参考这篇博客:[java] 反射和多态实现原理详解以及对比.