Java知识Part01

知识
1、一个字节8bit
2、char2个字节
3、接口的方法默认为public,除了static、final变量,不能有其他变量,接口是对行为的抽象,是一种行为的规范,可以通过extends关键字扩展多个接口
4、StringBuffer 线程安全 ,对于线程不安全的StringBuilder 性能低10%~15%
5、protected和private作用相当,差别仅在于继承的类可以访问protected成员,但是不能访问private成员
6、java是单根继承,顶级父类只有Object,是便于垃圾收回的基础。
7、堆栈 指针向下移动,分配新的内存,向上移动 释放内存
8、存储位置 寄存器——》堆栈——》堆——》常量存储——》非RAM存储
9、方法名和参数列表 合起来称为“方法签名”
10while(x = y) 编译器期望的是一个布尔值。由于Java不会自动将int换成布尔值,所以编译器会抛出一个编译时错误,所以如果x和y都是布尔值的时候,x=y属于合法表达式
11、类型转换(cast)原意为模型铸造
12、窄化转换(narrowing conversion) 将能容纳更多信息的数据类型转换成无法容纳那么多信息的类型
13、static方法的内部调用非静态方法
	传递一个对象的引用到静态方法里(静态方法可以创建其自身的对象),然后通过这个引用(和this效果相同),就可以调用非静态方法和访问非静态数据成员。但通常达到这个效果,只需要写一个非静态方法即可
14、即时(Just-In-Time,JIT)编译器技术,可以把程序全部或部分翻译成本地机器码(这本来是Java虚拟机的工作),程序运行速度因此提升。当需要装载某个类(通常是在为该类创建第一个对象)时,编译器会先找到其.clss文件,然后将该类的字节码装入内存。
	此时,有两种方案可供选择。一种是让即时编译器编译所有代码,但是这方法有2个缺陷:这种加载动作散落在整个程序生命周期内,累加起来要花更多的时间;
	并且会增加可执行代码的长度(字节码要比即时编译器展开后的本地机器码小很多),这将导致页面调度,从而降低程序速度。
	另一种做法为惰性评估(lazy evaluation),即时编译器只在必要的时候才编译代码,这样,从不会被执行的代码也许就压根不会被JIT所编译。新版JDK的Java HotSpot技术就采用了类似的方法,代码每次被执行的时候都会做一些优化,所以执行的次数越多,它的速度越快。
14、对象的创建过程,加入有个名为Table的类
	14.1、计时没有显式地使用static关键词,构造器实际上也是静态方法,因此,当首次创建类型为Table的对象时(构造器可以看成静态方法),或者Table类的静态方法/静态域首次被访问时,Java解释器必须查找类路径,以定位Table.class文件
	14.2、然后载入Table.class(将会创建一个Class对象),有关静态初始化的所有动作都会执行。因此,静态初始化只在Class对象首次加载的时候进行一次。
	14.3、当用new Table()创建对象的时候,首先将在堆上为Table对象分配足够的存储空间。
	14.4、这块存储空间会被清零,这就自动地将Table对象中的所有基本类型数据都设置成了默认值(对数字0来说就是0,对布尔型和字符型也相同),而引用则被设置成了null
	14.5、执行所有出现于字段定义处的初始化动作。
	14.6、执行构造器,涉及很多,尤其是继承。
15new Random(xxx) xxx是随机数种子 一般用System.currentTimeMillis
	nextInt(0,1) [0,1) 不包含1
16、访问权限的控制常被称为具体实现的隐藏。把数据和方法包装今类中,以及具体实现的隐藏,常共同被称作是封装。其结果是一个同时带有特征和行为的数据类型
17、编译器并不简单地为每一个引用都创建默认对象,因为这样会在许多情况下增加不必要的负担。因此,如果想要初始化这些引用,可以在:
	17.1、在定义对象的地方。意味着它们总是能够在构造器被调用之前被初始化
	17.2、在类的构造器中。
	17.3、就在正要使用这些对象之前,这种方式为惰性初始化。在生成对象不值得及不必每次都生成对象的情况下,可以减少额外的负担。
	17.4、使用实例初始化。
18、“is-a”(是一个)的关系用继承来表达,"has-a"(有一个)的关系用组合来表达
19、导出类是基类的一个超集,他可能比基类含有更多的方法,但它必须至少具备基类中所含有的方法。所以在向上转型的过程中,类接口中唯一可能发生得到事情是丢失方法,而不是获取它们。
	这就是为什么编译器在“未曾明确表示转型”或“未曾指定特殊标记”情况下,仍允许向上转型的原因
20、对于基本类型,final使数值恒定不变,而对于对象引用,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象。然而,对象其自身却是可以被修改的,Java并未提供使对象恒定不变的途径(但可以自己编写类以取得使对象恒定不变的效果)。这一限制同样适用数据,它也是对象
21、final类禁止继承,所以final类中所有的方法都隐式指定为final,因为无法覆盖它们,在final类中可以给方法添加final修饰词,但这不会增添任何意义
22、现代Java的容器库用ArrayList替代了Vector,ArrayList的行为合理得多,但是任然存在用旧容器库编写新程序代码的情况
	HashTable 不含任何final方法,方法相对Vector要简介的多,线程安全。
	现代Java容器库用HashMap替代了HashTable
