Java核心技术2

一、大数
安全计算一定要用大数值,首先double,float的精度问题。其符号位,指数位,尾数位的分配。如下图float的分配
double的分配
下面是一个精度代码实例

System.out.print(0.999999999999999f==1)//结果是true

所以金融类的精确数值不要用浮点数,除非你不拍被人打死。并且每一种基础类型都有它的大数值,同时也有包装类。
二、数组
数组一定是引用类型,但是其内存分配方式和基本类型相似,其如果声明为类域,其声明在堆中,如果是局部方法域其声明在栈中。并且其可以通过foreach结构进行迭代。因为其继承了collection。而collection要实现iteration方法。
匿名数组,匿名数组适用于只使用一次的情况。

三、深复制 和 浅复制
浅复制只是进行了地址指向,但是并没有进行真正的空间赋值。引用类型的赋值就是这样的。深复制。指的是没有直接进行空间指向,而是进行了内容的赋值。就比如基础类型的赋值。所以等于有两种形式。
四、排序功能
数组封装了基础的排序功能,Java的排序方法1.7开始是快排,之后通过方法,采用的是python的TimSort算法。类对象可以通过重写的算法来实现这个功能。
五、二维数组
二维数据可以有不规则数组。就是不一定是矩阵类型的。
六、面向对象 详细说明
在我们的开发过程中,有时需要一种不同于汇编语言和c语言的解决思路,以往的思路,处理事务时,我们更多是思考业务流程。由此进行变成,之后通过简单的引用 合并编译的形式达到功能复用。但是面向对象的形式,的程序设计思路如下,是在思考完功能过程中更多是从 功能架构上,我们会最先考虑的是功能封装,和重用,恰恰业务是最后考虑如何实现。 oop的主要设计上,加强了功能重用,接口封装,功能重写。由此产生了静态,权限控制,继承,重写,重载,泛型,包控制。同时产生一系列的开发标准。单一职责原则,里氏替换原则,依赖倒置原则,接口隔离原则,迪米特法则,开放闭合原则。

https://blog.csdn.net/calledwww/article/details/79294656 这时原则介绍

之后就有了一系列的设计模式,如代理模式,工厂模式,消费者生产者模式,装饰模式,适配器模式,单例模式,超级工厂模式,组合模式等等。
七、静态
从需求设计过程中,我们需要属于同一类的对象之间进行资源和信息的共享,但是对象是通过类的实例化形成的,没有Static的修饰的域和方法是依赖于对象的,如果想要进行对象信息进行共享就需要进行值传递,但是这种方式是复杂的,不利于管理的。static修饰过就不一样,他的定义和声明是再方法区中的类信息中,其中static有关的域已经初始化,之后会随着对象使用的时候进行运行时栈加载,这些静态的域信息是加载在方法区里面的类信息里面。详细的内存结构发布在。

https://blog.csdn.net/qq_40628645/article/details/106518302

因为其加载一次,为了方便其在加载完成就进行类初始化,所以final和static组合使用。
八、值传递
Java只有值传递,值传递就是其在入参时传递的变量的内存值,而不是其指向地址。 如果是指向地址,不进行内存值赋值,就是引用传递。

九、重载 重写
重载,是在一个类内,通过改变方法和返回类型的改变,但是不改变方法名。
重写,一般指的是子类继承父类的时候,通过一样方法名和出参和入参,但是实现功能完全不同。

十、初始化
显示初始化,指的是在一开始就进行赋值

int i=1

隐式初始化,指的是在开始使用默认值,在java就是通过构造器

int i
public 初始化(int i){
	this.i=i;
}

十一、初始化的顺序。
其中初始化块主要是有:静态初始化块、静态域、静态方法、非静态域、非静态方法、构造方法 。而一般顺序是静态,非静态,之后是按照顺序。
由此下面代码造成如结果

public class   Person{

     String name;

     static String desc;

      static Person son = new Person();

     {
      Sysytem.out.println("1111");
     }

     static{
      Sysytem.out.println("2222");
     }

    Person(){
      Sysytem.out.println("3333");
     }

    public void method1(){}

    public static void method2(){}

}

最终输出结果是
1111
3333
2222
1111
3333

由此可以得出如下结果,其主要原因在初始化的过程中,静态方法,由于new Person是在先所以先是他的内部1111,之后是他的内部构造方法3333,之后是一开始初始化的对象的2222,之后是1111的代码块,在之后是构造方法的3333
十二、一点命名规则
包的命名 公司域名反写。
接口可以多实现 但是类只能单继承。

十三、多态
多态这个主要方式就是父类可以new出子类,子类的重写的父类的方法,子类的域在父类对象中出现 (做一个 多态和super的实验)

强制类型装换基本类型可以强转。如果这个是派生类 ,就可以转换成他自己的实例。

十四、抽象类和接口的区别
抽象类是提取共性
接口侧重于封装
抽象类只能单继承
接口能多实现
抽象类不能实现,只能通过他的子类实现

十五、object九大方法
protected Object clone() 创建并返回此对象的一个副本。
boolean equals(Object obj) 指示某个其他对象是否与此对象“相等”。
protected void finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
Class<? extendsObject> getClass() 返回一个对象的运行时类。
int hashCode() 返回该对象的哈希码值。
void notify() 唤醒在此对象监视器上等待的单个线程。
void notifyAll() 唤醒在此对象监视器上等待的所有线程。
String toString() 返回该对象的字符串表示。
void wait() 导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。
void wait(long timeout) 导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量。
void wait(long timeout, int nanos) 导致当前的线程等待,直到其他线程调用此对象的 notify()
equals 两个对象的引用。如果重写equals 必须重写hashcode,如果不重写就会在hashmap索引中出错
其基本原则是,其实这个也是一个二元运算符的基础要求
1)自反性:对于任何非空引用x,x.equals(x)
2) 对称性:3)对于任意非空引用false 4.一直性 5.传递性

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值