关键字mubu关键字
- break、continue、return
- break
- 直接强行跳出当前循环,不再执行剩余代码。
- 当循环中遇到break语句时,忽略循环体中任何其他语句和循环条件测试,程序控制在循环体后面的语句重新开始。所以,当多层循环嵌套,并且break语句出现在嵌套循环中的内层循环时,它将仅仅只是终止了内层循环的执行,而不影响外层循环的执行。
- continue
- 用于停止当次循环,回到循环起始处,进入下一次循环操作。简单来说,continue只是中断一次循环的执行而已。
- return
- return语句是一个跳转语句,用来表示从一个方法返回,使程序控制返回到调用该方法的地方。
- break只能跳出当前的循环,如何才能跳出多重循环呢?
- 可以在多重循环的外边定义一个标识,然后在循环体里使用带有标识的break语句,这样即可跳出多重循环。
- break
- final、finally和finalize的区别
- final用于声明属性、方法和类。
- final属性:
- final指的是引用的不可变性,即它只能指向初始化时指向的那个对象,而不关心执行对象内容的变化。
- 被final修饰的变量必须被初始化。
- 初始化方式
- 定义的时候初始化;
- final成员变量可以在初始化块中初始化,但不可在静态初始化块中初始化;
- 静态final成员变量可以在静态快中初始化,但不可在初始化快中初始化
- 在类的构造器中初始化,但静态final成员变量不可在构造函数中初始化。
- 初始化方式
- final方法:
- 当一个方法声明为final时,该方法不允许任何子类重写这个方法,但子类仍然可以使用这个方法。
- 还有一种被称为inline(内联)的机制,当调用一个被声明为final的方法时,直接将方法主体插入到调用处,而不是进行方法调用,这样能提高程序的效率。
- final类:
- 该类不能被继承,所有方法都不能被重写。但这并不表示final类的成员变量也是不可改变的,要想做到final类的成员变量不可改变,必须给成员变量增加final修饰。
- 一个类不能既被生命为abstract,又被声明为final。
- final属性:
- finally作为异常处理的一部分,它只能在try/catch语句中,并且附带一个语句块,表示这段语句最终一定被执行,经常被用在释放资源的情况下。
- finalize
- 它是Object类的一个方法,在垃圾回收器执行时会调用被回收对象的finalize()方法,可以覆盖此方法来实现对其他资源的回收,例如关闭文件。
- 一旦垃圾回收器准备好释放对象占用的空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。
- JDK中哪些类是不能继承的?
- 用final关键字修饰的类
- String、StringBuffer等都是基本类型,所以是不能继承的。
- final用于声明属性、方法和类。
- assert作用
- assert断言,提供了一种在代码中进行正确性检查的机制。
- 主要作用是对一个Boolean表达式进行检查,一个 正确运行的程序必须保证这个Boolean表达式的值为TRUE,若为FALSE,则说明程序已经处于不正确的状态,系统需要提供告警信息并退出程序。
- 实际开发中,assert主要用来保证程序的正确性,通常在程序开发和测试时使用。
- 为了提高程序运行的效率,在软件发布后,assert检查默认是关闭的。
- assert表达式
- assert expression1
- assert expression1:expression2
- expression1 表示一个Boolean表达式,expression2表示一个基本类型或者是一个对象
- 基本类型包括:Boolean、char、double、float、int、long
- assert应用范围
- 检查控制流
- 检查输入参数是否有效
- 检查函数结果是否有效
- 检查程序不变量
- assert一般在调试程序时使用。
- if判断是逻辑判断,本身就是来控制程序流程的。
- Java语言中使用assert去实现其功能,而C语言中使用的是库函数。
- Java语言中的assert是在运行时开启,而C 语言是在编译时开启。
- static作用
- ①为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关;
- ②在不创建对象的情况下就可以通过类来直接调用方法或使用类的属性。
- static有4种情况
- static成员变量
- Java中没有全局的概念,但可以通过static关键字来达到全局的效果。
- Java中两种类型的变量
- 静态变量static修饰:
- 静态变量属于类,在内存中只有一个复制(所有实例都指向同一个内存地址),只要静态变量所在的类被加载,这个静态变量就会被分配空间,就可使用该变量。【被类拥有,所有对象共享这个变量】
- 对静态变量的引用有两种方式:类.静态变量 和 对象.静态变量
- 实例变量无static:
- 实例变量属于对象,只有对象被创建后,实例变量才会被分配空间,才能被使用,它在内存中存在多个复制。【与具体的对象相关】
- 引用方法: 对象.实力变量
- 在Java语言中,不能在方法体中定义static变量。
- 静态变量static修饰:
- static成员方法
- static方法中不能使用this和super关键字,不能调用非static方法
- 只能访问所属类的静态成员变量和成员方法。因为当static方法被调用时,这个类的对象可能还没被创建,即使已经被创建了,也无法确定调用哪个对象的方法。
- static::实现单例模式。
- 单例模式的特点是该类只能有一个实例,为了实现这一功能,必须隐藏类的构造函数,即声明为private,并提供一个创建对象的方法。由于构造对象被声明为private,外界无法直接创建这个类型的对象,只能通过该类提供的方法来获取类的对象,要达到这样的目的只能把创建的方法生命为private。
- static代码块
- static代码块在类中独立于成员变量和成员函数的代码块
- 他不在任何一个方法体中,JVM在加载类时会执行static代码块,若有多个,则顺序执行。
- static代码块经常被用于初始化静态变量。
- static只会被执行一次。
- static内部类
- 他可以不依赖于外部类实例化对象而被实例化,而通常的内部类需要在外部类实例化后才能实例化。
- 静态内部类不能与外部类有相同的名字,不能访问外部类的普通成员变量,只能访问外部类的静态成员变量和方法(包括私有类型)。
- 注意:::只有内部类才能被定义为static。
- static成员变量
- static和final结合使用 static final
- 对于变量:则表示一旦赋值,就不可修改,并且通过类名可以访问;
- 对于方法:表示该方法不可覆盖,并且可以通过类名直接访问。
- Java语言中,不能在成员函数内部定义static变量,否则会编译失败。
- switch注意事项
- 在使用switch(expr)中,expr只能是枚举常量或一个整数表达式。
- long、float、double、String类型不能够隐式地转换为int类型,因为不能被用作switch的表达式,如果一定要使用,必须将其强制转换为int型才可以。
- case语句之后可以是①直接的常量数值 或 ②一个常量计算式 或③ final型的变量(final变量必须是编译时常量),但不能是变量或者带有变量的表达式。④当然更不能是浮点类型。
- 在Java7中,switch开始支持String类型。
- 在使用switch时,一般在case语句结尾添加break语句。
- 因为一旦通过switch语句确定了入口点,就会顺序执行后面的代码,直到遇到关键字break。否则,会执行满足这个case后的其他case的语句而不管case是否匹配,直到switch结束或者遇到break为止。
- volatile关键字
- volatile是一个类型修饰符,他是被设计用来修饰 被不同线程访问和修改的变量。被volatile定义的变量,系统每次用到它时都是直接从对应的内存中提取,而不会利用缓存。在使用了volatile修饰成员变量后,所有线程在任何时候所看到变量的值都是相同的。
- 由于volatile不能保证操作的原子性,因此,一般情况下volatile不能代替sychronized。
- volatile会阻止编译器对代码的优化,因此会降低程序的执行效率。
- 能不用volatile就不要用volatile。
- instanceof作用
- 它是一个二元运算符,作用是判断一个引用类型的变量所指向的对象是否是一个类(或接口、抽象类、父类)的实例,即它左边的对象是否是它右边的类的实例,,该运算符返回Boolean数据。
- strictfp作用
- 是strict float point 的缩写,指的是精确浮点,它用来确保浮点数运算的准确性。
- JVM在执行浮点运算时,若无strictfp,计算结果可能会不准确,而且计算结果在不同平台会不一样。
- 一旦用strictfp来声明一个类】接口或者方法,在声明的范围内,所有浮点数计算都是精确的。
- 当一个类被strictfp修饰,所有的方法都会自动被strictfp修饰。
- strictfp可以保证浮点数运算的精确性,而且在不同的硬件平台上会有一致的运行结果。