`

Java 学习笔记

阅读更多

Java 关键字

 

        下面列出 Java 语言的关键字(Java Language Keywords),我们不能在 Java 程序中使用他们作为标志符。其中,const 和 goto 是作为保留关键字,尽管目前已经不使用这两个关键字了,还有 true 、false 和 null 看起来像关键字,实际上他们是字面值(literals),我们同样不能在 Java 程序中使用他们。

 

abstract continue for new switch
assert*** default goto* package synchronized
boolean do if private this
break double implements protected throw
byte else import public throws
case enum**** instanceof return transient
catch extends int short try
char final interface static void
class finally long strictfp** volatile
const* float native super while

*   not used
**   added in 1.2
***   added in 1.4
****   added in 5.0

 

this 关键字

 

        在实例方法(instance method )和构造方法(constructor)中, this 关键字表示当前对象的引用。你可以在实例方法和构造方法中调用任意的实例变量,注意你不能够在实例方法中调用类变量(class variable,即 static 修饰的字段)和类方法(class method,即 static 修饰的方法)。

 

        让我们来插入一段题外话,或许能帮助我们深入理解 this 关键字的本质。在《Java 编程思想》第三版有这样的陈述:

        如果有同一类型的两个对象,分别是 a 和 b。你可能想知道, 如何才能让这两个对象都能调用 f() 方法呢:

         

class Banana{void f(int i){/* ... */}} Banana a = new Banana(), b = new Banana(); a.f(1); b.f(2);

 

 

 

 

       

       如果只有一个 f() 方法,它如何知道是被 a 还是被 b 所调用的呢?

       

        为了能用简便、面向对象的语法来编写代码——即“发送消息给对象”,编译器做了一些幕后工作。它暗自把“所操作对象的引用”作为第一个参数传递给 f() 。所以上述两个方法的调用就变成了这样:

Banana.f(a, 1); Banana.f(b, 2);


        

         这是内部的表示形式,并不能这样书写代码,并试图通过编译;但这种写法的确能帮你了解实际所发生的事情。

 

         假设你希望在方法的内部获得对当前对象的引用。由于这个引用是由编译器“偷偷”传入的,所以没有标志符可用。但是,为此有个专门的关键字:this。 this 关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。this 的用法和其它对象引用并无不同。但要注意,如果在方法内部调用同一个类的另一个方法,就不必使用 this。直接调用即可。当前方法中的 this 引用会自动应用于同一类中的其它方法。……只有当需要明确指出对当前对象的引用时,才需要使用 this 关键字。

 

        this 关键字最常见的情况是在实例方法和构造方法的参数中用来“屏蔽”实例参数。我们来举个例子,你可以像下面这样来定义一个类 Point,

public class Point { public int x = 0; public int y = 0; //constructor public Point(int a, int b) { x = a; y = b; } }

 

 

 

 

 

但是你也可以像下面这样来定义类 Point,

public class Point { public int x = 0; //instance variable x public int y = 0; //instance variable y //constructor public Point(int x, int y) { //local variable x ; local variable y this.x = x; this.y = y; } }

 

 

 

 

  

第二种情况下,构造方法的参数 x, y 使用了和实例变量同样的名字,这样局部实例变量就屏蔽了实例参数 x, y, 这样命名的好处是参数的含义一目了然。然而想把这个局部变量赋给同名的实例变量就必须使用 this.x 和 this.y 这种形式。this 就表示当前的对象实例。

 

       this 关键字的另外一个用法就是在构造方法中调用另一个构造方法。

public class Rectangle { private int x, y; private int width, height; public Rectangle() { this(0, 0, 0, 0); } public Rectangle(int width, int height) { this(0, 0, width, height); } public Rectangle(int x, int y, int width, int height) { this.x = x; this.y = y; this.width = width; this.height = height; } ... }

 

 

 

 

 

 

super 关键字

 

        如果你的方法重写(override)了父类的方法,你可以通过 super 关键字来调用被重写那个方法。

 

        下面考虑这个类 Superclass

public class Superclass { public void printMethod() { System.out.println("Printed in Superclass."); } }

 

 

      

        下面是类 Superclass 的子类 Subclass

 

public class Subclass extends Superclass { public void printMethod() { //overrides printMethod in Superclass super.printMethod(); System.out.println("Printed in Subclass"); } public static void main(String[] args) { Subclass s = new Subclass(); s.printMethod(); } }

 

 

 

        super 关键字另一个常用的方式是在子类的构造方法总调用父类的构造函数。我们来看下面的一段程序:

public class SuperClass{ SuperClass(int i){ System.out.println("Super class  with parameter i"); } }

        下面是类 Superclass 的子类 Subclass

public class Subclass{ Subclass(){ super(1); //该调用是必须的,且必须放在其它语句之前 System.out.println("Subclass constructor"): } }


     这里需要注意的是,从另一方面讲(语法上),如果父类包含缺省的构造方法,子类没有调用 super 也是没有问题的,但是如果父类不包含确省的构造函数,子类构造函数必须通过 super 关键字调用父类构造函数,如若不然,子类实例无法创建,编译器会报错。

 

 

 

static 关键字

 

        static 关键字可以用来定义“类变量”,即用 static 修饰某个字段。 这样,不管创建多少个该类的实例,该类仅仅包含一份该“类变量”的拷贝。static 关键字也可以用来定义“类方法”,即用 static 修饰某个方法。“类方法”可以直接被类调用而无需创建类的实例,而且“类方法”仅能操作“类变量”。   

 

        被static 修饰的字段和方法之所以称之为“类变量”(class variable),“类方法”(class method),是因为这样数据和方法是作为整个类,而不是作为某个特定类的对象而存在的。

 

        “类变量”和“类方法”是类共享的内容,可以直接通过 类.字段 、类.方法 的方式直接调用,不用创建任何类的实例,也与包含它们的类的任何实例没有关联。而其它变量和方法是类实例各自独有的,要使用这些变量和方法一般必须先创建类的实例。正由于这个缘故,“类方法”不能直接使用非 static 修饰的字段和方法,在没有创建类实例之前,这些非 static 修饰的字段和方法相对 static 修饰的字段和方法来说是虚无的;那么那些非 static 修饰的字段和方法能够相互调用,是因为你在定义类时,只是在画图纸,是在描述和组织这个类的实例的外观和行为,另外非 static 修饰的方法能够调用static 修饰的字段和方法,因为他们是共享的,造出来就是供使用的。

 

         以上都是从表象来谈 static 的特性的,其实质是因为 static 修饰的字段和方法在类装载时就获得一份储存空间, 而其它非 static 修饰的字段和方法在类实例创建之前还没有分配存储空间,又如何访问,一旦类实例创建,该类实例就包含一份这些非 static 修饰的字段和方法的数据的存储空间,而且是该类实例私有的,也就是说每一个类实例都会创建一份非 static 修饰的字段和方法的存储空间,供自己使用。

 

 

 

 

 

 

参考资料:

1。官方文档 http://java.sun.com/docs

2。JAVA 核心技术 卷I、卷II 7th

3。Java 编程思想(Thinking in Java) 3th

分享到:
评论

相关推荐

    Java 学习笔记Java学习笔记

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。...Java学习笔记涵盖了这些核心知识点,通过深入学习和实践,你可以逐步掌握Java编程,并应用于实际项目开发中。

    Java学习笔记——良葛格

    "Java学习笔记——良葛格"是一份专为初学者设计的教程资料,由良葛格精心编写,旨在帮助读者掌握JDK5.0版本的Java基础知识。JDK(Java Development Kit)是Java开发的核心工具集,包含了编译器、调试器和运行环境等...

    java学习笔记1

    Java学习笔记1 Java学习笔记1是学习Java过程中的笔记,主要记录了Eclipse开发环境中的快捷键使用、编辑功能、查找和调试等知识点。 Eclipse快捷键 Eclipse中有许多快捷键,掌握这些快捷键可以大大提高开发效率。...

    (完整版)最全的java学习笔记(必看).pdf

    Java学习笔记 Java是一种流行的编程语言,广泛应用于Android应用程序开发、Web应用程序开发、桌面应用程序开发等领域。以下是Java学习笔记的摘要信息: 一、Java技术基础 * 1.1 编程语言:Java是一种面向对象的...

    JAVA学习笔记 林信良

    《JAVA学习笔记》是林信良先生的一部深入浅出的Java编程教程,旨在帮助初学者和有一定经验的开发者巩固和提升Java编程技能。这本书涵盖了Java语言的基础到高级概念,是一份宝贵的自学资料。 首先,从基础部分开始,...

    韩顺平编写的java学习笔记(全)

    ### 韩顺平编写的Java学习笔记概览 #### Java平台分类与运行机制 - **J2SE(Java 2 Platform, Standard Edition)**: 标准版Java开发平台,适用于桌面应用程序开发。 - **J2EE(Java 2 Platform, Enterprise ...

    Java学习笔记学习笔记

    Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...

    Java学习笔记(必看经典).pdf

    本知识点的标题为“Java学习笔记(必看经典)”,意味着所整理的内容是针对Java初学者的一系列核心概念和原理的总结。 首先,面向对象编程是Java语言的核心,它与传统的面向过程编程有显著的不同。面向对象编程强调的...

    java学习笔记(全)

    Java学习笔记全集是针对Java编程语言的一份详尽的学习资料,它涵盖了从基础到进阶的各个层面,旨在帮助初学者系统地学习Java,并为有一定经验的开发者提供复习和巩固知识的平台。这份笔记主要关注Java语言的核心概念...

    Java学习笔记(必看经典).doc

    这份“Java学习笔记(必看经典).doc”文档将涵盖Java的核心概念和重要知识点,对于初学者和有经验的开发者来说都是宝贵的参考资料。 首先,Java的基础部分通常包括以下几个方面: 1. **Java语法基础**:这是所有...

    java学习笔记.zip

    java学习笔记java学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记...

    《Java学习笔记》

    这份《Java学习笔记》包含了丰富的知识内容,旨在帮助学习者全面掌握Java编程技术。笔记分为7个PDF部分,覆盖了从基础到高级的Java编程概念。 1. **Java基础知识**:这部分内容通常包括Java的历史背景、环境配置、...

    java学习笔记.pdf

    "Java学习笔记" 本资源是一个关于Java编程语言的学习笔记,涵盖了Java的基础知识、语法、数据类型、变量、类型转换等方面的内容。 标题:"java学习笔记.pdf" 描述:"想自学的小伙伴可以看俺" 标签:"Java" 部分...

    瑜琅java学习笔记

    ### 瑜琅Java学习笔记概览 瑜琅的Java学习笔记涵盖了Java的基础概念与核心特性,从起源到高级特性均有涉及。以下是对该学习笔记各部分的深入解析: #### 1. Java起源 ##### 1.1 发展背景 - Java的诞生源于Sun ...

    java学习笔记.doc

    Java 学习笔记 本资源摘要信息涵盖了 Java 编程语言的基础知识,着重于面向对象编程(OOP)的概念和实现。下面是该资源的详细知识点: 1. 面向对象编程(OOP)的基本概念: * 对象: everything is an object...

    Java学习笔记PPT

    这份"Java学习笔记PPT"是针对Java2版本的学习资源,旨在帮助初学者或有一定基础的开发者深入理解Java的核心概念和应用。 在Java学习的初期,掌握基本语法是至关重要的。Java的语法与C++有诸多相似之处,但更加强调...

    良葛格JAVA学习笔记

    【标题】"良葛格JAVA学习笔记"是一个专注于Java编程的学习资源,由知名教育者或博主"良葛格"编撰。这份学习笔记以其清晰易懂的讲解方式和详尽的内容,深受学习者喜爱,被强烈推荐。它旨在帮助初学者和有一定基础的...

Global site tag (gtag.js) - Google Analytics