Java中类的一些基本概念

来源:互联网 发布:java工程师都要会什么 编辑:程序博客网 时间:2024/05/22 01:24

一、关于变量

  • 在类体中的变量定义部分所定义的变量称为类的成员变量,在方法体中定义的变量和方法的参数称为局部变量。成员变量在整个类内有效,局部变量只在定义它的方法内有效。定义类的成员变量时可赋初值,但对成员变量的操作只能在方法内进行。
  • 成员变量又分为实例成员变量(实例变量)和类成员变量(类变量)。如果成员变量的类型前面加上关键字static,则该成员变量称做类变量静态成员变量
  • 局部变量的名字与成员变量的名字相同时,则成员变量被隐藏。此时如果想在该方法中使用成员变量,必须使用关键字this
  • 通过new创建类对象时,实例变量被分配内存空间,且不同的实例变量将分配不同的内存空间。类中的成员变量为类变量时,则所有类对象的这个类变量都分配同一处内存,改变其中一个对象的这个类变量将会影响其他对象的这个类变量,即一个类所有的对象共享类变量。
  • 程序执行时,类的字节码加载到内存,如果该类没有创建对象,类的实例成员变量不会被分配内存。但类中的类变量在该类被加载到内存时就分配了内存空间。
  • 类变量的内存空间直到程序退出运行时才释放所占有的内存。
  • 类变量可通过类名加“.”直接访问,但实例变量必须通过实例名加“.”访问(因为程序加载时实例变量并未分配内存空间)。
  • 对于私有成员变量或方法(声明为private的),只有在本类中创建该类的对象时,这个对象才能访问自己的私有成员变量和类中的私有方法。
  • 对于共有成员变量和方法(声明为public的),可在另外的类中通过创建的对象进行访问。
  • 受保护的成员变量和方法(声明为protected的),可通过同一个包中的类创建对象进行引用。
  • 友好变量和方法(不用public,private,protected声明的),可通过同一个包中的类创建对象进行引用。
  • 如果一个成员变量声明为final,则它就是常量。
  • 如果子类想使用被子类隐藏了的父类的成员变量,可使用关键字super来引用。

      二、关于方法

    • Java语言中写一个方法和c语言中写一个函数完全类似。类中的方法可分为实例方法类方法(方法类型前面加关键字static)。
    • 方法重载是指一个类中可以有多个方法具有相同的名字,但方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。
    • 构造方法是一种特殊的方法,它的名字必须与它所在的类的名字完全相同,并且不返回任何数据类型,即它是void型的(void可以省略不写)。
    • 实例方法既能对类变量操作,也能对实例变量操作。而类方法(带static)只能对类变量进行操作。实例方法可以调用类方法,类方法不能调用实例方法。
    • 使用new运算符和类的构造方法为声明的对象分配内存,如果类中没有构造方法,系统会调用默认的构造方法(无参数的)。  
    • 当类的字节码文件加载到内存时,类中的类方法就分配了相应的入口地址,类方法可被该类创建的任何对象调用(可通过类名调用),类方法的入口地址直到程序退出才被取消。
    • 当类的字节码文件加载到内存时,类中的实例方法不会分配入口地址,当该类创建对象后才分配。实例方法可以被该类创建的任何对象调用。类所创建的所有对象的实例方法的入口地址相同,当所有的对象不存在时,实例方法的入口地址才被取消。
    • 无论是类方法或实例方法,当其被调用时,方法中的局部变量才被分配内存空间,方法调用完毕,局部变量即刻释放所占的内存。
    • this关键字可以出现在类的实例方法中,代表使用该方法的当前对象。
    • 如果一个方法声明为final,则这个方法不能被重写。
    • 如果一个类中含有abstract方法,那么这个类必须用abstrct来声明。
    • 子类不能继承父类的构造方法,如果子类要使用父类的构造方法,必须在子类的构造方法中使用(使用关键字super表示父类),且必须在第一条语句中使用。
    • 如果子类想使用被子类隐藏了的父类的方法,可使用关键字super来引用。

      三、关于类

    • 当前程序可调用当前包中的友好类(类声明前无public修饰的)。
    • 不能用protectedprivate来声明类。
    • 访问权限的级别从高到低排列:public,protected,友好的,private。
    • 关于类的继承子类和父类在同一个包中时,子类自然继承了其父类中不是private的成员变量和方法作为自己的成员变量和方法。如果子类和父类不在同一个包中,那么子类继承了父类的protected、public声明的成员变量和方法,不能继承父类的友好变量和友好方法。
    • 如果一个类的声明中没有使用extends关键字,这个类被系统默认为是Object的子类。Object是包java.lang中的类。
    • 如果一个类声明为final,则它不能被继承。
    • abstrct类不能用new运算创建对象,必须产生其子类,由子类创建对象。如果一个类是abstrct类的子类,由它必须具体实现父类的abstract方法。一个abstract类只关心它的子类是否具有某种功能,并不关心功能的具体行为,功能的具体行为由子类负责实现。
    • Java不支持多继承性,即一个类只能有一个父类。

      四、关于接口

    • 接口(interface)包含常量定义和方法定义两部分,接口体中只进行方法的声明,不提供方法的实现。
    • 一个类通过使用implements关键字声明自己使用的接口,多个接口名之间用逗号隔开。如“class A implements I1,I2”。
    • 如果一个类使用了某个接口,那么这个类必须实现该接口的所有方法。接口中的方法默认为public的。
    • 如果接口的方法返回的类型不是void的,则在类中实现该接口方法时,方法体中至少要有一个return语句。如果是void型的,类体可以无任何语句(只有“{ }”)。
    • 一个Java源文件就是由类和接口组成的。
    • 如果一个类没有实现接口中的所有方法,那么这个类必须是abstrct类。
    • public声明的接口可被所有的类使用,友好接口类(无public修饰)只能被同一个包中的类使用。
    • //转载自新浪博客

     

  • 原创粉丝点击