Java学习之路08

2017-11-15  本文已影响11人  没想好昵称呵

Java学习笔记08

工具类中使用静态

public class ArrayTool {
    //将构造方法私有化,外界就不能再创建对象了
    private ArrayTool() {
        // TODO 自动生成的构造函数存根
    }
    public static void printArray(int[] arr) {
        for(int x = 0;x < arr.length;x++) {
            if(x == arr.length -1) {
                System.out.println(arr[x]);
            
            }else {
                System.out.println(arr[x] + "---");
            }
        }
    }
}

说明书的制作

  1. 写一个工具类
  2. 对这个类加入文档注释
    示例代码
/*
 * 这是针对数组进行操作的工具类
 * @author lhk
 * @version V1.0
 */
public class ArrayTool {
    //将构造方法私有化,外界就不能再创建对象了
    /**
     * 这是私有构造
     */
    private ArrayTool() {
        // TODO 自动生成的构造函数存根
    }
    
    /*
     * 这是遍历数组的方法
     * @param arr 这是要被遍历的数组
     */
    public static void printArray(int[] arr) {
        for(int x = 0;x < arr.length;x++) {
            if(x == arr.length -1) {
                System.out.println(arr[x]);
            
            }else {
                System.out.println(arr[x] + "---");
            }
        }
    }
    /*
     * 这是获取数组中最大值的方法
     * @param arr 这是获取最大值的数组
     * @return int 返回数组中的最大值
     */
    public static int getMax(int[] arr) {
        int m = arr[0];
        for(int x = 1;x < arr.length;x++) {
            if(arr[x] > m) {
                m = arr[x];
            }
        }
        return m;
    }
}
  1. 用工具解析文档注释
    javadoc工具
  2. 格式
    javadoc -d 目录 -author -version ArrayTool.java
    目录:就可以写一个文件夹的路径

如何使用帮助文档

  1. 打开帮助文档
  2. 点击显示,找到索引,看到输入框
  3. 知道你要找谁?以Scanner举例
  4. 在输入框里面输入Scanner,然后回车
  5. 看包
    java.lang包下的类不需要导入,其他的全部需要导入
    要导入:
    java.util.Scanner
  6. 再简单的看看类的解释和说明,别忘了看看该类的版本
  7. 看类的结构
    成员变量,字段摘要
    构造方法 ,构造方法摘要
    成员方法 ,方法摘要
  8. 学习构造方法
    A:有构造方法 就创建对象
    B:没有构造方法 成员可能都是静态的,所以都是随着类的加载而存在,不会随着对象的创建而创建,所以不需要构造方法。
  9. 看成员方法
    A:左边
    是否静态:如果静态,可以通过类名调用
    返回值类型:人家返回什么,你就用什么接收
    B:右边
    看方法名:方法名称不要写错
    参数列表:人家要什么,你就给什么;人家要几个,你就给几个

代码块的概述和分类

  1. 处于局部位置,用于限定变量的生命周期
  1. 在类中的成员位置,用{}括起来的代码,每次调用方法执行前,都会先执行构造代码块
  2. 作用:可以把多个构造方法中的共同代码放在一起,对对象进行初始化
  1. 在类中的成员位置,用{}括起来的代码,只不过它用static 修饰了
  2. 作用:一般是对类进行初始化
  1. 它们的执行顺序为:
    静态代码块---构造代码块---构造方法
    静态代码块:只执行一次
    构造代码块:每次调用构造方法都执行
class Code {
    //静态代码块
    static{
        int a = 104;
        System.out.println(a);
    }
    //构造代码块
    {
        int x = 1024;
        System.out.println(x);
    }
    
    public Code() {
        System.out.println("code");
    }
    
    {
        int x = 102;
        System.out.println(x);
    }
}

public class CodeDemo {
    public static void main(String[] args) {
        //局部代码块,用于限定变量的生命周期
        {
        int x = 10;
        System.out.println(x);
        }
        System.out.println("-------");
        Code c = new Code();
        System.out.println("-------");
        Code c2 = new Code();
    }
}

继承的引入

//继承格式如下
class Fu{
    String name;
    int age;
    public Fu() {

    }

    public void eat() {
        System.out.println("lhk");
    }
}

class Zi extends FU {
    public Zi() {

    }
}
  1. 提高代码的复用性
  2. 提高代码的维护性
  3. 让类与类之间产生了关系,是多态的前提(这也是一个弊端,因为类的耦合性增强了)

开发的原则:低耦合,高聚合。
耦合:类与类的关系
内聚:就是自己完成某件事的能力

Java中类的继承特点

class G {
    public void show() {
        System.out.println("lhk");
    }
}

