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- ...
随机推荐
- Struts 之 通配符 路径匹配 常量用法 配置默认值
Struts 框架学习 Action的开发的几种方式 方式1 : 继承ActionSupport 如果使用Struts校验功能,必须继承此类 方式2 : 实现Action接口 方式3 :不继承 ...
- 浅谈Notepad++选中行操作+快捷键+使用技巧【超详解】
Notepad++选中行操作 快捷键 使用技巧 用Notepad++写代码,要是有一些重复的代码想copy一下,还真不容易,又得动用鼠标,巨烦人.... 有木有简单的方法呢,确实还是有的不过也不算太好 ...
- __main() 和 main() 【转】
因为我们通常在BOOTLOADER中都已做好了比较细致的初始化工作,包括代码的搬运,所以我们最好别再调用库函数__main(),因为__main()作为ADS集成好的库函数,会对系统进行初始化设置,可 ...
- TensorFlow conv2d实现卷积
tf.nn.conv2d是TensorFlow里面实现卷积的函数,参考文档对它的介绍并不是很详细,实际上这是搭建卷积神经网络比较核心的一个方法,非常重要 tf.nn.conv2d(input, fil ...
- 配置LAMP实现WordPress
环境说明: 在同一台主机上实现LAMP(Linux + Apache + MariaDB + PHP) CentOS 7.3.Apache 2.4.6.MariaDB 5.5.52.PHP 5.4.1 ...
- 《MVC实现用户权限》
用树形的结构显示权限的结构,树形结构的用的是jquery的控件 1. 赋给用户一个userid,在用户角色表将用户和角色关联起来,在角色权限表中将角色和权限对应起来,权限表中存储的是菜单栏的名称. 2 ...
- JStorm与Storm源码分析(五)--SpoutOutputCollector与代理模式
本文主要是解析SpoutOutputCollector源码,顺便分析该类中所涉及的设计模式–代理模式. 首先介绍一下Spout输出收集器接口–ISpoutOutputCollector,该接口主要声明 ...
- 使用HTML5 FormData对象实现大文件分块上传(断点上传)功能
FormData是HTML5新增的一个对象,通过FormData对象可以组装一组用 XMLHttpRequest发送请求的键/值对.它可以更灵活方便的发送表单数据,因为可以独立于表单使用.如果你把表单 ...
- 闭包(Closure)基础分析
闭包(Closure) 本文聚焦于回答2个问题: 在全局作用域中,如何读取函数内部的局部变量? 在全局作用域中,如何修改函数内部的局部变量? 变量作用域 JavaScript语言的作用域,一句话概括就 ...
- mk-js,一个基于react、nodejs的全栈框架
前言 在这个前端技术爆炸的时代,不自己写套开源框架出门都不好意思跟别人说自己搞前端.去年年初接触的react,16年7月份在github开源了一套针对react.redux探索的项目,近期和伙伴们一起 ...