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)的更多相关文章

  1. Java核心技术卷一 · 笔记(2)

    目录 1.多态.动态绑定 2.覆盖 3.阻止继承:final 类和方法 4.抽象类(abstract修饰) 5. 4 个访问修饰符: 6.toString() 7.对设计继承关系很有帮助的建议 8.接 ...

  2. Java核心技术卷一 · 笔记(1)

    目录 1.java的关键术语 2.==和equals 3.空串与 Null 串 4.构建字符串 5.封装 6.对象的三个主要特性 7.依赖(dependence).聚合(aggregation).继承 ...

  3. java 核心技术卷一笔记 6 .2.3 接口 lambda 表达式 内部类

    6.2.3   对象克隆 Cloneable 接口,这个接口指示一个类提供了一个安全的clone方法.(稍作了解) 为一个对象引用的变量建立副本时,原变量和副本都是同一个对象的引用,任何一个变量改变都 ...

  4. java 核心技术卷一笔记 6 .2接口 lambda 表达式 内部类

    6.2 接口实例 6.2.1 接口与回调 在java.swing包中有一个Timer类,可以使用它在到达给定的时间间隔时发出通告,假如程序中有一个时钟,就可以请求每秒钟获得一个通告,以便更新时钟的表盘 ...

  5. java 核心技术卷一笔记 6 .1接口 lambda 表达式 内部类

    6.1 接口不是类,是对类的一组需求的描述,这些类需要遵守接口描述的统一格式进行定义.例如:Arrays类中sort方法(可以对对象数组进行排序)前提是对象所属的类必须实现了Comparable 接口 ...

  6. java核心技术卷一笔记(2)

    ---恢复内容开始--- 异常.断言 所有的异常都继承自Throwable类,异常包括已检查异常和未检查异常,应该抛出已检查异常,而未检查异常要么是不可控的(Error),要么是应该避免发生的(Run ...

  7. java 核心技术卷一笔记 6 .1.接口 lambda 表达式 内部类

    6.1.2 接口不是类,不能实例化一个接口:但是可以声明接口的变量:Comparable x;    接口变量必须引用实现了接口的类对象:x = new Employee(); 检查一个对象是否属于某 ...

  8. 【阅读笔记】Java核心技术卷一 #0

    这是一篇备忘性质的读书笔记,仅记录个人觉得有用的知识点 本文作为一个目录索引,部分章节跳过 吐槽:此书中文翻译有不少地方不太通顺,这种情况我要把英文版对应的部分也读一遍才能明白(说实话,英文里的从句表 ...

  9. java核心技术卷一

    java核心技术卷一 java基础类型 整型 数据类型 字节数 取值范围 int 4 +_2^4*8-1 short 2 +_2^2*8-1 long 8 +_2^8*8-1 byte 1 -128- ...

随机推荐

  1. Java数据类型+练习

    java基础数据类型: 四类八种: 1, 整数型 byte   2的8次方(取值范围--<-128~127>)--1个字节 short   2的16次方--2个 int   2的32次方- ...

  2. ASP.NET 平台下的MVC框架

    这段时间在学习MVC框架,希望自己的一点心得能够帮助正在学习的同仁. 在阅读一些大牛的博客的时候看到一句话,感觉特别好,“你应该尝试MVC,是因为最终你会学到一些东西,它可以使你成为更好的Web开发人 ...

  3. 关于阻止PROE联网的一些想法!

    前言:商业上使用盗版proe会被官方警告,官方是通过proe软件联网来获取你的ip地址,那他是怎么知道你是商业用途而不是个人(一般不会对个人的盗版行为进行警告)?这不难,应该是通过检测同一ip下有多台 ...

  4. 文本三剑客---gawk基础

    gawk程序是Unix中原始awk程序的GNU版本.gawk程序让流编辑器迈上了一个新的台阶,它提供了一种编程语言而不只是编辑器命令.在gawk编程语言中,可以完成下面的事情: (1)定义变量来保存数 ...

  5. jenkins2 -pipeline 常用groovy脚本

    jenkins2的核心是pipeline,pipeline的核心是groovy. 那有一些基础的groovy是必须经常使用的,如变量赋值,变量引用,打印变量,输出字符,任务调用,循环判断等. Groo ...

  6. maven引入已经拥有的jar包

    <!-- https://mvnrepository.com/artifact/jfree/jcommon --><dependency>    <groupId> ...

  7. Hibernate 实体关联关系映射----总结

    在我看来,Hibernate提供这些映射关系,常用就是一对一和多对一,并且在能不用连接表的时候尽量不要用连接表.多对多会用到,如果用到了,应该首先考虑底层数据库设计是否合理.   在实际开发中,在Hi ...

  8. jsp函数的使用

    在这篇博客里面谈一谈jsp函数的一些使用规则 1.在jsp里面,函数和类是等价的,因为在函数的内部可以定义函数和变量.定义在函数内的函数和变量分为实例属性.实例函数.类属性.类函数.实例和类是面向对象 ...

  9. 3.如何安装Apache Spark

    如何安装Apache Spark 1 Why Apache Spark 2 关于Apache Spark 3 如何安装Apache Spark 4 Apache Spark的工作原理 5 spark弹 ...

  10. 怎么把系统装进u盘(ultraiso)

    ​首先要下载一个叫ultraiso的软件.可以在百度中搜索此软件下载.下载后安装,安装后打开软件,如图所示.        ​点击左上角的文件选项,在弹出的菜单中,点击打开选项,打开一个你要装进U盘的 ...