java核心技术卷一笔记(1)
jdk是java开发工具包,里面包含了javac、jar、javadoc、java等工具,可以在bin目录中找到。有一个文件夹是jre,即jdk也包含了java运行环境。jre可单独安装,只是运行java程序。
jdk安装完之后还要设置执行路径,也就是把jdk/bin添加到执行路径中,所谓的执行路径是指操作系统搜索可执行文件的目录列表。p14
java中用到浮点数时大部分都是用double,因为float的7位有效数字在大部分情况下不能满足需要。float数字后面有一个F后缀,没有后缀的为double类型。p34
java没有内置的字符串类型,而是有一个预定义类String。p46
任何一个java对象都可以转换成字符串。p46
java中的字符串像数字一样不可修改。这样做可以共享字符串。p47
不能用“==”来判断两个字符串是否相等,这样做只是判断了两个字符串是不是放置在同一位置上。也就是说例如“zhangcaiwang“这样的字符串表达式的值是一个地址。从这一点来说,java中的字符串对象类似于C语言中的char[] *字符串指针。比如char[] * var = ”zhangcaiwang“。p48
java中的字符采样unicode编码,编码方式为utf-16,存储类型为char,占用两个字节。这其中,一个char变量表示一个代码单元,也就是表示单个字符的最小单位,代码点是字符的unicode值,有时候需要用两个代码单元表示,代码点的数量代表字符串实际长度。参考下面utf-8编码方式。p49
UTF-8是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节。
如表:
1字节 0xxxxxxx
2字节 110xxxxx 10xxxxxx
3字节 1110xxxx 10xxxxxx 10xxxxxx
4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
因此UTF-8中可以用来表示字符编码的实际位数最多有31位,即上表中x所表示的位。除去那些控制位(每字节开头的10等),这些x表示的位与UNICODE编码是一一对应的,位高低顺序也相同。
实际将UNICODE转换为UTF-8编码时应先去除高位0,然后根据所剩编码的位数决定所需最小的UTF-8编码位数。
因此那些基本ASCII字符集中的字符(UNICODE兼容ASCII)只需要一个字节的UTF-8编码(7个二进制位)便可以表示。
java中访问数组元素时下标不能超过(元素的个数-1)p79
与关联不同的是,Person类里并没有Car和House类型的属性,Car和House的实例是以参量的方式传入到buy()方法中去的。一般而言,依赖关系在Java语言中体现为局域变量、方法的形参,或者对静态方法的调用。 p94
在java的源文件中只能有一个公共类,其他的类的个数不做限制。p107
构造器没有返回值。p110
如果在类的定义中放一些独立的代码块,那么这些代码块可以在构造类对象的时候被执行,可以用来初始化对象,但优先于构造器执行。p130
在java源文件中如果没有放置包名,则该源文件中的类将会放置在默认包中,默认包是一个没有名字的包。p137
如果子类的构造器中没有显式地调用超类的构造器则将自动地调用超类的默认构造器,如果超类没有默认的构造器则会编译出错,所以定义类时最好能写一个没有参数的默认构造器。p153
动态绑定步骤:前提是子类对象的引用赋给了父类变量。 p159
1.获取父类的类型和父类以及父类的父类中的签名列表。
2.如果子类中定义了符合该签名的方法则调用子类的方法,否则调用父类中符合签名的方法。
由上可看出如果把子类对象引用赋给了父类变量,那么该变量能够调用的方法一定是父类拥有的方法。
在将超类变量赋值给子类变量时要用instanceof判断一下是否能转换成功。p162
自动装箱规定boolean、byte、char<128,-127~128之间的int和short被包装到固定的对象中。也就是说用这些值进行自动装箱产生的对象是相同的,只需要用==进行比较是否相等即可。p188
允许将一个数组传递给可变参数方法的最后一个参数,此时可变参数只能接受一个该参数。p190
枚举类型中的类型其实是该类的一些实例,所以在创建新的枚举类型变量时其实就是把这些实例的引用赋给对应的变量,所以在对枚举类型的变量比较是否相等时用==就足够了,不需要使用equals()。p191
在反射中可以用newInstance()方法快速获取一个类的实例,比如xx.getClass().newInstance()。这个方法将调用对应类的默认构造器,如果没有默认构造器编译器会抛出异常。p194
java.lang.reflect包中有三个类用来分析类的能力,分别是Constructor,Field,Method,分别对应于分析构造器、域、方法。三个类都有一个getName方法返回项目名称,Filed还有一个getType方法返回描述域所属类型的Class对象,Method和Construct还有能够报告参数的方法,Method有可以报告返回值的方法,这三个类还有一个getModifiers的方法,该方法返回一个整数,用于描述修饰符。另外还可以利用该包中的Modifier类中的静态方法分析getModifiers方法返回的整数值。Modifier.toString把修饰符打印出来。p196
将一个类对象赋值给object类对象再转换过来是可以的,但是一开始就创建一个Object对象是不能转换成其它对象的。p206
建议java开发者不要使用Method对象的回调方法(invoke),使用接口进行回调会是代码的执行速度更快,更易于维护。p212
接口中所有的方法自动地属于public,所以不用添加关键字public。p216
接口中不能有实例域,也不能实现方法,提供实例域和方法实现的任务应该交给类。接口被称为接口而不是类,这应该就是接口和抽象类最本质的区别。p216
接口中的常量被自动地设置为public static final。p221
object类中clone方法只是对子类的各个域进行拷贝,拷贝的作用是对变量的内容进行复制,所以这个方法对对象中基本类型的克隆没有问题,但是对对象中对象实例域的克隆则是对对象引用的复制。这称为浅拷贝。p223
如果一个类能实现深度拷贝的功能则需要实现以下几点:
1.实现Cloneable接口;
2.调用Object类的clone方法:super.clone();
3.对于内容是对象变量的域,调用对象的clone方法对该对象域深度赋值,而这又要求该对象的类实现了深度拷贝功能。
在java的标准类库中,只有不到5%的类实现了clone方法,所以应该尽量避免使用clone方法。p226
匿名内部类没有构造器,因为构造器的名字要与类名一致,但是匿名内部类没有类名。 匿名内部类的构造器参数传递给超类的构造器。p242
匿名内部类的双大括号初始化技巧。p243
静态内部类对象除了没有对生成它的外围内部类的对象的引用特权之外,与其他所有内部类完全一样。只有内部类可以声明为static。p245
包装器类是final,不可被继承,同时也是不可变的,即一旦构造了包装器,就不允许改变包装在其中的值。p203.
对于可变参数方法,可变参数必须放在最后,相当于一个数组,在调用方法的时候,可以填充多个数组内容类型的值,也可以传递一个相同类型的数组,当传递数组的时候就不可以再填充其他值了。p206
反射是用来分析类的能力的一种技术,比如可以利用反射得到要分析的类的修饰符、类名、字段、方法、构造器等内容。而代理则是在运行时创建实现了一组接口的新类。
Proxy.newProxyInstance()把返回对象的引用传递给了一个Object变量。p248
java核心技术卷一笔记(1)的更多相关文章
- Java核心技术卷一 · 笔记(2)
目录 1.多态.动态绑定 2.覆盖 3.阻止继承:final 类和方法 4.抽象类(abstract修饰) 5. 4 个访问修饰符: 6.toString() 7.对设计继承关系很有帮助的建议 8.接 ...
- Java核心技术卷一 · 笔记(1)
目录 1.java的关键术语 2.==和equals 3.空串与 Null 串 4.构建字符串 5.封装 6.对象的三个主要特性 7.依赖(dependence).聚合(aggregation).继承 ...
- java 核心技术卷一笔记 6 .2.3 接口 lambda 表达式 内部类
6.2.3 对象克隆 Cloneable 接口,这个接口指示一个类提供了一个安全的clone方法.(稍作了解) 为一个对象引用的变量建立副本时,原变量和副本都是同一个对象的引用,任何一个变量改变都 ...
- java 核心技术卷一笔记 6 .2接口 lambda 表达式 内部类
6.2 接口实例 6.2.1 接口与回调 在java.swing包中有一个Timer类,可以使用它在到达给定的时间间隔时发出通告,假如程序中有一个时钟,就可以请求每秒钟获得一个通告,以便更新时钟的表盘 ...
- java 核心技术卷一笔记 6 .1接口 lambda 表达式 内部类
6.1 接口不是类,是对类的一组需求的描述,这些类需要遵守接口描述的统一格式进行定义.例如:Arrays类中sort方法(可以对对象数组进行排序)前提是对象所属的类必须实现了Comparable 接口 ...
- java核心技术卷一笔记(2)
---恢复内容开始--- 异常.断言 所有的异常都继承自Throwable类,异常包括已检查异常和未检查异常,应该抛出已检查异常,而未检查异常要么是不可控的(Error),要么是应该避免发生的(Run ...
- java 核心技术卷一笔记 6 .1.接口 lambda 表达式 内部类
6.1.2 接口不是类,不能实例化一个接口:但是可以声明接口的变量:Comparable x; 接口变量必须引用实现了接口的类对象:x = new Employee(); 检查一个对象是否属于某 ...
- 【阅读笔记】Java核心技术卷一 #0
这是一篇备忘性质的读书笔记,仅记录个人觉得有用的知识点 本文作为一个目录索引,部分章节跳过 吐槽:此书中文翻译有不少地方不太通顺,这种情况我要把英文版对应的部分也读一遍才能明白(说实话,英文里的从句表 ...
- java核心技术卷一
java核心技术卷一 java基础类型 整型 数据类型 字节数 取值范围 int 4 +_2^4*8-1 short 2 +_2^2*8-1 long 8 +_2^8*8-1 byte 1 -128- ...
随机推荐
- lvs讲解
作者写的就是好呀,简单明了,安逸的我也不知道早点看看,非得等到找工作了,在这里临时抱佛脚,以后再过来添加我自己的总结 http://www.linuxvirtualserver.org/zh/
- 有关各个版本的Visual Studio(VS)和SQL Server安装的顺序总结
前几天从网上买了块三星的SSD,把原来的HDD放在了光驱位,然后重新安装了系统.想起来收集储存的好多源代码还是VS2008开发的,然后打算把之前用过的VS2008也装上,安装过程出了点问题.发现安装完 ...
- jsp,2016.11.28
1,在jsp中要关联到js的时候就要导入js才可以调用到js <!-- 导入地区的js --> <script type="text/javascript" sr ...
- Centos 6.5开启rsync同步
一.测试环境 操作系统:Centos6.5 Server1:172.18.11.100 源服务器 Server2:172.18.11.110 目标服务器 二.操作步骤: 1.先 ...
- Async(异步)(一)
在谈到异步的概念时,先要了解几个概念了. 什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源. 而一个进程又是由多个线程所组成的 什么是线程? 线程 ...
- 全面理解SSD和NAND Flash
Flash Memory又叫做闪存,是一种非易失性存储器.非易失性是指断电之后数据不会丢失,这里就涉及到断电保护(后面详细讲解). 总体思路 1.NAND Flash的用途. 2.NAND Flash ...
- 教你做炫酷的碎片式图片切换 (canvas)
前言 老规矩,先上 DEMO 和 源码.图片区域是可以点击的,动画会从点击的位置开始发生. 本来这个效果是我3年前做的,只是当是是用无数个 div 标签完成的,性能比较成问题,在移动端完全跑不动.最近 ...
- Windows查看端口使用状况
使用端口是我们在进行远程或者打印机等都会遇到的,但是有很多用户会遇到端口被占用的情况,遇到这样的问题首先就要找出电脑中的所以端口然后进行查看,还是有很多人不知道该如何查看电脑端口. 1 查看windo ...
- 内核对象kobject和sysfs(1)——概述
内核对象kobject和sysfs(1)--概述 问题: 在走读驱动代码时,经常看见kref,kobj,sysfs这些结构,这些结构到底有什么作用?如何理解并使用这些结构呢?这将在接下来的这一系列文章 ...
- RabbitMQ 使用场景一
安装环境 1.下载安装 Erlang 运行时环境 2.下载安装 RabbitMQ Server 应用程序 3.启动 RabbitMQ 服务(默认启动) 4.安装管理平台插件并打开远程访问权限 4.1. ...