美文网首页
Java:学习总结

Java:学习总结

作者: 安公子_ | 来源:发表于2017-10-22 20:07 被阅读0次
  • 为什么有构造器的存在?
    一直以来,都构造器的设计初衷都感到不解,为什么设计Java时,有构造器这样的存在。一般在写c的时候,通常,我们对一个模块初始化的时候,都会时候一个函数初始化这个模块。所以Java直接引入构造器的概念来完成这个工作。

  • 枚举类型
    枚举类型的关键字是enum,实际上,和int、char等基本数据类型一样,也可以将enum创建的类看做是一种数据类型。数据的值有enum的成员决定。如:
enum Chars{
    A , B , C
}

这个枚举类型Chars表明;Chars只有3个可取数据。就相当于int型的数据只有整数一样。
使用数据的时候;

Chars a = Chars.A;
Chars b = Chars.B;
Chars c = Chars.C;

基本使用方法

    public static void foo6(){
        Chars a= Chars.A;
        // default case ; toString() method to use for all enum type
        // for example the following
        System.out.println(a);
        //others method; the usage of vaules() and ordinal() as follow 
        for (Chars i : Chars.values()) {
            System.out.println(i+" ordinal is " + i.ordinal());
        }

  • 代理(Proxy)
    有时候,我们希望给用户的接口屏蔽底层实现;这时候可以使用代理。如:
    我们有一个飞船的控制模块Control:
/**
how to use Proxy
*/

// this is a spaceship control module
class Controls{
    public void up(int velocity){}
    public void down(int velocity){}
    public void right(int velocity){}
    public void left(int velocity){}
    public void forward(int velocity){}
    public void back(int velocity){}
}

我们可以采用继承的方式实现一个飞船。

// a way to construct a spaceship is interheit

class SpaceShip{
    private String name;

    SpaceShip(String name){
        this.name = name;
    }

    public static void main(String[] args) {
        // this way can construct a spaceship through new keywords to create a object
        // but it will expose the implementation details of based control module
        SpaceShip spaceship = new SpaceShip("Racketer");
    }
}

但是这种实现方式有一个问题,其中的spaceship 对象将会暴露控制模块的实现,也就是会得到Controls的所有成员变量和成员方法。这是不希望的。用户模块SpaceShip可以得到Controls的任何的动作。
为了解决这个问题,使用下面的代理模式:

// otherwise way is apply Proxy to spaceship,
// it can hide the implementation of based control module

class SpaceshipProxy{
    private String name;
    // create a control module
    private Controls control = new Controls();

    SpaceshipProxy(String name){
        this.name = name;
    }

    public void up(int velocity){
        control.up(velocity);
    }
    public void down(int velocity){
        control.down(velocity);
    }
    public void right(int velocity){
        control.right(velocity);
    }
    public void left(int velocity){
        control.left(velocity);
    }
    public void forward(int velocity){
        control.forward(velocity);
    }
    public void back(int velocity){
        control.back(velocity);
    }

    public static void main(String[] args) {
        SpaceshipProxy protector = new SpaceshipProxy("protector");
        protector.back(100);
    }
}

可以看出,我可以得到Controls的所有动作,但是至于底层实现,却被屏蔽了,用户protector对象不能直接得到Controls的动作,而是通过SpaceshipProxy 得到的。
总之,代理就是:把直接的实现变为间接的实现。


  • @Override注解
    如果想在子类中覆写一个方法而不是重载,使用@Override注解。
class Homer{
    public char doh(char c){
        System.out.println("Homer----doh(char)");
        return 'd';
    } 
    public float doh(float f){
        System.out.println("Homer----doh(float)");
        return 1.0f;
    }
}

class M{}

class Sar extends Homer{

    public void doh(M m){
        System.out.println("Bar----doh");
    }
}

class Bar extends Sar{
    // when you want to over ride a method but not overload ; using annotation @Override
    @Override
    public void doh(M m){
        System.out.println("Sar----doh");
    }
}

public class Hide{
    public static void main(String[] args) {
        Bar bar  = new Bar();
        bar.doh(1.0f);
        bar.doh('a');
        bar.doh(new M());
    }
}

  • 向上转型(upcasting)
    在子类中用到父类的类型时,子类向父类转型。如:
class Instrument{
    public void play(){}
    public static void turn(Instrument i){
        System.out.println("Instrument---based class");
        i.play();
        System.out.println("Instrument---i.play()");
    }
}

// 当参数需要父类的时候,子类要转换成父类
public class Wind extends Instrument{
    public static void main(String[] args) {
        Wind w = new Wind();
        // upcasting
        Instrument.turn(w); 
    }
}

相关文章

  • java学习day04-方法和数组

    java学习第四天内容总结: 学习内容: 关注公众号:java进阶架构师,获取的学习视频 总结: 1、java...

  • Java的IO & NIO

    IO流学习总结一Java IO,硬骨头也能变软二java IO体系的学习总结三Java IO面试题 NIO与AIO...

  • Java学习总结之Java IO系统(二)

    本文接着Java学习总结之Java IO系统(一),我们继续总结Java IO系统的相关知识。 字符流(Write...

  • java学习oneday-工具

    java学习第一天内容总结: 学习内容: 关注公众号:java进阶架构师,获取的学习视频 总结: 1、 不仅知其...

  • java学习day05-数组高级

    java学习第五天内容总结: 学习内容: 关注公众号:java进阶架构师,获取的学习视频 总结: 1、方法参数:值...

  • java学习day06-面向对象认识

    java学习第六天内容总结: 学习内容: 关注公众号:java进阶架构师,获取的学习视频 总结: 1、软件生命周期...

  • Java[虚拟机]-Java内存区域学习总结

    Java[虚拟机]-Java内存区域学习总结 学习博客:java虚拟机内存区域的划分以及作用详解:https://...

  • Java第一天

    今天主要学习java基础,预计明天结束java基础课程。 然后总结一下今天java学习的知识点: 1.java拥有...

  • JAVA技能树

    JAVA核心技术总结 J2EE技术总结 工作和学习总结 大数据相关技术总结

  • Java思维理清思路

    Java思维导图 学习方法: 针对性学习 引导式学习 对比式学习 总结式学习 Java简介: 简单性,面向对象,分...

网友评论

      本文标题:Java:学习总结

      本文链接:https://www.haomeiwen.com/subject/irsnuxtx.html