Java2

暑假预热

Posted by Oven on June 10, 2017

前言

java知识对于Android程序员来说也是十分重要的

###复习:对象的创建和使用

  • 必须用new关键字创建对象
  • 使用对象.成员变量或方法(参数列表)来调用对象方法
  • 同一个类的每个对象有不同的成员变量存储空间
  • 非静态方法是针对每个对象进行调用 不加static的方法,必须new一个对象才能调 ###关于内存空间
  • 栈内存:放方法的局部变量,在方法调用结束以后,会消失
  • 堆内存:放new出来的对象,没有引用的对象,会被清理 ###this关键字
  • 表示使用该方法对象的引用,指向自身的引用 可理解为支对支的引用,可在该类的一个方法中直接引用另一个方法。
  • 可以省略
  • 有时可以用this处理方法中成员变量和参数重名的情况 当确定不了变量指的是对应哪个声明时,就近声明原则。 ###static关键字
  • 在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static对象只有一份,保存在data_seg里,不再在堆上。
  • 用static声明的方法为静态方法,在调用该方法时不会将对象的引用传递给它,所以在static方法中,不可访问非静态成员,非静态的方法专属于对象,想调用则要new一个对象出来
  • 可以通过对象引用或类名访问静态成员
  • 可以结合自加用来计数

    非静态和静态的很大区别就在于此, 1.当成员变量不再是静态的时候,其值会一次次被重新定义,(这和C语言里面,我对与static的理解很像,但其本质的区别是存储位置) 2.必须创建对象才能被调用,而静态可以直接被调用 ###前面几节的历史遗留问题

  • 好吧,我也不造这是啥问题,记完再归类吧
  • 除了四类八种(int,long,short,byte,double,float,char,boolean)外,都是引用类型,会在栈上建立一块空间用于引用堆上的对象里的对应部分,字符串常量也放在data_seg里,若形参指向字符串,则对象中对应量也将指向字符串。 *我的天,原来C也是这样么(捂脸
  • 动态的在栈,new出来的对象,分配内存在堆,常量在data,其余在代码区 ###package和import
  • 包的存在是为了避免不同开发者起名重复,包的名字默认是com.公司域名,域名不能重复所以包名就不会重复了。
  • com.公司域名.项目名.你想叫啥.还可以往下写
  • import是引入,开头写上import包名.类,就可以直接使用该类或者import.*可以用该包所有

    总结:

    如果要把类放在包里,package,编译出来的class文件存放位置必须与包名一致,class必须最上层的位于classpath 想在另一个类里用必须写全名字 执行一个类也要写全 ####类的继承和权限控制 java中使用extends关键字实现类的继承, 修饰符+class+类名+extends+父类{

  • 通过继承,子类自动拥有基类的所有成员,子类要比父类要大
    访问控制

| 修饰符 |类内部| 包 |子类|任何| | ——– | :—–: | :—-: | | private |O|X|X|X| | default |O|O|X|X| | protected |O|O|O|X| | public |O|O|O|O| ####对于class的权限修饰只可以用public和default

  • public类可以在任意地方被访问
  • default类只可以被同一个包内部的类访问 ####方法的重写
  • 在子类中可以根据需要对从基类中继承来的方法进行重写
  • 重写方法必须和被重写方法有一样的返回值,参数表和方法名
  • 重写方法不能使用比被重写方法更严格的访问权限,就范围不能缩小 ####Super关键字
  • super指引用子类所继承的父类中的方法
  • 子类必须调用父类的构造方法,先有爸爸才有你
  • 子类可以在自己的构造方法中使用super(argument_list)调用
  • 如果用super必须写在子类构造方法第一行 ####动态绑定与多态 动态绑定是指在执行期间,判断所引用对象实际的类型,根据其实际的类型调用其相应的方法 随着new出来的对象而更改方法 所以才说

    多态的条件 1.要有继承 2.要有重写 3.父类引用指向子类对象 ####抽象类

  • 用abstract关键字来修饰一个类时,这个类叫做抽象类,用abstract来修饰一个方法时,就叫抽象方法
  • 含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写
  • 抽象类不能被实例化,就不能new
  • 抽象方法只需声明,而不需实现 抽象类的存在意义就是被继承 ####final关键字
  • final的变量值不能被改变,egfinal的成员变量,final的局部变量(形参)
  • final的方法不能够被重写
  • final的类不能够被继承 ####接口 为了解决单继承,接口是抽象方法和常量值的定义的集合,可视为一种特殊的抽象类,这种抽象类只有变量和方法的定义,没有变量和方法的实现

    public interface Runner{ public static final int id = 1; public void strart(); public void run(); public void stop(); } 接口可以多重实现,一个类可以实现多个接口 尽量不要实现两个有重名的方法的类 ####异常的概念

  • Java异常是Java提供的处理程序运行期出现的错误的方法
  • 感觉跟编译器报错差不多(数组下标越界,除零)
  • 设计良好的程序应该在出错的时候提供处理错误的方法,友好一点
  • 发生异常事件会抛出异常 (throw)
  • 可以用try,尝试运行某段,通过catch( ae){处理这个异常的方法}
    try{
      System.out.println(2/0);
      } catch(ArithmeticException ae){
      System.out.println("系统正在维护中,请与管理员联系");
      ae.printStackTrace();
      }