23、在设计一个系统时,应该认识到程序开发是一种增量过程,犹如人类的学习一样。程序开发依赖于实验,可以尽己所能去分析,但当开始执行一个项目时,你仍然无法知道所有的答案。如果将项目是做是一种有机的、进化着的生命体而去培养,而不是打算像盖摩天大楼一样快速见效,就会获得更多的成功和更迅速的回馈,继承和组合正是面向对象程序设计中你可以执行这种实验的最基本的两个工具
24、封装 通过合并特征和行为来创建新的数据类型。实现隐藏则通过将细节私有化把接口和实现分离开来。多态的作用则是消除类型之间的耦合关系,继承 允许将对象视为它自己本身的类型或其基类型来加以处理。它允许将多种类型(从同一基类导出的)视为同一类型来处理,而同一份代码也就可以毫无差别地运行在这些不同类型智商了。多态方法调用允许一种类型表现出与其他相似类型之间的区别,只要它们都是从同一基类导出的。
	多态(动态绑定、后期绑定或者运行时绑定)
25、对象既可以作为它自己本身的类型使用,也可以作为它的基类型使用。这种把对某个对象的引用视为对其基类型的引用的做法被称作向上转型——因为继承树的画法中,基类是放在上方的。
26、如果不使用多态的话要为每一个新的类编写特定类型的方法,如果我们忘记重载某个方法,编译器不会返回任何错误信息,这样关于类型的整个处理过程就变得难以操作。因此我们的方法仅接受基类作为参数,而不是特殊的导出类,更方便。
27、将一个方法调用同一个方法主体关联起来被称作绑定。若在程序执行前进行绑定(由编译器和连接程序实现),为前期绑定,C的默认且唯一绑定方式。
 运行时根据对象的类型进行绑定被称为后期绑定或 动态绑定或运行时绑定。
28、Java除了static方法和final方法(private方法属于final方法)之外,其他所有的方法都是后期绑定。使用final可以有效地“关闭”动态绑定,不会对整体性能有什么改观
29、构造器的调用顺序
	基类的构造器总是在导出类的构造过程中被调用,而且按照继承层次逐渐向上连接,以使每个基类的构造器都能得到调用。这样做是有意义的,因为构造器具有一项特殊任务:检查对象是否被正确地构造。导出类只能访问它自己的成员,不能访问基类中的成员(基类成员通常是private类型)。只有基类的构造器才具有恰当的知识和权限来对自己的元素进行初始化。因此,必须令所有构造器都得到调用,否则就不可能正确构造完整对象。这正是编译器为什么要强制每个导出类部分都必须调用构造器的原因。在导出类的构造器主体中,如果没有明确指定调用每个基类构造器,它就会“默默”地调用默认构造器。如果不存在默认构造器,编译器就会报错(若某个类没有构造器,编译器会自动合成出一个默认构造器)
30、构造器内部调用正在构造的对象的某个动态绑定方法
	如果调用构造器内部的一个动态绑定方法,就要用到那个方法被覆盖后的定义。然而,这个调用的效果难于预料,因为被覆盖的方法在对象被完全构造之前就被调用,可能会造成一些难于发现的隐藏错误。
	在任何构造器内部,整个对象可能只是部分形成——我们只知道基类对象已经进行初始化。导出类部分在当前构造器正在被调用的时刻仍旧是没有被初始化的。然而,一个动态绑定的方法调用却会向外深入到继承层次结构内部,它可以调用导出类的方法。如果我们在构造器内部这样做,那么就可能会调用某个方法,而这个方法所操纵的成员可能还未进行初始化。
	如下所示,我们会发现ConstructorMethod的构造器调用start()方法时,a不是默认初始值2,而是null。
	初始化的实际过程
		1、在其他任何事物发生之前,将分配给对象的的存储空间初始化成二进制的零
		2、如前所述那样调用基类构造器。此时,调用被覆盖后的start()方法(要在调用Son构造器之前调用),由于步骤1的缘故,我们此时会发现a的值为null3、按照声明的顺序调用成员的初始化方法
		4、调用导出类的构造器主体。
		有效准则“用尽可能简单的方法使对象进入正常状态;如果可以的话,避免调用其他方法”。在构造器内唯一能够安全调用的那些方法是基类中的final方法(也适用于private方法,它们自动属于final方法)。这些方法不能被覆盖,因此也就不会出现上述问题
13、static方法的内部调用非静态方法
public class StaticInvokeNoStaticMethod {
    private String a = "hello";
    public static void main(String[] args) {
        StaticInvokeNoStaticMethod financeBenefit = new StaticInvokeNoStaticMethod();
        StaticInvokeNoStaticMethod.Test1(financeBenefit);
    }
    void show(){
        System.out.println("world");
    }
    public static void Test1(StaticInvokeNoStaticMethod financeBenefit){
        System.out.println(financeBenefit.a);
        financeBenefit.show();
    }
}
30、构造器内部调用正在构造的对象的某个动态绑定方法
public class ConstructorMethod {
    void start(){
        System.out.println("ConstructorMethod");
    }
    ConstructorMethod(){
        System.out.println("start");
        start();
        System.out.println("end");
    }
}
class Son extends  ConstructorMethod{
    private Integer a = 2;
    Son(Integer r){
        a = r;
        System.out.println("Son end");
        System.out.println("son Constructor, a=" + a);
    }
    @Override
    void start(){
        System.out.println("son Method, a=" + a);
    }
    public static void main(String[] args) {
        new Son(5);
    }
}

start
son Method, a=null
end
Son end
son Constructor, a=5
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。、资源 5来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。、资 5源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值