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- ...
随机推荐
- App的前后台数据同步
前言 在开发一个点餐软件时,app的订单数据是使用本地Sqlite数据库,在提交订单数据后,当订单数据在后台(Mysql数据库)发生变化时(如:已买单),本地数据如何改变呢? 思路 前台在查询时,将后 ...
- jquery中append与appendTo方法区别
1. append(content)方法 方法作用:向每个匹配的元素内部追加内容. 参数介绍:content (<Content>): 要追加到目标中的内容. 用法示例: HTML代码为& ...
- Spring MVC 表单验证
1. 基于 JSR-303(一个数据验证的规范): import javax.validation.constraints.Min; import javax.validation.constrain ...
- Win8.1下VM与Hyper-v冲突解决方法
不需要使用hyperv.去程序那里关闭hyperv.要同时使用两中虚拟机.使用折中的办法: 创建两个启动菜单,在启动的时候选择是否要运行 Hyper-V. 管理员身份运行命令提示符 cmd 输入 b ...
- CJOJ 1010【NOIP2003】加分二叉树 / Luogu 1040 加分二叉树(树型动态规划)
CJOJ 1010[NOIP2003]加分二叉树 / Luogu 1040 加分二叉树(树型动态规划) Description 设 一个 n 个节点的二叉树 tree 的中序遍历为( 1,2,3,-, ...
- JMeter Http请求POST提交token失败,取样器结果Response Code 415
Jmeter脚本,http请求以post方式提交token,执行脚本在察看结果中显示失败,取样器结果响应状态Response Code 415,如图:
- UDP和多线程服务器
UDP: UDP是数据报文传输协议,这个传输协议比较野蛮,发送端不需要理会接收端是否存在,直接就发送数据,不会像TCP协议一样建立连接.如果接收端不存在的话,发送的数据就会丢失,UDP协议不会去理会数 ...
- Ajax的简单实用实例
我将实现一个简单的Ajax页面无刷新进行用户验证案例: 效果如下图:
- python函数(1):初始函数
在学了前面很多python的基础类型后,我们终于可以进入下一阶段,今天我们将走进一个函数的新世界. 预习: 1.写函数,计算传入字符串中[数字].[字母].[空格] 以及 [其他]的个数 2.写函数, ...
- Spring Ioc-依赖注入的几种方式
一 setter方法注入 配置文件如下: <bean id="helloAction" class="org.yoo.action.SpringSetterHell ...