java的一些机制总结

本文介绍了Java中的关键概念,包括成员变量的默认值、静态成员的作用、继承设计准则、异常处理机制、final关键字的用途、接口与抽象类的区别以及内部类的特点等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本成员默认值:
若类的某个成员是基本数据类型,即使没有进行初始化,java也会确保它获得一个默认值。
当声明一个事物是Static时,就意味着这个数据或方法不会与包含它的那个类的任何对象实例关联在一起。


1.每个编译单元都只能有一个public类
2.public类的名称必须完全与含有该编译单元的文件名相匹配,包括大小写
3.虽然不常用,编译单元也可能完全不带public类,这种情况下,可以随意对文件命名

继承设计的通用准则:把数据都设成private,把方法都设成public的。

try表示下面这段程序(由花括号限定)是一个需要给予特殊关注的受保护的区域,也就是无论以何种方式退出try区块,都必须执行后面跟在这个受保护区域后面的finally子句。

 

final成员
当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变。其初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中。这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给另外的值。

另外方法中的内部类在用到方法中的参变量时,此参变也必须声明为final才可使用,如下代码所示:

public class INClass{
   void innerClass(final String str){
        class IClass{
            IClass(){
                System.out.println(str);
            }
        }
        IClass ic=new IClass();
    }
  public static void main(String[] args){
      INClass inc=new INClass();
      inc.innerClass("Hello");
  }
}

final类
当你将final用于类身上时,你就需要仔细考虑,因为一个final类是无法被任何人继承的,那也就意味着此类在一个继承树中是一个叶子类,并且此类的设计已被认为很完美而不需要进行修改或扩展。对于final类中的成员,你可以定义其为final,也可以不是final。而对于方法,由于所属类为final的关系,自然也就成了final型的。你也可以明确的给final类中的方法加上一个final,但这显然没有意义。

在继承的情况下,如果垃圾回收过程中还要作一些特殊的处理,那么必须在派生类重写基类的dispose(),也就是在编写派生类的dispose()的时候要记住的第一件事情就是调用基类的dispose(),因为如果不这样的话基类就不会得到清理.

构造函数唯一能安全调用的方法,就是基类的final方法,也适用于private方法,他们不会被覆写,因此不会产生意外的行为。

 

interface关键词进一步强化了abstract的概念,它能让开发人员定义类的形式:方法名,参数列表,返回值的类型,但是没有方法的正文。
如果你知道这样东西可能是基类的话,则优先考虑把它做成interface,只有在不得不定义方法或成员变量的情况下,你才能把它改成abstact类,或者根据需要改成实体类。

抽象类和接口类的区别:

1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。

2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。

3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。

4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

7.接口中的方法默认都是 public,abstract 类型的。


如果你在定义匿名内部类的时候,还要用到外面的对象,那么编译就会要求你把这个参数的reference声明成final的。
内部类会自动获得访问其宿主类成员的权限,也就是内部类中有一个指向"要负责创建它的"宿主类对象的reference。
嵌套类(将内部类定义为static):
1.无需宿主类的对象就能创建嵌套类的对象。
2.不能在嵌套类的对象里面访问非static的宿主类对象。
3.普通的内部类里面不能有static数据,static数据成员或嵌套类,而这些嵌套类里面都可以有。

 

内部类特性:
1.内部类可以有多个实例,而每个又都可以有它自己的,与宿主类对象无关的信息状态信息。
2.一个宿主类里面可以放上好几个内部类,他们可以用各自不同的方式来实现同一个interface或继承同一个类。
3.内部类对象创建的时机和宿主类对象的创建没有关系。
4.内部类不存在"是"的关系,它是一个独立的实体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值