Java日常学习笔记

20191008

  1. cpu包括控制单元和算术/逻辑单元
  2. cpu频率:来源于计算机内部时钟的电子脉冲。1Hz为一秒一个脉冲1GHz=1024MHz=1024*1024kHz=1024*1024*1024Hz (倍数可以大致理解为10^9)当前电脑一般都是2GHz以上。
  3. IT三大定律之摩尔定律:每一美元买到的电脑性能,每18-24个月翻一倍以上。(事实上现在)
  4. IT三大定律之安迪比尔定律:比尔拿走安迪给的。(IT硬软件厂商之间的关系)
  5. IT三大定律之反摩尔定律:IT公司今天和18个月以前卖掉同样多的、同样的产品,他的营业额就要降低一半。
  6. USB(universal serial bus):通用串行总线。
  7. 1字节(byte)= 8比特(bit),计算机中的存储单位都是字节(1B)。
  8. 像素密度衡量屏幕最准确,勾股定理得到的对角线像素数量/尺寸。
  9. 万维网<因特网<互联网

20191009

  1. JDK>JRE>JVM;JDK = JRE + Java的开发工具(javac jaca javadoc等);JRE = JVM +Java核心类库
  2. 之所以要配置环境变量,是想在任何文件路径下,都可以去执行一些操作。
  3. 常用命令行操作:cd md rd del cd.. cd/ 等
  4. 编译过程中的错误一般是语法结构错误;运行过程中的错误一般是内存问题这种跑出来才知道出问题的错误。

很难受,没保存丢失了1012的


20191014

  1. 对于编码器而言,编码解码都用一个标准不会出现问题,但是不用一个, 比如编码用UTF-8,解码用GBK,那么就会出现乱码。对于计算机发展而言,最常用的是UTF-8。
  2. 字节 1 2 2 4 4 8 8
  3. 自动类型提升:当容量小的数据类型变量与容量大的做运算,结果自动提升为容量大(表示数的范围)的数据类型。如byte→int→long→float→double.
  4. byte、char、short三种做运算时,为int结果(排列组合运算都为int)
  5. 强制类型转换为自动类型提升的逆运算:double d1 = 12.3; int i1 = (int)d1;

20191015

  1. long在没有超过int的时候,还是可以不加l的,但是float肯定要加f,因为不加默认是double,这是从大往小转。
  2. 对于整形常量,默认为int型。
  3. String不是基本数据类型,是引用数据类型,双引号,别的是单引号。String可以和全部八种基本数据类型做运算。连接运算:String info = numberStr + number;称为连接运算符。出现String就是连接符,否则加法。

20191024

  1. a+=2的主要用法在于不转换数据类型。
  2. 12 % (-5) = 2   -12 % (-5) = -2
  3. 最高效计算2*8:2<<3  或者 8<<1
  4. 求60十进制转换为16进制,先求一个位运算符&,即i = 60&15,得出的结果是60的二进制的最后四位,然后跟9比较的一个三元运算符...;然后右移四位,后续同理。

20191118

真的是太久没来学自己的东西了。。手都生了。

  1. a+=2的主要用法在于不转换数据类型

20191125

  1. 栈内存中数据使用完毕会自动释放
  2. 两种最简单的无限循环 for(;;){}   while(true){}
  3. int[] x = new int[3];  new出来的在对堆里面,x引用了数组,

20191205

  1. 对于成员变量而言,一般有设置和获取两种访问方法,比如setAge(int a){age = a;}和getAge(){return age;}
  2. 之所以这么麻烦保护成员变量,是因为这样可以在访问方式过程中加入逻辑判断等语句,以此提高代码健壮性

20191210

  1. 静态代码块的作用: 随着类的加载而执行,优先于主函数。只执行一次。
  2. 初始化顺序:默认初始化→显示初始化→代码块初始化→传入参数(构造函数初始化)Java日常学习笔记_第1张图片
  3. 非静态省略this.    静态省略类名.
  4. 类的方法在栈加载之后,会被释放(P81)
  5. 设计模式:常用的规律总结为模式,加快开发速度,偏思想,最行之有效的放大。共有23种
  6. 单例设计模式:一个类在内存中只存在一个对象

