java 方法(转)
java 方法(转)[@more@]在本章的开始提到,类通常由两个要素组成:实例变量和方法。方法是个很大的话题,因为Java 给他们如此大的功能和灵活性。事实上,下一章的大部分都用来介绍方法。然而,你现在需要学习一些基础以便你能开始把方法加到你的类中。这是方法一般的形式:type name(parameter-list) {// body of method}其中,type 指定了方法返回的数据类型。这可以是任何合法有效的类型,包括你创建的类的类型。如果该方法不返回任何值,则它的返回值type 必须为void 。方法名由name 指定。除了被当前作用域中的其他项使用的标识符以外,
构造java函数(转)
构造java函数(转)[@more@]每次在创建实例变量,对类中的所有变量都要初始化是很乏味的。即使你对setDim ( ) 这样的方法增加有用的功能时,你也不得不这样做。如果在一个对象最初被创建时就把对它的设置做好,那样的话,程序将更简单并且更简明。因为对初始化的要求是共同的,Java 允许对象在他们被创造时初始化自己。这种自动的初始化是通过使用构造函数来完成的。构造函数(constructor )在对象创建时初始化。它与它的类同名,它的语法与方法类似。一旦定义了构造函数,在对象创建后,在new运算符完成前,构造函数立即自动调用。构造函数
垃圾回收(转)
垃圾回收(转)[@more@]由于使用new运算符来为对象动态地分配内存,你可能想知道这些对象是如何撤消的以及他们的内存在以后的重新分配时是如何被释放的。在一些语言,例如C+ + 中,用delete 运算符来手工地释放动态分配的对象的内存。Java 使用一种不同的、自动地处理重新分配内存的办法:垃圾回收( garbage collection) 技术,它是这样工作的:当一个对象的引用不存在时,则该对象被认为是不再需要的,它所占用的内存就被释放掉。它不像C++ 那样需要显式撤消对象。垃圾回收只在你的程序执行过程中偶尔发生。它不会因为一个或几个存在的对象
finalize( ) 方法(转)
finalize( ) 方法(转)[@more@]有时当撤消一个对象时,需要完成一些操作。例如,如果一个对象正在处理的是非Java 资源,如文件句柄或window 字符字体,这时你要确认在一个对象被撤消以前要保证这些资源被释放。为处理这样的状况,Java 提供了被称为收尾(finalization )的机制。使用该机制你可以定义一些特殊的操作,这些操作在一个对象将要被垃圾回收程序释放时执行。要给一个类增加收尾(finalizer ),你只要定义finalize ( ) 方法即可。Java 回收该类的一个对象时,就会调用这个方法。在finalize ( )方法中,你要指定在一个对象被撤消
this关键字(转)
this关键字(转)[@more@]有时一个方法需要引用调用它的对象。为此,Java 定义了this 这个关键字。this 可以在引用当前对象的所有方法内使用。也就是,this 总是调用该方法对象的一个引用。你可以在当前类的类型所允许对象的任何地方将this 作为一个引用。为了更好理解this 引用什么,考虑下面版本的Box():// A redundant use of this.Box(double w,double h,double d) {this.width = w;this.height = h;this.depth = d;}本例中的box( ) 和它的更早版本完成同样的操作。使用this 是冗余的,但是完全正确。在Box( ) 内,this 总是引用调用
一个堆栈类(转)
一个堆栈类(转)[@more@]尽管Box 类在说明一个类的必要的元素时是有用的,但它实际应用的价值并不大。为了显示出类的真实的功能,本章将用一个更复杂的例子来说明类的强大功能。如果你回忆起在第2章中讲过的面向对象编程的讨论,你就会想起对象编程的最重要的好处之一是对数据和操作该数据的代码的封装。你已经知道,在Java 中,就是通过类这样的机制来完成封装性。在创建一个类时,你正在创建一种新的数据类型,不但要定义数据的属性,也要定义操作数据的代码。进一步,方法定义了对该类数据相一致的控制接口。因此,你可以通过类的方法来
JAVA 方法重载(转)
JAVA 方法重载(转)[@more@]在Java 中,同一个类中的2个或2个以上的方法可以有同一个名字,只要它们的参数声明不同即可。在这种情况下,该方法就被称为重载(overloaded ),这个过程称为方法重载(method overloading )。方法重载是Java 实现多态性的一种方式。如果你以前从来没有使用过一种允许方法重载的语言,这个概念最初可能有点奇怪。但是你将看到,方法重载是Java 最激动人心和最有用的特性之一。当一个重载方法被调用时,Java 用参数的类型和(或)数量来表明实际调用的重载方法的版本。因此,每个重载方法的参数的类型和(或)数
把对象作为参数(转)
把对象作为参数(转)[@more@]到目前为止,我们都使用简单类型作为方法的参数。但是,给方法传递对象是正确的,也是常用的。例如,考虑下面的简单程序:// Objects may be passed to methods.class Test { int a,b;Test(int i,int j) {a = i; b = j;}// return true if o is equal to the invoking objectboolean equals(Test o) {if(o.a == a && o.b == b) return true;else return false;}}class PassOb {public static void main(String args[]) { Test ob1 = new Test(100,22);Test ob2 = new Test(100,22);Test ob3 = new
返回对象(转)
返回对象(转)[@more@]方法能够返回任何类型的数据,包括你创建的类的类型。例如,在下面的程序中,incrByTen() 方法返回一个对象,在该对象中的值a比调用对象中的值a大10。// Returning an object.class Test {int a;Test(int i) {a = i;}Test incrByTen() {Test temp = new Test(a+10);return temp;}}class RetOb {public static void main(String args[]) {Test ob1 = new Test(2);Test ob2;ob2 = ob1.incrByTen();System.out.println("ob1.a: " + ob1.a);System.out.println("ob2.a: " + ob2.a);ob2 = ob2.incrByTen();System.out.prin
递归(转)
递归(转)[@more@]// A simple example of recursion.class Factorial {// this is a recursive functionint fact(int n) {int result;if(n==1) return 1;result = fact(n-1) * n;return result;}}class Recursion {public static void main(String args[]) {Factorial f = new Factorial();System.out.println("Factorial of 3 is " + f.fact(3));System.out.println("Factorial of 4 is " + f.fact(4));System.out.println("Factorial of 5 is " + f.fact(5));}}该程序产生的输出如下所示:Factorial of 3 is 6Factorial of 4 is 24Facto
介绍访问控制(转)
介绍访问控制(转)[@more@]我们知道,封装将数据和处理数据的代码连接起来。同时,封装也提供另一个重要属性:访问控制(access control )。通过封装你可以控制程序的哪一部分可以访问类的成员。通过控制访问,可以阻止对象的滥用。例如,通过只允许适当定义的一套方法来访问数据,你能阻止该数据的误用。因此,如果使用得当,可以把类创建一个“黑盒子”,虽然可以使用该类,但是它的内部机制是不公开的,不能修改。但是,本书前面创建的类可能不会完全适合这个目标。例如,考虑在第6章末尾示例的Stack类。方法push( ) 和pop() 确实为堆栈
第2个java示例程序(转)
第2个java示例程序(转)[@more@]对于编程语言来说,变量是一个最为基本的概念。你可能知道,变量是一个有名字的内存位置,它能够被赋值。而且,在程序的运行过程中,变量的值是可以改变的。下一个程序将介绍如何声明变量,如何给变量赋值。另外,该程序也说明了控制台输出的某些新特点。从程序开始的注释可以看出,你应该把这个文件命名为 Example2.java 。/*Here is another short example.Call this file "Example2.java".*/class Example2 {public static void main(String args[]) {int num; // this declares a variable called numnu
理解static(转)
理解static(转)[@more@]有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static。声明为static的变量实质上
java两个控制语句(转)
java两个控制语句(转)[@more@]尽管将在第5章仔细讨论控制语句,我们还是在这里先简单介绍2条控制语句,以便能在第3章、第4章中的例子程序中使用它们,并且它们也将帮助说明Java 的一个重要特点:程序块。2.4.1 if控制语句Java 中if控制语句与其他语言中的IF语句非常相似。并且,它与C/ C++ 语言中的if语句的语法完全相同。它的最简单形式如下:if(condition) statement;这里,条件condition 是一个布尔型表达式。如果条件为真,那么执行语句statement ;如果条件为假,则语句statement 将被绕过而不被执行。下面是一个例子:if(num < 1
介绍final(转)
介绍final(转)[@more@]一个变量可以声明为final,这样做的目的是阻止它的内容被修改。这意味着在声明final 变量的时候,你必须初始化它(在这种用法上,final 类似于C/C++ 中的const)。例如:final int FILE_NEW = 1;final int FILE_OPEN = 2;final int FILE_SAVE = 3;final int FILE_SAVEAS = 4;final int FILE_QUIT = 5;你的程序的随后部分现在可以使用 FILE_OPEN 等等,就好像它们是常数,不必担心它们的值会被改变。为final 变量的所有的字符选择大写是一个普遍的编码约定。声明为final 的变量在实例中不占用内存。这样,一个final 变
重新温习数组(转)
重新温习数组(转)[@more@]在此之前已经在本书中介绍过数组了。现在既然你已了解了类,可以介绍关于数组的重要的一点:数组是作为对象来实现的。因此,你可能想要利用数组的一种特别的属性,具体地说,就是一个数组的大小——也就是,一个数组能保存的元素的数目——可以在它的length 实例变量中找到。所有的数组都有这个变量,并且它总是保存数组的大小。下面的程序示例了这个性质:// This program demonstrates the length array member.class Length {public static void main(String args[]) { int a1[] = new int[10];int a2[] = {3,
介绍嵌套类和内部类(转)
介绍嵌套类和内部类(转)[@more@]在另一个类中定义的类就是嵌套类(nested classes)。嵌套类的范围由装入它的类的范围限制。这样,如果类B被定义在类A之内,那么B为A所知,然而不被A的外面所知。嵌套类可以访问嵌套它的类的成员,包括private 成员。但是,包围类不能访问嵌套类的成员。嵌套类一般有2种类型:前面加static标识符的和不加static 标识符的。一个static的嵌套类有static修饰符。因为它是static,所以只能通过对象来访问它包围类的成员。也就是说,它不能直接引用它包围类的成员。因为有这个限制,所以static嵌套类很少使用。嵌
探索String 类(转)
探索String 类(转)[@more@]尽管String 类将在本书的第2部分深入地研究,但因为我们将在第1部分末尾的一些例子程序中使用字符串,因此,现在应该对它做一个简单的探索。String 类是Java 类库中最常用的类,其中最明显的原因是字符串在编程语言中是很重要的部分。有关字符串的最重要一点是,你创建的每一个字符串实际上都是String 类型的一个对象,即使是字符串常量实际上也是String 对象。System.out.println("This is a String,too");字符串“This is a String,too ”是一个字符串常数。幸好,Java 处理字符串常数和其他计算机语言处理“
java 使用命令行参数(转)
java 使用命令行参数(转)[@more@]有时你想在运行程序时将信息传递到一个程序中。这通过将命令行参数(command-line arguments )传递给main() 来实现。命令行参数是程序执行时在命令行中紧跟在程序名后的信息。在Java 程序中访问命令行参数是相当容易的——它们作为字符串存储在传递给main() 的String 数组中。例如,下面的程序显示了调用的所有的命令行参数:// Display all command-line arguments.class CommandLine {public static void main(String args[]) {for(int i=0; i System.out.println("args[" + i + "]: " +args);}}尝试执行
java 继承的基础(转)
java 继承的基础(转)[@more@]继承是面向对象编程技术的一块基石,因为它允许创建分等级层次的类。运用继承,你能够创建一个通用类,它定义了一系列相关项目的一般特性。该类可以被更具体的类继承,每个具体的类都增加一些自己特有的东西。在Java 术语学中,被继承的类叫超类(superclass ),继承超类的类叫子类(subclass )。因此,子类是超类的一个专门用途的版本,它继承了超类定义的所有实例变量和方法,并且为它自己增添了独特的元素。继承一个类,只要用extends 关键字把一个类的定义合并到另一个中就可以了。为了理解怎样继承,让