java编程思想(随笔)

       一直都有听说这本书,朋友也都建议去认真看一看,可每次看到那么厚的一本书,就又随手丢到了一边。一转眼就来到了2018年,兜兜转转又捡起了这本书,想要突破现状,唯有一睹。。。

       初读此书,或有所获。趁着这段假期,计划好好的阅读一下,顺便在此留下自己的一些感悟和总结,记录是一个好的习惯,它会记录我们的生活,成为人生的一个印记!对于书中的内容我不会总结的很详细,只是对一些自己之前不是很熟悉或者很重要的内容做一下总结。


初读,略有所获

java.lang 是一个特定类,它会自动被导入到每一个java文件中。

equals()方法:如果在自己编写的类中,使用equals()方法对类进行比较时,需要使这个类覆盖equals()方法;

                             否则,equals()方法默认比较的是对象的引用。

java解释器运行过程:

  1. 找出环境变量CLASSPAT
  2. CLASSPAT用作查找.class文件的根目录
  3. 解释器获取包的名称并将每个句点替换成反斜杠,以从CLASSPAT根中产生一个路径名称(例如:package   foo.bar.baz变成foo\bar\baz或foo/bar/baz或其他,这一切取决于操作系统)
  4. 得到的路径会与CLASSPAT中各个不同的项进行连接,解释器就在这些目录中查找与你所要创建的类名称相关的.class文件

访问权限控制:

访问控制符同一个类同一个包不同包中的子类不同包中的非子类
public(公共的)truetruetruetrue
protected(受保护的)truetruetrue\
无访问控制符(默认的)truetrue\\
private(私有的)true\\\

多态

       作用:消除类型之间的耦合关系

       java中的所有方法都是通过动态绑定实现多态的,static方法和final方法(private方法属于final方法)除外,只有普通方法的调用才可以是多态的。构造器并不具有多态性(它们实际上是static方法,只不过该static声明是隐式的)。

class  StaticSuper{
    public static String staticGet(){
        return "Base staticGet()";
    }
    public String dynamicGet(){
        return "Base dynamicGet()";
    }
}

class  StaticSub extends StaticSuper{
    public static String staticGet(){
        return "Derived staticGet()";
    }
    public String dynamicGet(){
        return "Derived dynamicGet()";
    }
}

public class StaticPolymorphism{
    public static void mian(String[] args){
        StaticSuper sup = new StaticSub();
        System.out.println(sup.staticGet());
        System.out.println(sup.dynamicGet());

    }
}

答案:
    Base staticGet()
    Derived dynamicGet()

复杂对象调用构造器的顺序

  1. 调用基类构造器。这个步骤会不断地反复递归下去,首先是构造这种层次的根,然后是下一层导出类,等等,直到最底层的导出类;
  2. 按声明顺序调用成员的初始化方法;
  3. 调用导出类构造器的主体。
class Meal{
    Meal(){
        print("Meal()");
    }
}

class Bread{
    Bread(){
        print("Bread()");
    }
}

class Cheese{
    Cheese(){
        print("Cheese()");
    }
}

class Lettuce{
    Lettuce(){
        print("Lettuce()");
    }
}

class Lunch extends Meal{
    Lunch(){
        print("Lunch()");
    }
}

class PortableLunch extends Lunch{
    PortableLunch(){
        print("PortableLunch()");
    }
}

public class Sandwich extends PortableLunch{
    priate Bread b = new Bread();
    priate Cheese b = new Cheese();
    priate Lettuce b = new Lettuce();
    public Sandwich(){
        print("Sandwich()");
    }
    public static void main(String[] args){
        new Sandwich();
    }
}

答案:
    Meal()
    Lunch()
    PortableLunch()
    Bread()
    Cheese()
    Lettuce()
    Sandwich()

享元设计模式

  1. 核心概念:若一个系统里要多次调用一个创建复杂的对象,那么就共享一个拷贝的对象,而不必每次都去创建一个新对象。这样既节省了内存,又减小了JVM的压力。
  2. 目的:能够提高系统的性能。
  3. 角色:抽象享元—主要用于定义共享对象的业务需求;具体享元—具体的实现;享元工厂—用于创建具体的享元,维护相同的享元对象,维护一个列表。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值