Java日常学习笔记_第2张图片

  1. 方法被调用只有两种方式:对象、类名。使用类名调用时,必须要静态
  2. 上面是饿汉式单例设计模式,下面说懒汉式:对象的延时加载:类进内存时,对象还没有存在,调用了getInstance方法,才建立了对象
  3. 饿汉式,开发一般用饿汉式,因为饿汉式安全简单,如果很多人同时调用,懒汉式容易出现问题,可以通过synchronize锁解决,不过这里也有个下图的优化,减少了锁的次数:

Java日常学习笔记_第3张图片

Java日常学习笔记_第4张图片


20191216

  1. 子类中至少要有一个构造函数去访问父类,默认是去访问父类中空参数的构造函数
  2. 父类方法被final之后,可以被子类调用,不用复写;而private方法不能被调用,直接隐藏了
  3. 当多个类出现相同功能,但是功能具体不一样,进行向上抽取,只抽取功能定义,而不抽取功能主题。使用抽象类解决
  4. 抽象类特点:抽象方法定义在抽象类中,方法和类都被abstract关键字修饰,抽象类不能用new创建对象,因为调用抽象方法没意义。抽象类中的抽象方法要被使用,必须由子类复写其所有抽象方法,如果没有覆盖所有抽象方法,那么该子类还是一个抽象类,这是因为如果不强制复写的话,就失去了这个抽象类规定的本质了。
  5. 抽象类里可以有非抽象方法,等于说这些方法不是强制去改变的,去复写的
  6. 总之,多了抽象方法,不可以实例化。如果不定义抽象方法, 这样是仅仅不让该类建立对象

Java日常学习笔记_第5张图片


20200120

最近看了异常的视频,总结一下:

异常定义:对问题的描述。将问题进行对象的封装。

异常体系:

Throwable

     | --Error

    |--Exception

        |--RuntimeException

体系特点:体系中所有类及建立的对象都具备可抛性,即可以被throw和throws关键字操作。只有异常体系具备这个特点

throw和thorws用法:throw定义在函数内,用于抛出异常对象。throws定义在函数上,用于抛出异常类,多个用逗号隔开

如果有throw抛出异常对象,并未进行try处理时,必须要在函数上声明,要不然编译失败。

但是Runtime除外,可以不声明。如果声明了,可以throws或者try两种处理。

 

异常有两种:编译时检测异常、运行时异常。

编译时异常:该异常在编译时,如果没有处理(没有抛出也没有try),编译失败,该异常被标识,代表可以被处理

运行异常:在编译时,不需要处理,编译器不检查,发生之后,建议不处理,让程序停止,需要对代码进行修正。

 

异常处理语句:

try {需要被检测的代码}

catch{处理异常的代码}

finally{一定会被执行的代码}(一般与资源有关)

三种形式:try catch ///  try catch finally /// try finally

 

finally通常是关闭资源代码,释放资源,但是finally有一种情况读不到,如果前面调用了System.exit(0)

 

自定义异常:定义类继承Exception或者runtimEexception

class MyException extends Exception{

    MyException(String message){super(message)}

}

目的是为了封装特有问题,可能与已存在的异常类型不够,因此来个继承。

----------------------------------------

异常的好处:

1.将问题进行封装

2.将正常流程代码和问题处理代码相分离,方便阅读

---------------------------------------

异常的处理原则:

1.处理方式两种

2.调用到抛出异常的功能时,抛出几个,处理几个,一个try对应多个catch

3.多个catch,父类放在最下面

4.catch内,需要定义针对性的处理方式,比如记录到日志之类。不能什么都不写,也不要简单printStackTrace

当捕获到的异常,本功能处理不了时,可以继续在catch中抛出

或者将异常转换再抛出相关异常。

总之这块和阅读者有关,或者说功能使用者吧。

------------------------------------------------

异常注意事项:

1.在子类父类覆盖时,子类抛出的异常必须是父类异常的子类或子集

2.如果父类或者接口没有异常抛出时,子类覆盖出现异常,只能try不能抛。

 

你可能感兴趣的:(Java日常学习笔记)