JAVA基础知识

来源:互联网 发布:mac air防火墙设置在哪 编辑:程序博客网 时间:2024/05/19 13:27
<一>关键字
由以下关键字修饰的变量、方法和类所具有的特性如下:
● public    包内及包外的任何类中均可访问
● private    包内及包外的任何类中均无权访问
● protected    包内的任何类以及包外的那些继承了此类的子类中均可访问
● friendly    如果不以如上关键字修饰,则默认为friendly类型,包内的任何类中均可访问,包外的任何类中均无权访问


● static关键字(只讨论静态变量)
当出现如下情况的时候可以考虑使用这个关键字:
只想为某特定数据分配一份存储空间,而不去考虑究竟要创建多少对象,或是根本不创建任何对象;或者希望某个方法不与包含它的类的任何对象关联在一起(即使没有创建对象,也能够调用这个方法)。
该关键字的具体特点如下:
1>为每一个静态变量只分配一块存储空间,所有此类的对象都可以操控此块存储空间
2>在其它类中,该类被实例化的多个不同的对象,访问到的也会是同一块存储空间
3>初始化时static定义的变量会优先于任何其它非static变量,不论其出现的顺序如何
4>static{}里面的代码是进行显式的静态变量初始化,这段代码只会初始化一次,且在类被第一次装载时
5>在涉及到继承的时候,会先初始化父类的static变量,然后是子类的,依次类推
具体可参考如下代码,以及运行结果:
public class NeuStatic {
  static String str="Init";
  public NeuStatic(String arg){
    str=arg;
  }
}
public class NeuMain {
  private NeuStatic obj_1=new NeuStatic("obj_1");
  static NeuStatic obj_2,obj_3;
  static{
    print(NeuStatic.str);
    obj_2=new NeuStatic("obj_2");
    obj_3=new NeuStatic("obj_3");
  }
  public static void print(String arg){
    System.out.println(arg);
  }
  public static void main(String args[]){
    print(obj_2.str);
    print(obj_3.str);
  }
}
运行结果如下:
Init
obj_3
obj_3

<二>重写  重载  多态
1>重写:重新实现父类中的方法
2>重载:父类和子类中可以出现一些名称相同、参数类型不同、参数数目不同、返回值类型不同的方法,但是这些方法不会出现重写或者与同类中的方法命名冲突
3>多态:是一种机制,在类的继承中得以实现,在类的方法调用中得以体现。如下代码实现了多态的机制:
public class Shape {
  void draw(){}
  void erase(){}
}
public class Circle extends Shape {
  void draw(){
    System.out.println("+------ Circle.draw() ------+");
  }
  void erase(){
    System.out.println("+------ Circle.draw() ------+");
  }
}
public class Square extends Shape {
  void draw(){
    System.out.println("+------ Square.draw() ------+");
  }
  void erase(){
    System.out.println("+------ Square.draw() ------+");
  }
}
public class RandomShape {
  private Random random=new Random();
  public Shape next(){
    switch(random.nextInt(2)){
    default:
    case 0: return new Circle();
    case 1: return new Square();
    }
  }
}
public class Shapes {
  private static RandomShape shape=new RandomShape();
  public static void main(String[] args) {
    Shape s[]=new Shape[6];
    for(int i=0;i〈s.length;i++){
      s[i]=shape.next();
      s[i].draw();
    }
  }
}

原创粉丝点击