关键字 小结
关键字就是对于具有任何编程语言起修饰限定的作用,并给予编译器以特殊指令的一系列字符串.
一. 访问控制符(4): public, protected, default, private
public:该域里面的内容是任何成员都可以访问的,只要在访问前导入了该类所在的包
protected: 访问类必须和被访问类在同一个包里面,或者访问类是被访问类的子类
default : 该修饰符是指直接在类里面定义数据变量或者类变量以及类方法的时候不带任何修饰符;并且访问类和被访问类必须在同一个包里.
private域:该关键字定义的东西只有该类本身可以访问,其他类以及子类都不可以直接访问该成员
以上的概括的结果可以用下面的表格表示:
[img]http://dl.iteye.com/upload/picture/pic/95066/aa69f260-01cb-35ce-9637-5d9b22fd401f.png[/img]
访问控制符使用原则:只要能满足需要,访问权限越小越好,太多的的Public 就相当有一个赤裸裸的人站在你的面前,毫无秘密,而且可以随便修改,所以宁愿多写一些代码,但也要给自己的代码多一点抵抗力
二. Final变量修饰符:
1. 当final用于变量的时候,如果该变量为一个八种基本变量(boolean、byte、char、double、float、int、long、short)时,表示该变量存在内存里面的值为一个常量,不可更改, final 修饰的属性必须进行初始化(可以在 “属性定义时”进行 也可以 在“构造函数里”进行)
[img]http://dl.iteye.com/upload/picture/pic/95064/b0c11619-c71e-379c-b4f8-dc1f4cfbe8df.png[/img]
2.当final用于一个方法的时候,表示该方法不可以被继承,即使该方法为public修饰符,这个方法也不可以被子类继承,只能被子类调用,而不能重写
3.当final用于一个类定义的时候,表示该类不可以有子类,这里可以引申一点:abstract和final两个关键字是不可以同时出现的
4.当final用于变量的时候,如果该变量为一个符合变量,即Java中继承于Object的变量,表示该引用不可以指向其他的对象,但是并不代表该引用指向的对象不可更改//网上找的????
三. Static变量修饰符:
使用关键字为static关键字,这种变量可以直接通过Class.AA的方式来调用,而且不需要对象实例存在就可以调用,它的执行原理在于当JVM的类加载器将类加载进来的时候,这个变量就已经存在的,而且可以使用了
下面的a 就是指一个类变量,可以通过Mystatic.a 来使用:
示例1:下面是淘宝的笔试题,经过改造基本可以概括static大部分属性:
以上程序的输出结果为:A E F A B D C A B
示例二:下面是一道”多态”的程序,但加上static味道就变了
下面是结果:
[img]http://dl.iteye.com/upload/picture/pic/95068/5b40fd6c-cf89-39e0-b595-8ab642e25b66.png[/img]
其实上面并不是以前学的多态,多态是对于非静态属性与方法的,当使用了static修饰的 静态属性与方法,至于对象前面的类名有关,所以用类名MyFinal修饰对象或子类对象时,结果是一样的……..
四. 变量引用:super、this
Super和this的作用差不多,两者都用在类的构造器里,而且只能使用一次,且只能放在第一行,否则会有错误提示:
”Constructor call must be the first statement in a constructor”
使用方法在上一部分的代码里就有,所以就不赘述..
以上只是我稍微了解的部分的,还有好一些暂不了解,以上写的不对的地方,大家指正…..
关键字就是对于具有任何编程语言起修饰限定的作用,并给予编译器以特殊指令的一系列字符串.
一. 访问控制符(4): public, protected, default, private
public:该域里面的内容是任何成员都可以访问的,只要在访问前导入了该类所在的包
protected: 访问类必须和被访问类在同一个包里面,或者访问类是被访问类的子类
default : 该修饰符是指直接在类里面定义数据变量或者类变量以及类方法的时候不带任何修饰符;并且访问类和被访问类必须在同一个包里.
private域:该关键字定义的东西只有该类本身可以访问,其他类以及子类都不可以直接访问该成员
以上的概括的结果可以用下面的表格表示:
[img]http://dl.iteye.com/upload/picture/pic/95066/aa69f260-01cb-35ce-9637-5d9b22fd401f.png[/img]
访问控制符使用原则:只要能满足需要,访问权限越小越好,太多的的Public 就相当有一个赤裸裸的人站在你的面前,毫无秘密,而且可以随便修改,所以宁愿多写一些代码,但也要给自己的代码多一点抵抗力
二. Final变量修饰符:
1. 当final用于变量的时候,如果该变量为一个八种基本变量(boolean、byte、char、double、float、int、long、short)时,表示该变量存在内存里面的值为一个常量,不可更改, final 修饰的属性必须进行初始化(可以在 “属性定义时”进行 也可以 在“构造函数里”进行)
[img]http://dl.iteye.com/upload/picture/pic/95064/b0c11619-c71e-379c-b4f8-dc1f4cfbe8df.png[/img]
2.当final用于一个方法的时候,表示该方法不可以被继承,即使该方法为public修饰符,这个方法也不可以被子类继承,只能被子类调用,而不能重写
3.当final用于一个类定义的时候,表示该类不可以有子类,这里可以引申一点:abstract和final两个关键字是不可以同时出现的
4.当final用于变量的时候,如果该变量为一个符合变量,即Java中继承于Object的变量,表示该引用不可以指向其他的对象,但是并不代表该引用指向的对象不可更改//网上找的????
三. Static变量修饰符:
使用关键字为static关键字,这种变量可以直接通过Class.AA的方式来调用,而且不需要对象实例存在就可以调用,它的执行原理在于当JVM的类加载器将类加载进来的时候,这个变量就已经存在的,而且可以使用了
下面的a 就是指一个类变量,可以通过Mystatic.a 来使用:
示例1:下面是淘宝的笔试题,经过改造基本可以概括static大部分属性:
//A类
public class A{
public A() {
// TODO Auto-generated constructor stub
System.out.println("A");
}
}
//B类
public class B extends A{
public B() {
// TODO Auto-generated constructor stub
System.out.println("B");
}
}
//实现
public class Mystatic {
static A a = new A();//第一个加载,输出 A
B b = new B();//类属性只有创建对象时才会加载,而且会在构造器之前完成加载
public Mystatic() {//加载完属性和代码块之后才会调用
// TODO Auto-generated constructor stub
System.out.println("C");
}
public static void main(String args[]){//第二个加载,main 是在静态方法和静态代码块加载完了
// 之后才会调用
/* System.out.println("F"); */
/* Mystatic mystatic = new Mystatic();//创建对象*/
Mystatic.sys();//用类名直接调用静态方法,因为静态方法(又名类方法)是属于类的
}
/*静态方法先加载但暂不执行,只有调用之后才会执行 */
public static void sys(){//第二步但不执行
B b1 = new B();
}
/*代码块*/
/*{//只有创建对象时才会加载
System.out.println("D");
}
/*静态代码块*/
/*static{//第三步而且立即执行
System.out.println("E");
}*/
}
以上程序的输出结果为:A E F A B D C A B
示例二:下面是一道”多态”的程序,但加上static味道就变了
//父类
static String name;
public MyFinal() {
// TODO Auto-generated constructor stub
//调用当前类的某一个构造函数,可以调用多个,但至少有一个
this("AAA");
}
public MyFinal(final String name){
//name = "kkk";//把形参声明为final 可以防止此处进行修改
this.name = name;
}
public static void showMessage(){
System.out.println(name+"is good!");
}
//子类
public class MyFinalChild extends MyFinal {
/*这个构造函数系统会默认给出*/
/*public MyFinalChild() {
// TODO Auto-generated constructor stub
super();
}*/
public MyFinalChild() {
// TODO Auto-generated constructor stub
super("---->BBB");//调用个父类的构造函数
}
public static void showMessage() {
// TODO Auto-generated method stub
System.out.println(name+"is not good!");
}
}
//测试类
public class TestFinal {
public static void main(String[] args) {
MyFinal myFinal1 = new MyFinal();
MyFinalChild finalChild1 = new MyFinalChild();
myFinal1.showMessage();
finalChild1.showMessage();
String string = "";
System.out.println(string);
MyFinal myFinal2 = new MyFinal();
MyFinal finalChild2 = new MyFinalChild();/*用“父类声明子类对象” 会 “自动向上转型”*/
myFinal2.showMessage();
finalChild2.showMessage();
}
下面是结果:
[img]http://dl.iteye.com/upload/picture/pic/95068/5b40fd6c-cf89-39e0-b595-8ab642e25b66.png[/img]
其实上面并不是以前学的多态,多态是对于非静态属性与方法的,当使用了static修饰的 静态属性与方法,至于对象前面的类名有关,所以用类名MyFinal修饰对象或子类对象时,结果是一样的……..
四. 变量引用:super、this
Super和this的作用差不多,两者都用在类的构造器里,而且只能使用一次,且只能放在第一行,否则会有错误提示:
”Constructor call must be the first statement in a constructor”
使用方法在上一部分的代码里就有,所以就不赘述..
以上只是我稍微了解的部分的,还有好一些暂不了解,以上写的不对的地方,大家指正…..