疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java学习笔记类


 

   

  1.四种访问控制符

  private、不指明、protected、public

  2.构造函数没有返回值

  是因为构造函数默认返回的是类的实例对象。所以不需要写返回值

  3.static

  static表示类拥有。实例:

  public class A

  {

  public void a()

  {

  System.out.println("a");

  }

  public void b()

  {

  this.a();

  }

  }

  这样写是没有问题的,但是如果我们改一改,改成这样:

  public class A

  {

  public void a()

  {

  System.out.println("a");

  }

  public static void b()

  {

  this.a();

  }

  }

  因为b()是类拥有,所以可以这样访问A.b(),但此时会出问题,因为b方法中用了this对象,但是从来就没有创建过对象,所以根本就不存在this对象。

  结论:静态成员不能直接访问非静态成员

  4.形参个数可变的方法要放在方法最后。例如:public void test(int a, String... s)

  5.成员变量和局部变量

  系统自动为成员变量分配内存空间,并在分配内存空间后,自动为成员变量指定初始值。

  局部变量定义后,必须经过显式初始化后才能使用,系统不会为局部变量执行初始化。

  6.package、import、import static

  实例:

  package lee;

  public class Hello

  {

  public static void main(String[] args)

  {

  System.out.println("Hello World!");

  }

  }

  如果直接使用javac Hello.java命令来编译这个文件,将会在当前路径下生成一个Hello.class文件,而不会生成lee文件夹。

  如果使用java -d Hello.java命令编译,则会产生lee文件夹.

  推荐编译时总是使用-d选项

  可以用import导入相应的包中的单个类,或全部类

  可以用import static 导入指定类中单个或全部的静态Field和方法。

  7.类的继承

  关键字extends。

  重写父类方法,即子类重写父类方法。

  规则是:方法名相同、形参列表相同;子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应该比父类方法声明抛出的异常类更小或相等;子类方法访问权限应比父类方法访问权限更大或相等。

  如果需要在子类方法中调用父类被覆盖的实例方法,则可使用super限定来调用父类被覆盖的实例方法。

  子类调用父类构造函数,使用super调用父类构造函数,必须出现在第一行

  8.多态

  java引用变量有两个类型:编译时类型、运行时类型

  编译时类型:指声明变量明指定的类型

  运行时类型:指给变量赋值时的类型

  如果两个类型不同,则称为多态。实例:

  class BaseClass

  {

  public int a = 6;

  public void base()

  {

  System.out.println("父类的普通方法");

  }

  public void test()

  {

  System.out.println("父类的被覆盖的方法");

  }

  }

  public class SubClass extends BaseClass

  {

  public String a = "java";

  public void test()

  {

  System.out.println("子类的覆盖父类的方法");

  }

  public void sub()

  {

  System.out.println("子类的普通方法");

  }

  public static void main(String[] args)

  {

  BaseClass ploymophicBc = new SubClass();

  System.out.println(ploymophicBc.book);

  ploymophicBc.base();

  ploymophicBc.test();

  // ploymophicBc.sub(); 这里会出错,因为BaseClass类没有提供sub方法,所以下面代码编译时会出现错误

  }

  }

  9.强制类型转换

  编写java程序时,引用变量只能调用它编译时类型的方法,而不能调用它运行时类型的方法,即使它实际所引用的对象确实包含该方法。如果需要让这个引用变量调用它运行时类型的方法,则必须把它强制类型转换成运行时类型,强制类型转换需要借助于类型转换运算符。

  10.instanceof

  instanceof运算符的前一个操作数通常是一个引用类型变量,后一个操作数通常是一个类(也可以是接口),它用于判断前面的对象是否是后面的类,或者其子类、实现类的实例。如果是,则返回true,否则返回false.

  通常先用instanceof判断一个对象是否可以强制类型转换,然后再进行强制类型转换。

  11.继承与组合

  继承与组合同时都能满足复用类的要求。到底是用继承还是用组合呢?

  继承要表达的是一种“is-a"的关系,而组合表达的是"has-a"的关系。

  12.初始化块

  [修饰符]{

  ...

  }

  修饰符只能是static。修饰符只在创建java对象时隐匿执行,而且在执行构造器之前执行。

  普通的初始化块、声明实例Field指定的默认值都可认为是对象的初始化代码,它们的执行顺序与源程序中的排列顺序相同。

  静态初始化块,如果用static修饰初始化块,则初始化块成了静态初始化块,静态初始化块是属于类的。