Java基础扫盲

Posted Z|Star

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础扫盲相关的知识,希望对你有一定的参考价值。

本篇博文针对有其它编程语言基础,但未接触Java的读者。读完本篇博文,能够对Java面向对象的特性有个基本认识,基本掌握Java语法,看懂相关代码。

包名取名规范

包名=域名反向
例如:
域名:www.baidu.com
包名:com.baidu

方法的重载

重载:在一个类中,有相同的函数名称,但形参不同的函数。
形参不同,可以是数量不同,或者类型不同。
例如:

public static int max(int num1, int num2){...}

public static int max(int num1, int num2, int num3){...}

public static double max(double num1, double num2, double num3){...}

构造器

构造器作用,给New出的对象进行初始赋值。

无参构造

定义一个类Person

public class Person {
    public Person() {
    }
}

和类名相同的Person()就是无参构造。
有了无参构造之后,可以在main函数中new出对象。

 Person person = new Person();

有参构造

public class Person {

   String name;
   public Person() {
   }

   public Person(String name){
       this.name = name;
   }
}

这里在Person的构造中传递了参数name,于是在main中可以传递进具体的name。

public class Main {
    public static void main(String[] args) {
        Person person = new Person("zstar");
        System.out.println(person.name);
    }
}

注:有参构造必须存在空的无参构造,否则会报错。

封装

想象一台电视机,用户不能直接操纵内部的电路,但是却能够通过外面的按钮来间接的控制内部电路的变化。
封装就是同样的道理,内部的电路就是属性私有private,外部的按钮就是public方法。

重新修改Person类:

public class Person {

    private String name;
    public Person() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

在这个Person类中,name前加了private关键字,这代表着只有类的内部可以通过.name的方式来修改name。不加关键字则默认default,外部可以直接对它进行操作。
getName 和 setName 为两个public方法,外部可以直接调用这两个方法来实现目的。

进行测试:

public class Main {
    public static void main(String[] args) {
        Person person = new Person();
        person.setName("zstar");
        System.out.println(person.getName());
    }
}

意义:现在外部无法对内部的属性进行操作,保证了数据的安全性,方法内可以添加添加来对用户的输入进行限制。

注:Alt+INSENT 快捷键可以快速建立这两个方法。

继承

关键词:extends

保持上面的Person类不变,新建一个类Son。

public class Son extends Person {
}

再修改测试代码:

public class Main {
    public static void main(String[] args) {
        Son son = new Son();
        son.setName("zstar");
        System.out.println(son.getName());
    }
}

实例化的是Son这个对象,发现Son继承Person类后能够使用Person类的所有方法。

注:ctrl + H 可以查看当前类的继承树,一个类只能直接继承另一个类,所有的类都继承Object这个类。

关键词:super

通过super,可以在子类中调用父类的属性或方法。

给Person类新增一个方法:

    public  void print(){
        System.out.println("我是爹");
    }

修改Son类:

public class Son extends Person {

    public void print(){
        System.out.println("我是儿子");
    }

    public void test(){
        this.print();
        super.print();
    }
}

测试:

public class Main {
    public static void main(String[] args) {
        Son son = new Son();
        son.test();
    }
}

测试结果:

通过这个例子,可以发现,this.print调用了子类中的print方法,而super.print调用了父类中的方法。

注:父类中私有的private属性或方法被继承后无法访问,super调用父类的构造方法,必须在构造方法的第一个。

方法重写

当子类和父类有相同的方法(方法名一样,参数一样)时,可以在子类的方法上加上注解@override,对该方法进行重写,创建的对象均使用子类的方法。

多态

多态:同一方法可以根据发送对象的不同而采用多种不同的行为方式。

如果两个对象存在继承关系,可以进行对象的转换。
比如,Son 继承 Person

Son a = new Son();
Person b = new Son();

但父类不能直接调用子类的方法,可以通过强制转换实现。

((Son) b).方法

抽象类

如果遇到这种情况,想写一个类,但里面具体的方法没有想好怎么写,这时候就可以用到抽象类,使用关键词abstract。
例如,将Person()变成一个抽象类

public abstract class Person {
    public abstract void method();
}

如果Son类继承Person,那么Son必须重写父类中的抽象方法。

public class Son extends Person {

    @Override
    public void method() {
    }
}

父债子偿!

接口

Java中一个类只能继承一个类,如果有多个抽象类需要继承,那么就需要用到接口。
接口:约束和实现分离。

接口的意义:架构师可以将各种需要的功能设计出来,相当于搭建一个脚手架,使用接口interface给码农,码农写接口实现类,相当于干刷墙,搬砖这种具体活。

以上是关于Java基础扫盲的主要内容,如果未能解决你的问题,请参考以下文章

C++快速扫盲(基础篇)

DDD 基础知识扫盲篇

DDD 基础知识扫盲篇

服务组织协调神器-ZooKeeper基础扫盲

SQL基础知识扫盲

大数据技术扫盲,你必须会的这些点