- 浏览: 230406 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (127)
- 求职技巧 (1)
- java语言 (27)
- 数据库 (1)
- JDK 6.0学习笔记 (5)
- TOMCAT (2)
- JSP&Servlet (3)
- Data Binding (1)
- Windows (1)
- DB2 (15)
- Hibernate (5)
- XML (1)
- Financial Business (1)
- 项目管理 (0)
- Open source Framework (1)
- 总结思考反思 (2)
- Oracle (1)
- English Study (2)
- Other (28)
- java 模式 (8)
- en study (2)
- 异常处理 (4)
- Java 基础知识 (3)
- JDK1.5 Tiger (2)
- SSO (1)
- 开发中遇到的问题解决 (1)
最新评论
-
sonull:
怒赞!困扰多年的问题,就因为这个问题我一直都用subversi ...
如何使eclipse中subclipse插件的显示语言设置为英文 -
hanmiao:
果真如此,很好用,重启 eclipse 之后 svnclips ...
如何使eclipse中subclipse插件的显示语言设置为英文 -
wystark:
...
如何使eclipse中subclipse插件的显示语言设置为英文 -
minn84:
...
对年轻人的几点忠告 -
leizisdu:
引用 if(不包含物品i仅是可能的)感觉有些拗口
0/1背包问题-递归、动态规划
Java中static、this、super、final用法 | ||||||||||||||||
一、static 请先看下面这段程序:
看过这段程序,对于大多数学过Java 的从来说,都不陌生。即使没有学过Java,而学过其它的高级语言,例如C,那你也应该能看懂这段代码的意思。它只是简单的输出“Hello,world”,一点别的用处都没有,然而,它却展示了static关键字的主要用法。 在1处,我们定义了一个静态的方法名为main,这就意味着告诉Java编译器,我这个方法不需要创建一个此类的对象即可使用。你还得你是怎么运行这个程序吗?一般,我们都是在命令行下,打入如下的命令(加下划线为手动输入):
这就是你运行的过程,第一行用来编译Hello.java这个文件,执行完后,如果你查看当前,会发现多了一个Hello.class文件,那就是第一行产生的Java二进制字节码。第二行就是执行一个Java程序的最普遍做法。执行结果如你所料。在2中,你可能会想,为什么要这样才能输出。好,我们来分解一下这条语句。(如果没有安装Java文档,请到Sun的官方网站浏览J2SE API)首先,System是位于java.lang包中的一个核心类,如果你查看它的定义,你会发现有这样一行:public static final PrintStream out;接着在进一步,点击PrintStream这个超链接,在METHOD页面,你会看到大量定义的方法,查找println,会有这样一行:
好了,现在你应该明白为什么我们要那样调用了,out是System的一个静态变量,所以可以直接使用,而out所属的类有一个println方法。
调用一个静态方法就是“类名.方法名”,静态方法的使用很简单如上所示。一般来说,静态方法常常为应用程序中的其它类提供一些实用工具所用,在Java的类库中大量的静态方法正是出于此目的而定义的。
结果如下:
由此可以证明它们共享一块存储区。static变量有点类似于C中的全局变量的概念。值得探讨的是静态变量的初始化问题。我们修改上面的程序:
运行结果如下:
#p# 这个程序展示了静态初始化的各种特性。如果你初次接触Java,结果可能令你吃惊。可能会对static后加大括号感到困惑。首先要告诉你的是,static定义的变量会优先于任何其它非static变量,不论其出现的顺序如何。正如在程序中所表现的,虽然v出现在v1和v2的前面,但是结果却是v1和v2的初始化在v的前面。在static{后面跟着一段代码,这是用来进行显式的静态变量初始化,这段代码只会初始化一次,且在类被第一次装载时。如果你能读懂并理解这段代码,会帮助你对static关键字的认识。在涉及到继承的时候,会先初始化父类的static变量,然后是子类的,依次类推。非静态变量不是本文的主题,在此不做详细讨论,请参考Think in Java中的讲解。
输出结果会如你所料。
这段代码很简单,不用解释你也应该能看明白。在构造函数中你看到用this.print(),你完全可以用print()来代替它,两者效果一样。下面我们修改这个程序,来演示super的用法。
#p# 在DemoSuper中,重新定义的print方法覆写了父类的print方法,它首先做一些自己的事情,然后调用父类的那个被覆写了的方法。输出结果说明了这一点: DemoSuper:
在这段程序中,this和super不再是像以前那样用“.”连接一个方法或成员,而是直接在其后跟上适当的参数,因此它的意义也就有了变化。super后加参数的是用来调用父类中具有相同形式的构造函数,如1和2处。this后加参数则调用的是当前具有相同参数的构造函数,如3处。当然,在Chinese的各个重载构造函数中,this和super在一般方法中的各种用法也仍可使用,比如4处,你可以将它替换为“this.prt”(因为它继承了父类中的那个方法)或者是“super.prt”(因为它是父类中的方法且可被子类访问),它照样可以正确运行。但这样似乎就有点画蛇添足的味道了。
#p# 此程序很简单的演示了final的常规用法。在这里使用在构造函数中进行初始化的方法,这使你有了一点灵活性。如Bat的两个重载构造函数所示,第一个缺省构造函数会为你提供默认的值,重载的那个构造函数会根据你所提供的值或类型为final变量初始化。然而有时你并不需要这种灵活性,你只需要在定义时便给定其值并永不变化,这时就不要再用这种方法。在main方法中有两行语句注释掉了,如果你去掉注释,程序便无法通过编译,这便是说,不论是i的值或是list的类型,一旦初始化,确实无法再更改。然而b可以通过重新初始化来指定i的值或list的类型,输出结果中显示了这一点:
还有一种用法是定义方法中的参数为final,对于基本类型的变量,这样做并没有什么实际意义,因为基本类型的变量在调用方法时是传值的,也就是说你可以在方法中更改这个参数变量而不会影响到调用语句,然而对于对象变量,却显得很实用,因为对象变量在传递时是传递其引用,这样你在方法中对对象变量的修改也会影响到调用语句中的对象变量,当你在方法中不需要改变作为参数的对象变量时,明确使用final进行声明,会防止你无意的修改而影响到调用方法。 另外方法中的内部类在用到方法中的参变量时,此参变也必须声明为final才可使用,如下代码所示:
final方法
从程序中可以看出,final类与普通类的使用几乎没有差别,只是它失去了被继承的特性。final方法与非final方法的区别也很难从程序行看出,只是记住慎用。 (责任编辑 火凤凰 sunsj@51cto.com TEL:(010)68476636-8007) |
||||||||||||||||
发表评论
-
Java Exception
2009-09-07 20:45 830程序出错时至少需要做的三件事 Notify the us ... -
0/1背包问题-递归、动态规划
2009-03-31 16:36 4725问题描述:给定n种物品和一个背包,物品I的重量是Wi,其价值为 ... -
认识理解Java中native方法
2009-03-16 10:42 1175Java不是完美的,Java的不足除了体现在运行速度上要比传 ... -
Java对象的序列化和反序列化实践
2009-03-14 13:40 1106当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论 ... -
final在java中的应用
2009-03-10 12:05 1203final在Java中并不常用, ... -
session-config session-timeout
2009-02-16 11:44 3700session-config元素为Web应用中的javax.s ... -
web.xml中load-on-startup标签的含义
2009-02-13 10:02 970在servlet的配置当中,<loa ... -
acegi
2009-02-09 16:49 791Acegi安全系统,是一个用于Spring Framework ... -
For 循环示例
2009-02-09 14:42 925package com.test.For_Each; impo ... -
Java 泛型学习(Java 泛型的理解与等价实现)02
2009-02-09 14:36 678三、泛型的综合运用实例(代码参考java参考大全,有改动) ... -
Java 泛型学习(Java 泛型的理解与等价实现)01
2009-02-09 14:29 874泛型是JAVA SE 1.5的新特性,泛型的本质是参数化类型, ... -
Java 数据库连接池
2009-02-06 23:24 1001关键字: 数据库操作 /连接池类 package tu ... -
All kinds of Problem
2009-02-06 11:46 7872009-02-06 1. 为什么在WTP prospecti ... -
程序人生:你真的懂Java吗?
2009-02-06 11:03 977在这里,笔者根据自己 ... -
struts2 零配置方法总结
2009-02-03 22:16 865struts2 零配置 -
JavaEE
2009-01-19 17:26 1266JavaEE 是 J2EE的一个新 ... -
EL表达式
2009-01-17 13:02 1311EL脚本语言的配置和支 ... -
剖析el表达式
2009-01-17 12:59 1410我们已经知道el是jsp-2.0规范的一部分,tomcat- ... -
EL表达式语言语法及其他
2009-01-17 12:58 2594${表达式} EL的前世今生: ... -
关于EL表达式语言的简单总结
2009-01-17 12:28 2217首先你弄明白EL语言是怎么回事了吗? EL语言是JSTL输出 ...
相关推荐
Java中的`static`、`this`、`super`和`final`是四个非常重要的关键字,它们在编程中扮演着至关重要的角色。这篇文章将简要介绍这些关键字的基本用法及其应用场景。 1. **static** `static`关键字用于声明类级别的...
Java 中 static、this、super、final 的用法 静态方法(static method)是一种特殊的方法,它可以在不需要创建对象的情况下被调用。Java 中的静态方法使用 static 关键字来修饰,例如 public static void main...
在Java编程语言中,`static`、`this`、`super`和`final`是四个非常重要的关键字,它们各自有着特定的用途和含义。 1. **static**: 静态关键字`static`用于声明类级别的变量和方法,即静态变量和静态方法。静态变量...
"Java 中 static、this、super、final 用法详解" Java 中的 static 关键字是用于定义静态变量和静态方法的。静态变量和静态方法是属于类的,而不是属于类的对象的。它们可以被所有类的对象共享。 在 Java 中,...
Java开发中的`static`, `this`, `super`, 和 `final`是四个非常重要的关键字,它们在编程中扮演着各自独特的角色。接下来我们将深入探讨这些关键字的用法。 1. **static**: - **静态方法**:如示例中所示,`static...
在Java编程语言中,`static`、`this`、`super`和`final`是四个非常重要的关键字,它们各自有着特定的用途和用法。以下是对这些关键字的详细解释: 1. **static**: - **静态方法**:如文中所示,`static`修饰的...
在Java编程中,`static`、`this`、`super`和`final`是四个非常重要的关键字,它们各自有着特定的用途和含义。 1. **static关键字**: - `static`关键字主要用于声明静态成员(静态变量和静态方法)。静态成员属于...
### Java中static、this、super、final用途用法及实例 #### 1. Static关键字详解 **Static**关键字是Java中的一个重要概念,主要用于定义类成员(包括方法和变量)为静态成员。静态成员有两个主要特点:一是它们...
Java中的`static`、`this`、`super`和`final`是四个非常重要的关键字,它们在编程中扮演着不同的角色。以下是对这些概念的详细解释: ### 1. `static` `static`关键字用于声明类级别的成员,包括静态方法和静态...
6. 静态方法:静态方法可以通过类名和该类对象调用,因此静态方法中不能有 this 和 super 关键字。因为静态方法是独立于任何实例化对象,是属于类本身,所以静态方法必须被实现,不能是抽象的。 7. 静态方法经常...
通过以上对封装、继承、覆盖、构造过程、多态以及 `static`、`this`、`super` 和 `final` 关键字的详细介绍,我们可以更好地理解和运用Java的核心概念和技术点,从而编写出更加高效、灵活和易于维护的代码。
Java中的关键字this、...总的来说,Java的`this`、`final`、`super`以及相关概念如`implements`、`static`和`instanceof`都是面向对象编程中的关键要素,理解和掌握它们能够帮助开发者编写出更加高效、可维护的代码。
在使用 static 时要注意,不能在类的非静态成员方法中声明类的静态的成员变量。 八、声明为 static 的方法的限制 声明为 static 的方法有以下几条限制: * 在静态方法里只能调用同类中其他的静态成员(包括变量和...
静态方法内不能使用`this`或`super`关键字。 - 静态方法通常用于工具类或实用方法,如Java的`Math`类中的所有方法都是静态的,便于直接调用。 3. **静态代码块(Static Code Blocks)**: - 静态代码块是一段在类...