java 编程的逻辑 读书笔记

2021-01-23  本文已影响0人  快感的感知

1.编程基础

所谓的程序,基本上就是告诉计算机要操作的数据和执行的指令序列,即对什么数据做什么操作,比如:
1.读文档,就是将数据从磁盘加载到内存,然后输出到显示器上;
2.写文档,就是将数据从内存写回磁盘;
3.播放音乐,就是将音乐的数据加载到内存,然后写到声卡上;
4.聊天,就是从键盘接收聊天数据,放到内存,然后传给网卡,通过网络传给另一个人的网卡,再从网卡传到内存,显示在显示器上。
5.总结:基本上程序很大一部分工作就是操作内存中的数据

1.1 Java 数据类型和变量

1.2 基本运算

1.3 函数

作用:计算机程序的一种重要结构,可减少重复代码,分解复杂操作

1.3.1 栈

函数调用主要是通过栈来存储相关的数据,栈是一块内存,先进先出类似桶,主要存放函数调用过程中需要的数据,包括参数,返回地址,以及函数内定义的局部变量,

1.4 理解数据背后的二进制

image
十进制 二进制 互转

29=2 x 10^1 + 9 x 10^0


image image

2.类

2.1重写(Override)与重载(Overload)

方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

class Animal{
   public void move(){
      System.out.println("动物可以移动");
   }
}
 
class Dog extends Animal{
   public void move(){
      System.out.println("狗可以跑和走");
   }
}

重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

public class Overloading {
    public int test(){
        System.out.println("test1");
        return 1;
    }
 
    public void test(int a){
        System.out.println("test2");
    }   
 
    //以下两个参数类型顺序不同
    public String test(int a,String s){
        System.out.println("test3");
        return "returntest3";
    }   
 
    public String test(String s,int a){
        System.out.println("test4");
        return "returntest4";
    }  
}
2.2 类加载过程

在Java中,所谓类的加载是指将类的相关信息加载到内存。在Java中,类是动态加载的,当第一次使用这个类的时候才会加载,加载一个类时,会查看其父类是否已加载,如果没有,则会加载其父类。

寻找要执行的实例方法的时候,是从对象的实际类型信息开始查找的,找不到的时候,再查找父类类型信息。

2.2.1 内存分为栈和堆,方法区

1.堆内存用来存放由new创建的对象和数组。
2.栈内存用来存放方法或者局部变量等
3.堆是先进先出,后进后出
4.栈是后进先出,先进后出
5.存放类的信息

2.2.2 Java继承是把双刃剑

子类和父类之间可能存在实现细节的依赖,如果子类不知道把基类的实现细节,就不能正确的进行扩展。

2.2.3 怎么避免继承,有三种方法:

使用final关键字
优先使用组合而非继承
使用接口

2.2.4使用final避免继承

我们提到过final类和final方法,final方法不能被重写,final类不能被继承,我们没有解释为什么需要它们。通过上面的介绍,我们就应该能够理解其中的一些原因了。

给方法加final修饰符,父类就保留了随意修改这个方法内部实现的自由,使用这个方法的程序也可以确保其行为是符合父类声明的。

给类加final修饰符,父类就保留了随意修改这个类实现的自由,使用者也可以放心的使用它,而不用担心一个父类引用的变量,实际指向的却是一个完全不符合预期行为的子类对象。

2.2.5 优先使用组合而非继承
public class Child {
    private Base base;
    private long sum;

    public Child(){
        base = new Base();
    }
    
    public void add(int number) {
        base.add(number);
        sum+=number;
    }

    public void addAll(int[] numbers) {
        base.addAll(numbers);
        for(int i=0;i<numbers.length;i++){
            sum+=numbers[i];
        }
    }
    
    public long getSum() {
        return sum;
    }
}
2.2.6 接口和抽象类
上一篇 下一篇

猜你喜欢

热点阅读