类与包
包是Java的类库管理机制,它借助文件系统的目录来管理类库,一个包就是一个目录,属于一个包的类必须放在一个目录下,包名就是目录。
eg:import com.company.Class
这里的的Class为类名,则这个类的class文件位于工程目录下的com\company目录下。
####类中的成员的访问权限与类变量、类函数
在成员变量及成员函数前可以使用不同的访问控制符来改变它们的访问权限
而如果某个成员有static关键字做修饰,它就不再属于每一个对象,而是属于整个类。这个成员就成为了类变量、类函数
类变量与C语言中的静态变量相似,任何属于该类的对象访问到的都是同一个变量,而且它只会初始化一次,即制造新的对象也不会影响到类变量当前的值,这也说明类变量在类中而不是每一个对象里
如果我们有的类有类变量或者类方法即static型的变量、方法,那么我们可以不制造任何一个该类的对象而直接使用该类变量、类方法。即可以通过类的名字来访问它们
对象属于类,每个对象都可以访问到所在类的变量和类函数(如果它们有访问权限)。成员变量存在于对象中,类函数不属于任何对象,所以类函数无法与任何成员变量产生交互,所以类函数不能访问任何非static的成员变量和成员函数。即使是与成员变量无关的成员函数
eg:
class hh{
static int eg=0;
public static void setEg(int a) {
hh.eg = a;
}
}
public class Main {
public static void main(String[] args) {
hh a =new hh();
System.out.println(hh.eg);
a.eg=5;
System.out.println(hh.eg);
a.setEg(10);
System.out.println(a.eg);
hh b=new hh();
System.out.println(a.eg);
}
}
//输出为
0
5
10
10
class hh{
static int eg=0;
public static void setEg(int a) {
hh.eg = a;
}
}
public class Main {
public static void main(String[] args) {
hh a =new hh();
System.out.println(hh.eg);
a.eg=5;
System.out.println(hh.eg);
a.setEg(10);
System.out.println(a.eg);
hh b=new hh();
System.out.println(a.eg);
}
}
//输出为
0
5
10
10
###private配合static的奇怪使用
class Class{
private int obj=5;
private static Class A = new Class();
private Class(){}//构造函数私有,使我们无法制造一个对象
public static Class getA(){
return A;
}
public int getObj() {
return obj;
}
public void setObj(int obj) {
this.obj = obj;
}
}
public class Main {
public static void main(String[] args) {
int a=Class.getA().getObj();//我们没有制造出实际上的对象就得到了一个成员变量的值
Class c = Class.getA();//这个类有且仅有这一个对象
c.setObj(6);
Class cc = Class.getA();
System.out.println(cc.getObj());
}
}
//输出为6
class Class{
private int obj=5;
private static Class A = new Class();
private Class(){}//构造函数私有,使我们无法制造一个对象
public static Class getA(){
return A;
}
public int getObj() {
return obj;
}
public void setObj(int obj) {
this.obj = obj;
}
}
public class Main {
public static void main(String[] args) {
int a=Class.getA().getObj();//我们没有制造出实际上的对象就得到了一个成员变量的值
Class c = Class.getA();//这个类有且仅有这一个对象
c.setObj(6);
Class cc = Class.getA();
System.out.println(cc.getObj());
}
}
//输出为6
类似单例模式
private static为静态方法提供私有静态属性。public static常用的是为该类提供对外暴露即可以被类名直接调用的静态常量。
如Integer.MAX_VALUE
其定义为public static final int MAX_VALUE = 0x7fffffff;
private static 的静态方法
- 当该方法只期望被本类所使用时
- 且与本类的状态无关
比如平常使用的工具方法,我们不想要制造工具类的对象就能使用它的方法,就可以写出public static的方法,当我们想要该方法只在本类中被使用时,就声明为private static