静态static,包package,四个权限修饰符
文章目录
一、静态static
static可以用来修饰类的属性,方法,代码块,内部类。
重点:
随着类的加载而加载
优先于对象存在
修饰的成员,被所有对象所共享
可不创建对象,直接被类调用
1.被对象调用
-
static方法可以使用对象调用,也可以直接用类名调用,建议用类名直接调用
-
静态属性是类的所有对象共享的,
即不管创建了多少个对象,
静态属性在内存中只有一个。
eg: -
下面代码中在NextChinese类中可以看出在没有建立对象的情况下还可以使用类来调用静态属性,说明static优先于对象存在,但调用的时候还是建议用类来调用.
-
下面代码中在NextChinese类中可以看出在建立对象后,无论创建了几个对象后输出的count都是不变的,说明静态属性的类是所有对象贡献的,且只有一个.
2.被方法调用
- 在static方法内部只能访问类的static属性,不能访问类的非static属性,static属性先加载。
- 代码块在类中声明,类似一个没有名称的方法体(代码块),代码块分实例块和静态块
- 静态块:类加载时自动调用,仅一次,与是否创建对象无关。
static {
//任何符合语法的Java代码
} - 每次在加载类的时候static都会优先执行
代码如下(示例):
public class NextChinese {
public static void main(String[] args) {
Chinese.count = "英国";//static方法可以使用对象调用,也可以直接用类名调用,建议用类名直接调用
Chinese zs = new Chinese();
zs.name = "张三";
zs.age = 9;
System.out.println(zs.name+"+++"+Chinese.count);
Chinese ls = new Chinese();
ls.name = "李四";
ls.age = 9;
System.out.println(ls.name+"+++"+Chinese.count);
Chinese.abc();
Chinese.abc();
Chinese.abc();
}
}
public class Chinese {
String name;
int age;
static String count = "中国";//随着类的加载而加载 优先于对象存在 ;修饰的成员,被所有对象所共享 ;可不创建对象,直接被类调用
static int test = 50;
public static void abc(){//在static方法内部只能访问类的static属性,不能访问类的非static属性,static属性先加载
test = test - 1;
System.out.println(test);
}
}
二、包package
-
包(package)的命名规范:
在包名中,可以使用.号来区分包的级别;包名一般情况下是小写
第一级 指该项目的类型,如com,org,gov等,
第二级 指项目所开发或者运行的公司名称,如:oracle,sun,huawei等
第三级 指项目的名称,如:bcms,oa,erp,cms等
第四级 指项目模块的名称,如:bean,action,exception等 -
包可以更好得管理逻辑相关的类,可以控制不同包之间的访问权限
导入外部包的类,关键字“import”(import后面会讲)
三、访问权限修饰符
1.public
- public :公共权限 修饰类、属性、方法。可以被任意类访问
- public在a包b类访问c包d类都可以访问
2.protected
- protected:受保护的权限 修饰属性、方法。
- protected在a包b类访问c包d类必须创建一个子类才可实现
3.(default)
- default:同包权限(包权限) 修饰类、属性、方法。只能被同包的类访问
- default只能同包a类访问同包b类
4.private
- private:私有权限 修饰属性、方法。 只能在本类中访问
- private只能同类a访问同类a
5.区别
- public和protected可以不同包访问
(default)和private必须同包访问 - 可以打个比方
public就是元帅,可以统领百万雄师
protected就是将军,只能调用自己手下以及与自己同等职位的部下(必须是他儿子)
(default)就是无后代的将军,只能调用自己的手下
private就是普通士兵,只能调用自己