class F extends G {
    public void method() {
        System.out.println("ppn");
    }
}

class S extends F {
    
}

public class ExtendsDemo {
    public static void main(String[] args) {
        S s = new S();
        s.method();
        s.show();
    }
}

继承的注意事项

this 和 super 的区别和应用

  1. 调用构造方法

this(...) 调用本类的构造方法
super(...) 调用父类的构造方法

class F2 {
    public int num = 10;    
}

class S2 extends F2 {
    public int num = 20;
    
    public void show() {
        int num = 30;
        System.out.println(num);
        System.out.println(this.num);
        System.out.println(super.num);
    }
}
public class ExtendsDemo2 {
    public static void main(String[] args) {
        S2 s = new S2();
        s.show();
    }
}

继承中构造方法的关系

原因:因为子类会继承父类中的数据,可能还会使用父类中的数据,所以子类初始化之前,一定要先完成父类数据的初始化
注意:子类每一个构造方法的第一条语句默认都是:super();

class F3 {
    public F3() {
        System.out.println("F3的无参构造方法");
    }
    
    public F3(String name) {
        System.out.println("F3有参");
    }
}

class S3 extends F3 {
    public S3() {
        System.out.println("S3的无参构造方法");
    }
    
    public S3(String name) {
        System.out.println("S3有参");
    }
}
public class superDemo {
    public static void main(String[] args) {
        S3 s = new S3();
        System.out.println("------");
        S3 s2 = new S3("lhk");
        
    }
}

继承中构造方法的注意事项

  1. 在父类中加一个无参构造方法
  2. 通过super关键字去显示调用父类的带参构造方法
  3. 子类通过this关键字去调用本类的其他构造方法(子类中一定要有一个去访问了父类的构造方法,否则父类数据就没有初始化)
  4. 注意:this和super的使用必须出现在第一条语句上,如果不是放在第一条语句上,就可能对父类数据多次初始化引起报错
  5. 代码示例
class F4 {
    //public F4() {
        
    //}

    public F4(String name) {
        System.out.println("F4带参构造");
    }
}

class S4 extends F4 {
    public S4() {
        super("lhk");
        System.out.println("S4的无参构造");
    }
    
    public S4(String name) {
        //super("lhk");
        this();
        System.out.println("S4的有参构造");
    }
}

public class ExtendDemo3 {
    public static void main(String[] args) {
        S4 s = new S4();
        System.out.println("------");
        S4 ss  = new S4("lhk");
    }
}

继承中的面试题2

class F5 {
    static {
        System.out.println("lhk");
    }
    
    {
        System.out.println("ppn");
    }
    
    public F5() {
        System.out.println("jjj");
    }
}

class S5 extends F5{
    static {
        System.out.println("hsf");
    }
    
    {
        System.out.println("al");
    }
    
    public S5() {
        System.out.println("qjx");
    }
}
public class ExtendDemo4 {
    public static void main(String[] args) {
        S5 s = new S5();
    }
}

继承中的面试题3

  1. 成员变量的初始化
    默认初始化
    显示初始化
    构造方法初始化
  1. 先进行父类初始化,然后进行子类初始化
  2. 问题:虽然子类中的构造方法默认有一个super(),但初始化的时候,不是按照那个顺序进行的。而是按照分层初始化进行的,它仅仅表示要先初始化父类数据,再初始化子类数据。
  3. 代码示例:
class X {
    Y b = new Y();
    X() {
        System.out.print("X");
    }
}

class Y {
    Y() {
        System.out.print("Y");
    }
}
public class Z extends X {
    Y y = new Y();
    Z() {
        //super();
        System.out.print("Z");
    }
    public static void main(String[] args) {
        new Z();
    }
}
//输出YXYZ

方法重写

class Phone {
    public void call(String name) {
        System.out.println(name);
    }
}

class NewPhone extends Phone{
    public void call(String name) {
        //System.out.println(name);
        super.call(name);
        System.out.println("听天气预报了");
    }
    
}
public class ExtendsDemo6 {
    public static void main(String[] args) {
        NewPhone np = new NewPhone();
        np.call("lhk");
    }
}

方法重写的注意事项

  1. 因为父类私有方法子类根本就无法继承
  1. 最好一致
class F7 {
    //public void show() {}
    void show() {
        System.out.println("show lhk");
    }
}

class S7 extends F7 {
    //private void show() { 
    //}
    
    void show() {
        System.out.println("show ppn");
    }
}

public class ExtendsDemo7 {
    public static void main(String[] args) {
        S7 s = new S7();
        s.show();
    }
}
上一篇 下一篇

猜你喜欢

热点阅读