关于java:Java基础知识学习心得

44次阅读

共计 2978 个字符,预计需要花费 8 分钟才能阅读完成。

一、八种根本类型

1. 取值范畴

2. 字面值前缀

0b:二进制
0x:十六进制
0:八进制
u char 类型十六进制

3. 运算规定

  • 后果类型与运算中的最大类型统一
  • byte、short、char 三种比 int 小的整数,计算时会主动转成 int(自增自减不会转换;有 long 型时,转 long 型)
  • Integer.MAX_VALUE+ 1 得正数的最小值
  • 浮点数运算不精确
    计算机所有数据的表现形式都是二进制,浮点数精度不精确的起因是十进制转换成二进制导致的。上面回顾一下十进制与二进制的互相转换过程。
10010 = 0 * 2^0 + 1 * 2^1 + 0 * 2^2 + 0 * 2^3 + 1 * 2^4 = 18

// 十进制转二进制
18 / 2 = 9  …….0
9 /2 = 4 ……….1
4 / 2 = 2……… 0
2 / 2 = 1 ………0
1 / 2 = 0……… 1
后果
10010

下面是整数之间的转换过程,上面看一下小数之间是如何转换的。

10.01 = 1 * 2^-2 + 0 * 2^-1 + 0 * 2^0 + 1 * 2^1 = 2.25

// 十进制转二进制
// 整数局部
2 / 2 = 1…….0
1 / 2 = 0…… 1
// 小数局部
0.25 * 2 = 0.5…..0
0.5 * 2 = 1 ……..1
后果
10.01

为什么有的浮点数会有精度不精确的问题,以 2.1 为例,看一下十进制转成二进制是什么样子的。

2 / 2 = 1……0
1 / 2 = 0……1

// 小数局部
0.1 * 2 = 0.2……0
0.2 * 2 = 0.4……0
0.4 * 2 = 0.8……0
0.8 * 2 = 1.6……1
0.6 * 2 = 1.2……1
0.2 * 2 = 0.4……0
……..

2.1 转成二进制会陷入有限循环中,而计算机在存储小数时是有长度限度的,会截取局部小数进行存储,从而导致计算机存储的数值只能是个大略的值,而不是准确的值。计算机根本无法应用二进制来准确的示意 2.1 这个小数,计算必定也有问题。
精度失落的解决办法

应用 BigDecimal 计算,传入的参数肯定要转换成字符串,不然还是有坑。

4. 运算符

&&:逻辑与(短路与),右边是假,左边疏忽不执行
&:不论右边什么后果都要执行左边
||:逻辑或(短路或),右边是真,左边疏忽不执行

二、根本类型的包装类

1.Integer

  • Integer 类中存在 256 个缓存对象,从 -127~128;如果拜访这个范畴内的值,会拜访缓存对象,超出范围,会新建对象

三、流程管制

1.switch

  • 反对的类型有 byte、short、int、char 及这四种类型对应的包装类,以及 String 和枚举类型。枚举类有一个 ordinal 办法,该办法实际上是一个 intl 类型的数值,String 类型有一个 hashCode 算法,后果也是 int 类型。所以总的来说,能够认为 switch 中只反对 int。
  • switch 的值不能是 null,case 子句中也不能是 null
  • case 子句的值不能反复,会产生编译谬误
  • 如果一个 case 条件成立,之后会无条件的执行前面所有的 case 和 default 直到完结,或者遇到 break 跳出循环;如果所有条件都不成立,则执行 default

四、数组

1.Arrays 数组工具类

其中封装了一些对数组的排序、查找、复制等操作

五、变量

1. 局部变量

  • 定义在办法或部分代码块中,必须初始化,第一次赋值时分配内存空间

2. 成员变量

  • 定义在类中,主动初始化默认值

3. 为什么局部变量须要初始化,而成员变量不须要?

成员变量的赋值和取值的先后顺序具备不确定性,这是在运行时产生的,编译器确定不了,所以交给 JVM 来进行初始化;而局部变量的拜访程序是能够确定的,为了避免不可预期的状况产生,做的一种束缚。

六、Object 类

1. 概念

  • 是所有类的父类

