描述对象

创建变量

  变量的访问限制有public、protected或private,后两者提供了更严格的访问限制;

  protected变量只能在其所有的类、该类的子类以及同一个包(package)的其中使用。包是一组用于完成相同目标的相关类。通过在JAVA程序中使用import和*,如import java.util*,就可以在程序中很容易地引用包中的所有类。

  private变量的访问限制比protected变量更严格,只能在其所属的类中使用。除非对变量做任何修改都不会影响类的功能,否则应将变量声明为private或protected

  还有一种访问控制类型:创建变量时不指定public、private或protected。没有设置访问控制时,变量只能在同一个包的类中使用。这被称为默认访问控制或包访问控制

创建变量

  有时属性与整个类而不是特定对象相关联,它们称之为类变量。而且整个类只有该变量的一个拷贝。

  创建类变量时指定使用关键字static。如static int virusCount = 0;

  修改类变量的方法与修改对象变量完全相同。如果有一个名为tuberculosis的Virus对象,可以使用下面的语句来修改类变量virusCount:

  tuberculosis.virusCount++;

  由于类变量用于整个类而不是特定对象,因此可以直接使用类名:

  Virus.virusCount++;

  这两条语句完相同的工作,但处理类变量时使用类名有个优点,即表明virusCount是个类变量而不是对象变量。如果处理类变量时使用对象名,在不仔细查看类的源代码的情况下,将无法确定是类变量还是对象变量。

  类变量也称为静态变量。

  警告:

    尽管类变量很有用,但是也不要过度使用它。因为这些变量在类运行之时就会一直存在。如果类变量中存储的是一个大型的对象数组,则会占据很大的一块内存,而且不会将其释放掉。

用方法来创建行为

  属性用于记录有关对象类的信息,但是要让类实现它的目的,必须创建行为。行为描述了类中完成特定任务的不同部分,每一部分都称为方法。

  声明方法

    创建方法的语句与创建类的语句有点类似,它们都可以在名称后面的括号中指定参数,都使用大括号"{"和"}"指示开始和结束。不同之处在于,方法可以在执行完毕后返回一个值,返回值可以是简单类型(如整数或布尔值),也可以是对象。

    public boolean infectFile(String filename) {
        boolean success = false;
        return success;
    }

  上述方法,返回值为boolean,如果方法不应该返回值,则方法名前面使用void关键字。

  当方法返回值时,可以将方法用于表达式中,也可用于程序中任何可以使用变量的地方。

  参数不同的类似方法

    在类中,不同的方法有不同的名称,但如果接受不同的参数,方法也可以同名。

    如果两个方法接受的参数数量不同或参数类型不同,它们可以同名。

    传递给方法的参数称为方法签名。

  构造函数

    在程序中创建对象时,使用关键字new。使用关键字new时,将调用类的一个特殊方法,该方法称为构造函数,因为它处理创建对象所需做工作。构告这函数用于设置对象正常工作所需的变量及方法。

    与其他方法类似,通过使用不同的参数,可以在同一个类中定义多个构造函数。

    警告:

      如果超类中定义了带有一个或多个参数的构造函数,则类不再从其超类中继承无参数的构造函数。出于这个原因,当你的类有其他构告这函数时,你必须总是定义一个无参数的构造函数。

  类方法

      与类变量相似,类方法提供与整个类而不是特定对象相关联的方法。当方法不影响单个对象时,将其声明为类方法。

      要将方法声明为类方法,在方法名前使用关键字static

  方法中变量的作用域

    当在类的方法中创建变量或对象时,它们只在该方法内可用。

    程序中的大括号"{"和"}"定义变量了的作用域。在大括号内创建的任何变量不能在大括号外使用

    作用域规则使程序更容易调试,因为作用域限制了变量的使用区域,这避免了在其他编程语言中最常见的一种错误:在程序的不同部分以不同的方式使用相同的变量。

  将一个类放在另一个类中

    虽然JAVA程序也称为类,但很多时候一个程序需要多个类才能完成其工作。包含多个类的程序有一个主类和任意数目的辅助类组成。

    将程序分成多个类时,有两种方法可用于定义辅助类

 1 public class Wrecker {
 2     String author = "Ignoto";
 3     
 4     public void infectFile() {
 5         VirusCode vic = new VirusCode(1024);
 6         System.out.println(vic.vSize);
 7     }
 8 }
 9 
10 
11 class VirusCode{
12     int vSize;
13     
14     VirusCode(int size) {
15         vSize = size;
16     }
17 }

  通常在同一个源代码文件中定义辅助类,因为它们用于辅助目的。源文件编译后,将生成多个类文件。

  警告:

    如果在同一个源文件中定义了多个类,只能有一个类为public,其他类在它们的类语句中不能指定为public。另外,源代码文件的名称应与它定义的public类的名称匹配。

  创建一个主类和一个辅助类时,也可以将辅助类放在主类中。在这种情况下,辅助类称为内部类。内部类放在另一个类的左大括号和右大括号之间。

  

 1 public class Wrecker {
 2     String author = "Ignoto";
 3     
 4     public void infectFile() {
 5         VirusCode vic = new VirusCode(1024);
 6         System.out.println(vic.vSize);
 7     }
 8     //内部类
 9     class VirusCode{
10         int vSize;
11         
12         VirusCode(int size) {
13             vSize = size;
14         }
15     }
16 }
View Code

  内部类的使用方法与其他辅助类相同,主要差别(除位置外)出现在编译之后。内部类没有使用class语句来指定名称,而是名称中包含了主类的名称。在上一个示例中,编译器将生成Wreaker.class和Wreaker$VirusCode.class。

使用关键字this

  由于可以同时引用其他类的变量和方法以及当前类的变量和方法,所以有时候引用的变量将不清楚。为了使变量引用更清晰,一种解决办法是使用关键字this,它引用程序本身的对象。

  使用对象的方法或变量时,将对象名放在变量名或方法名之前,并用句点隔开。

  通过使用this,可以明确地指出要引用的变量或方法。在类中,可以this代替对象名。

  在很多情况下,无需使用this就能清晰地引用对象的变量或方法。然而,使用this确保引用明确也没有什么害处。

  当设置对象的变量值时,这个this关键字将在构造函数中发挥作用。

使用类方法和类变量

  使用类方法和类变量不必创建一个对象。

  由于类变量和类方法不与特定对象相关联,不需要仅为使用它们而创建对象。Integer.parseInt()方法的使用就是一个例子,你不需要为将字符串转换为整数而创建一个新的Integer对象。

  

原文地址:https://www.cnblogs.com/dulixiaoqiao/p/6416663.html