2.实例方法和类方法
和实例变量和类变量的描述时是一样,当类的字节码加载到
内存是类方法的入口地址就会被加载到相应的内存空间,即此时可以访问;而当且只有创建对象之后,实例方法的入口地址才会被加载到内存中,这是才可以调用.
既然知道了实例方法和类方法开始生效的时间,可以知道他们可以调用何种类的成员变量:
1)类方法因为是在创建对象之前就已经生效了,这时候实例变量还没有被分配内存空间,只有类变量被分配了内存空间,所以类方法只能调用被分配内存空间的变量即类变量;
2)实例方法是在创建对象之后才开始生效的,这是无论是类变量还是实例变量都已经被分配了内存空间,所以实例方法生效后可以调用类变量和实例变量.
复制代码class Fibi
{ public static long fibinacii(int n)
{ long c=0;
if(n==1||n==2)
c=1;
else
c=fibinacii(n-1)+fibinacii(n-2);
return c;
}
}
public class Example4_8
{ public static void main(String args[])
{ System.out.println(Fibi.fibinacii(7));// 可见还没哟创建Fibi的对象时就可以调用fibinacii()方法,因为属于static修饰的类变量
}
}
包
包是
java中有效的管理类的一个机制,包有类似于目录结构的层次结构.通过import关键字可以在程序中使用包
语法格式:
import<包名>.*; //包含包中的所有类
import<包名><类名>//包含包中的指定类
例如:
import
java.awt.*; //包含
java.awt包中的所有类
import
java.awt.JButton;//包含
java.awt包中的JButton类
既然知道了怎么使用,那如何制作包呢,可以通过关键字package声明包语句.package语句作为
java源文件的一个条语句,指明该源文件定义的类的所在包.
语法格式:
package 包名
如果源文件中省略了package语句,那么源文件中定义命名的类将被隐含的认为是无名包的一部分,即源文件中定义命名的类在同一个包中,但该报没有名字而已.
包还可以是一个合法的表示符,也可以是若干个标识符加"."分割而成,如
package sunrise;
package sunrise.com.cn
程序如果使用了包的语句,如
package desney.tom;
那么目录必须包含有如下结构,如
C: cartoon desney tom
并且要将源文件保存在目录C: cartoon desney tom中,才能使用这个包,然后编译源文件:
C: cartoon desney tom
javac 源文件.
java或
jacac C: cartoon desney tom 源文件.
java从一个例子体会此过程:
复制代码package desney.tom;
public class PrimNumber
{ public void getPrimnumber(int n)
{ int sum=0,i,j;
for(i=1;i<=n;i++)
{ for(j=2;j<=i/2;j++)
{ if(i%j==0)
break;
}
if(j>i/2)
System.out.print(" "+i);
}
}
public static void main(String args[])
{ PrimNumber p=new PrimNumber();
p.getPrimnumber(20);
}
}
保存上述源文件到C: cartoon desney tom下,然后编译
C: cartoon desney tom
javac PrimNumber.
java运行程序时必须到desney tom的上一层目录cartoon中来运行,如
C: cartoon
java desney.tom.PrimNumber
因为起了报名,类PrimNumber的全名应该为desney.tom.PrimNumber
导入这个包也要注意名称
复制代码import desney.tom.PrimNumber;
所以用package可以把认可类都打包然后在其他程序中使用,于c或c++中的头文件有着相似的效果,差别就是
java中的包里只能是类
注意:使用import可以导入包中的类.在编写源文件时,除了自己编写的类外,经常需要使用
java提供的去多类,这些类可能不在一个包中.在学习
java时,使用已经存在的类,避免一切从头做起,这是面向对象编程的一个重要方面.
总结:具体的把static修饰的变量和方法的使用方法做了介绍;对
java中包有了初步认识