2. 办法

  • toString():取得一个对象的字符串示意,默认是“类名 @地址”,可在子类中重写该办法
  • equals():判断内存地址是否相等

七、String 类

1. 概念

  • 是封装 char[]数组的对象
  • 第一次应用一个字符串常量时,会在字符串常量池中新分配内存,之后应用雷同的字符串时,间接拜访常量池中存在的对象,不会反复创立

2.equal 和 ==

  • == 比拟的是内存地址
  • String 重写了 Object 的 equal 办法,比拟的是值

3.StringBuilder

  • 线程不平安,效率高

4.StringBuffer

  • 线程平安

八、抽象类

  • 能够有构造方法
  • 能够有具体方法
  • 蕴含形象办法的类肯定是抽象类,形象办法必须由 abstract 润饰,必须由子类实现
  • 不能用 new 来创立实例
  • 能够继承抽象类,也能够继承一般类

九、final

  • 内存地址不可变,能够润饰常量、类、办法
  • final 常量:值不可变。不过对于援用类型来说,保留的是地址,所以内容可变
  • final 办法:不能被子类笼罩。private 办法不能被子类笼罩,因而 private 默认是 final 类型的
  • final 类:不能被继承,没有子类

十、static

  • 共享的数据
  • 动态成员属于类,而不属于实例
  • 静态方法不能间接调用非静态方法,只能由实例调用
  • 动态块,只会在类被加载时,执行一次
  • 动态变量保留在办法区中,被所有实例共享

十一、面向对象

1. 基本概念

1)类:类中定义对象的成员变量、成员办法。类第一次应用时会加载到办法区。
2)对象:从类中创立的具体实例。新建实例时,在堆内存中会分配内存空间给这个实例。
3)援用变量:在栈中保留一个实例的内存地址(堆中实例的地址),援用变量保留在栈。null 不保留任何实例的内存地址。

4)构造方法:新建实例对象时,立刻执行的一个非凡办法,可重载
5)this

  • 当一个对象创立后,JVM 会给对象调配一个援用本身的指针,这个指针就是 this,示意以后对象的援用
  • this 只能在非动态的办法中应用
  • 用于辨别同名变量
  • 只能在构造方法中通过 this 来调用其余构造方法,一般办法中不能应用;不能通过 this 递归调用构造方法;调用其余构造方法时,必须放在第一行
  • 因为 super 办法调用父类的构造函数也必须放在第一行,所以 super 和 this 不能同时呈现在构造方法中
  • this 拜访类的成员变量和成员函数时不受拜访权限的管制,包含 private 的变量和办法
  • 在继承关系下,父类中的 this 关键字示意如下:
  • this(paras…)拜访其余构造方法:拜访的始终是父类的构造方法;
  • this.XXX 拜访类中的成员变量:拜访的始终是父类中的成员变量;
  • this.yyy(paras…)拜访类中的成员办法:如果子类重写了该办法,则拜访的是子类的办法;否则拜访的是父类的办法;

6)super 和 this 的异同:

  • super 是子类中拜访父类成员的一个桥梁,而 this 是一个对象的援用
  • 当子类笼罩了父类的成员变量,或重写了父类的成员办法时,通过 super 还可能拜访到
  • 都不能在静态方法中应用

7)继承:只能继承一个父类;构造方法和公有成员不能被继承
8)办法重写:子类重写父类的办法,办法名、参数的个数和类型、返回值类型必须都雷同
9)多态

  • 一个对象具备多种状态的体现,多态的前提是必须有继承
  • 向上转型:子类的实例转换成父类型。只能调用父类定义的通用成员,子类特有成员被暗藏
  • 向下转型:曾经转换成父类型的子类实例

2. 对象加载的过程

1)加载类

  • 加载父类,为父类动态变量分配内存
  • 加载子类,为子类动态变量分配内存
  • 执行父类动态变量的赋值运算和动态初始化块
  • 执行子类动态变量的赋值运算和动态初始化块

2)新建实例

  • 新建父类实例,为父类实例变量分配内存
  • 新建子类实例,为子类实例变量分配内存
  • 执行父类的实例变量赋值运算和构造方法
  • 执行子类的实例变量赋值运算和构造方法

正文完
 0