如何实现网站建设服务,wordpress阿里巴巴图标,建设厅施工员证查询网站,上海代理记账公司排名访问控制修饰符#xff1a;--------------保护数据的安全(隐藏数据、暴露行为)#xff0c;实现封装 public#xff1a;公开的#xff0c;任何类 private#xff1a;私有的#xff0c;本类 protected#xff1a;受保护的#xff0c;本类、派生类、同包类 默认的…访问控制修饰符--------------保护数据的安全(隐藏数据、暴露行为)实现封装 public公开的任何类 private私有的本类 protected受保护的本类、派生类、同包类 默认的什么也不写本类、同包类--------------------------java不建议 注意 访问权限由低到高依次为private默认的protectedpublic 类的访问权限只能是public或默认的类中成员的访问权限如上4种都可以。
package ooday05;
public class Aoo {public int a; //任何类protected int b; //本类、派生类、同包类int c; //本类、同包类private int d; //本类void show(){a 1;b 2;c 3;d 4;}
}class Boo{ //-------------------演示privatevoid show(){Aoo o new Aoo();o.a 1;o.b 2;o.c 3;//o.d 4; //编译错误}
}package ooday05_vis;
import ooday05.Aoo;
public class Coo { //-------------------演示同包的void show(){Aoo o new Aoo();o.a 1;//o.b 2; //编译错误//o.c 3; //编译错误//o.d 4; //编译错误}
}class Doo extends Aoo{ //跨包继承-------------演示protectedvoid show(){a 1;b 2; //编译错误//c 3; //编译错误//d 4; //编译错误}
}
final最终的、不能改变的------------单独应用几率低 修饰变量变量不能被改变
//演示final修饰变量
class Eoo{final int num 5;void show(){//num 55; //编译错误final的变量不能被改变}
}
修饰方法方法不能被重写
class Foo{final void show(){}void test(){}
}
class Goo extends Foo{//void show(){} //编译错误final的方法不能被重写void test(){}
}
修饰类类不能被继承
final class Hoo{}
//class Ioo extends Hoo{} //编译错误final的类不能被继承
class Joo{}
final class Koo extends Joo{} //正确不能当老爸但能当儿子
static静态的
静态变量 由static修饰 属于类存储在方法区中只有一份 常常通过类名点来访问 何时用对象所共享的数据
public class StaticVar {int a; //实例变量static int b; //静态变量StaticVar(){a;b;}void show(){System.out.println(aabb);}
}public class StaticDemo {public static void main(String[] args) {StaticVar o1 new StaticVar();o1.show();StaticVar o2 new StaticVar();o2.show();StaticVar o3 new StaticVar();o3.show();System.out.println(StaticVar.b); //常常通过类名点来访问}
} 静态块 由static修饰 属于类在类被加载期间自动执行一个类只被加载一次所以静态块也只执行一次 何时用初始化/加载静态资源/静态变量
public class StaticBlock {static{System.out.println(静态块);}StaticBlock(){System.out.println(构造方法);}
}public class StaticDemo {public static void main(String[] args) {StaticBlock o4 new StaticBlock(); //加载类时自动执行静态块StaticBlock o5 new StaticBlock();StaticBlock o6 new StaticBlock();}
}
静态方法 由static修饰 属于类存储在方法区中只有一份 常常通过类名点来访问 静态方法中没有隐式this传递所以静态方法中不能直接访问实例成员(实例变量/实例方法) 何时用方法的操作与对象无关(不需要访问对象的属性/行为)
public class StaticMethod {int a; //实例变量(对象来访问)--------------属于对象的static int b; //静态变量(类名来访问)-------属于类的//方法的操作与对象无关(不需要访问对象的属性/行为)//在say()中需要访问对象的属性a所以认为say的操作与对象有关不适合设计为静态方法void say(){System.out.println(a);}//在plus()中不需要访问对象的属性/行为所以认为plus的操作与对象无关可以设计为静态方法static int plus(int num1,int num2){int num num1num2;return num;}void show(){ //有隐式thisSystem.out.println(this.a);System.out.println(StaticMethod.b);}static void test(){ //没有隐式this//静态方法中没有隐式this传递//没有this就意味着没有对象//而实例变量a必须通过对象来访问//所以如下语句发生编译错误//System.out.println(a); //编译错误静态方法中不能直接访问实例成员System.out.println(StaticMethod.b);}
}public class StaticDemo {public static void main(String[] args) {StaticMethod.test(); //常常通过类名点来访问}
}
static final常量应用率高 必须声明同时初始化 常常通过类名点来访问不能被改变 建议常量名所有字母都大写多个单词之间用_分隔 编译器在编译时会将常量直接替换为具体的数效率高 何时用在程序运行过程中数据永远不变并且经常使用
public class StaticFinalDemo {public static void main(String[] args) {System.out.println(Loo.PI); //常常通过类名点来访问//Loo.PI 3.1415926; //编译错误常量不能被改变//1)加载Loo.class到方法区中//2)静态变量num一并存储到方法区中//3)到方法区中获取num的值并输出System.out.println(Loo.num);//编译器在编译时会将常量直接替换为具体的数效率高//相当于System.out.println(5);System.out.println(Loo.COUNT);}
}class Loo{public static int num 5; //静态变量public static final int COUNT 5; //常量(静态常量)public static final double PI 3.14159;//public static final int NUM; //编译错误常量必须声明同时初始化
枚举 是一种引用数据类型 特点枚举类型的对象数目是固定的常常用于定义一组常量 所有枚举都继承自Enum类其中提供了一组方法供我们使用 枚举的构造方法都是私有的
public enum Season {//表示Season的固定的4个对象都是常量//public static final Season SPRING new Season(春天,暖和);SPRING(春天,暖和),SUMMER(夏天,热),AUTUMN(秋天,凉爽),WINTER(冬天,冷);private String seasonName;private String seasonDesc;Season(String seasonName, String seasonDesc) {this.seasonName seasonName;this.seasonDesc seasonDesc;}public String getSeasonName() {return seasonName;}public void setSeasonName(String seasonName) {this.seasonName seasonName;}public String getSeasonDesc() {return seasonDesc;}public void setSeasonDesc(String seasonDesc) {this.seasonDesc seasonDesc;}
}public class EnumDemo {public static void main(String[] args) {Season[] seasons Season.values(); //获取所有枚举的对象for(int i0;iseasons.length;i){System.out.println(seasons[i]); //输出4个枚举对象(SPRING、SUMMBER、AUTUMN、WINTER)System.out.println(seasons[i].getSeasonName()); //输出枚举的名字属性System.out.println(seasons[i].getSeasonDesc()); //输出枚举的描述属性}Season s Season.WINTER; //获取SPRING对象System.out.println(s.getSeasonName()s.getSeasonDesc());switch (s){case SPRING:System.out.println(天气s.getSeasonDesc()放风筝去喽!);break;case SUMMER:System.out.println(天气s.getSeasonDesc()游戏去喽!);break;case AUTUMN:System.out.println(天气s.getSeasonDesc()摘苹果去喽!);break;case WINTER:System.out.println(天气s.getSeasonDesc()打雪仗去喽!);break;}}
}
注: 数据(成员变量)私有化(private)、行为(方法)大部分公开化(public) getter/setter行业标准 重写的注意事项派生类中重写方法的访问权限必须大于或等于超类方法的 匿名内部类中不能修饰外面局部变量的值在匿名内部类该变量会默认为final的 成员变量分两种 实例变量没有static修饰属于对象的存储在堆中有几个对象就有几份通过引用/对象打点来访问 静态变量有static修饰属于类的存储在方法区中只有一份通过类名打点来访问 工具类 1)Math:数学工具类里面封装了很多数学相关的静态方法/工具 2)Arrays:数组工具类里面封装了很多数组相关的静态方法/工具