续前篇
方法:
1。构造方法:供类的创建对象使用,给出类创建对象的初始状态。
实例方法和类方法。
对象不可以调用构造方法,构造方法专门创建对像。
除构造方法外,方法返回的数据类型可以是任意java类型。除构造方法外,方法都有类型,即使是void,也不允许省略不写。
方法起名字:如果用拉丁字母,首写字母应使用小写,如果由多个单词组成,则从第二个单词开始的其他单词应大写。(局部变量的名字命名同样如此)
方法体的构成:变量的定义和合法的java语句。方法体中声明的变量以及方法的参数称为局部变量,局部变量仅仅在该方法内有效。
方法声明中用关键字static修饰的称为类方法货静态方法,不用static修饰的称为实例方法。一个类中的方法 可以互相调用,
实例方法可以调用该类中的实例方法和静态方法(类方法)。类方法只能调用该类的类方法,不能调用实例方法。
实例方法必须通过对象来调用:因为当类的字节码文件被加载到内存中时,类的实例方法不会被分配入口地址,只有但该类创建对象后,类中的实例方法才分配入口地址。
当使用new和构造方法创建对象时,首先给配成员变量给该对象,同时实例方法分配入口地址,然后执行构造方法中的语句,完成必要的初始化。
注意:在创建第一个对象时,类作中的实例方法就分配了入口地址,当再创建对象时,不再分配入口地址,方法的入口地址被所有对象共享。
类方法通过类名直接调用。
参数传值:
(1)基本数据类型的参数传值(略)
(2)引用类型的参数的传值
java的引用类型包括对象,数组,以及后面将要学习的接口,当参数是引用类型时,“传值”传的事变量的引用而不是变量所引用的的实体。(具体见参考书p56)
方法的重载(略,类似C++的重载)
关键字this:this可以出现在实例方法和构造方法中的,但是不可以出现在类方法中。因为类方法可以通过类名直接调用,这是可能还没有任何对象诞生。
区分成员变量和局部变量
成员变量在整个类中有效,局部变量仅仅在方法内有有效。在方法体中声明的变量以及方法的参数称为局部变量,方法的参数在整个方法内有效,方法内的局部变量在从定义它的位置后开始有效。
注意:如果实例方法中或类方法局部变量名字和成员变量的名字相同,则成员变量被隐藏,急这个成员变量在这个方法内暂时失效。如:
class Tom{
int x=188,y;
void f(){
int x=3;
y=x;//此时Y的值是3,而不是188.如果方法f()中没有int x=3;语句,则y的值是188
}
}
如果这时想在实例方法或类方法内使用成员变量,对于实例方法,成员变量前面的this,就不可以省略,对于类方法,必须显示的使用类名操作变量。详见p61
包(包是java语言中有效管理类的一种机制)
package 包名。
如果使用了包语句如
package tom.jiafei;
那么目录结构必须包含以下结构:...\tom\jiafei
编译的名字与运行程序的名字不一样如编译时如一个包名为tom.jiafei,其中有源文件主类名example:
则在编译时D:\ch4\tom\jiafei>javac example.java
运行时用D:\ch4>java tom.jiafei.example
包名应避免重复,可以用本公司域名倒置作为包名。
使用-d可以指定生成的字节码文件的位置。
如果源文件使用包语句声明了包名,使用参数-d是要格外小心。
具体见p62
4.11.import语句
import语句引入包中的类。(java提供类略)
系统自动引入java。lang包中的类
Data来显示本机当前时间。如:
import java.util.Data;
public class example{
public static void main(String args[]){
Data data=new Data();
System.out.printf("本机当前时间:\n%s",data);
}
}
也可以编译一个源文件得到该源文件中类的字节码文件,然后供其他类使用。
避免类名混淆(详见p66)
4.12访问权限
待续。。。。