看到这本书时,我的内心是崩溃的,卷1就700多页,但是这本书是很多前辈所推荐的,想必其中必有精华所在,硬着头皮上吧。

如何阅读本书

拿到书的第一眼肯定去看目录,大概了解一下,各个章节所讲内容。

为表对作者的尊重,快读扫读了,译者序、前言和致谢。

通过目录了解到,第1,2章所讲概述和环境搭建,对于我来说没有价值,选择忽略。

第10,11,12,13章所讲Java图形界面相关,当今这方面几乎很少使用,选择忽略。

由于并不是Java新手,所以我将选择对我有益的知识点进行记录。

第三章 Java的基本程序设计结构

长整型

long a = 3.14L 这里注意要用大写的L作为后缀,因为小写 l 有时很像数字 1

浮点型

单精度类型表示:float a = 3.14F 或 3.14f

双精度类型的表示:double b = 3.14D 或 3.14d

注意:当浮点型数字没有后缀时(如:3.14),默认为double类型。另外浮点数值不适用于无法接受舍入误差的金融计算中,如 2.0 - 1.1 结果是 0.89999999999999,为更精确的计算,可以使用BigDecimal类。

有三个特殊的浮点型数值:

正无穷大

负无穷大

NaN (不是一个数字)

正整数除以0的结果正无穷大(如:3/0.0 结果为Infinity),Infinity表示无穷大的概念,0.0并不是真正意义上的0,它只是非常接近0而已。

,0/0或者负数的平方根结果为NaN.(如:0.0/0.0 ,Math.sqrt(-3)结果为 NaN ),对于所有没有良好的数字定义的浮点计算,例如0.0/0.0,或者对负数求平方根其值都是它.

结合赋值和运算符

x = x + 4

简写: x += 4

注意: 如果运算符得到一个值,其类型与左侧操作数类型不同,,就会发生强制类型转换,如 int x = 2 ; x += 3.14 ; 这相当于 x = (int)(x + 3.14)

自增自减运算符

java中借鉴了C和C++的做法,提供了自增自减运算符:n + + 将当前值加1

这种运算符有两种形式:运算符作为前缀和运算符作为后缀。例:

int m = 7 ;

int n = 7 ;

int a = 2 * ++m; //a=16,m=8

int b = 2 * n++; //b=14,n=8

前缀形式先完成加1,后缀形式会使用原来的值,再加1。

不建议在表达式中使用++,因为这样的代码很容易让人困惑,而且会带来烦人的bug。

&&和& 与 ||和|

&&表示逻辑“与”,||表示逻辑“或”。

这两个运算符是按照“短路”方式来求值的:如果第一个操作数已经能够确定表达式的值,第二个操作数就不会计算了。如:

exp1 && exp2 ,当exp1为flase时,那么exp2就不会执行了。

exp1 || exp2 ,当exp1为true时,那么exp2就不会执行了。

&和| 运算符不采用“短路”方式求值,所以不论第一个操作数是否确定整个表达式的值,两个操作数都会被计算。

字符串

检测是否相等

一定要用equals()函数,它是判断两个字符串内容是否相等,而 == 是判断两个字符串是否在同一个位置上。如果 == 相等,那么equals一定相等,反之不然。

空串和Null

""是一个Java对象,有自己的串长度(0)和内容(空),当为Null时,表示目前没有任何对象与该变量关联。

检查一个字符串既不是null也不是空串:

if(str != null && str.length() != 0)

要先检查不为null,因为为null时无法调用length()函数。

多重选择:switch

switch(x){

case x1 :

***

break;

case x2 :

***

break;

}

其中x可以为char,byte,short,int类型,到Java SE 7开始,可以是String类型的。

一般不建议使用switch语句,因为break语句的忘记容易导致问题。

命令行参数

学习Java你一定知道下面代码:

public class Massage{

public static void main(String[] args){

System.out.println(args[0]);

System.out.println(args[1]);

}

}

当你在命令行变异运行这个类时:java Massage -hello world

打印结果:

hello

world

第四章 对象与类

类之间的关系

依赖(uses-a) A类方法操纵B类对象,叫做一个类依赖另一个类。

聚合(has-a) A类的对象包含B类的对象。

继承(is-a) A类继承B类。

我们应该尽量减少相互依赖的类存在,如果A类不知道B类,就不会关系B类的变化,这样B类无论怎么变化都不会导致A的bug,软件工程上叫做:让类之间的耦合度最小。

Java 8中新增LocalDate类

Date是一个用来表示时间点的Date类,LocalDate用来表示大家熟悉的日历表示法。

Date类所提供的日期处理并没有太大的用途。

1.Date和SimpleDateFormatter都不是线程安全的。

2.Date对日期的计算方式繁琐,月份从0开始。

创建一个对象可以通过以下几个方式:

LocalDate local1 = LocalDate.now();

LocalDate local2 = LocalDate.of(2017,10,30);

LocalDate并不包含时间,你可以通过下面获取年月日:

int year = local2.getYear();

int month = local2.getMonthValue();

int day = local2.getDayOfMonth();

当然LocalDate也提供了日期的增减:

local2.pulsDays(100);

local2.minusDays(100);

更多方法查看API,这里不做详细表述。

final实例域

将实例域定义为final,构建对象时必须初始化这个实例域,后面的操作中不能够再对它进行修改。如:

public class Employee{

private final String name;

……

}

这个name属性没有setName方法。final修饰符大都应用于基本数据类型或不可变的类或对象。如果类中每个方法都不会改变其对象,那么这个类就是不可变类,如String类。

对于可变的类使用final修饰,会对别人造成混乱。如:

private final StringBuilder sb;

在Employee构造方法中进行初始化

public Employee(){

sb = new StringBuilder();

}

final关键词只是表示存储在sb变量中的对象应用不会再指向其他StringBuilder对象,不过这个对象可以更改:

public void giveGoldStar(){

sb.append( LocalDate.now() + ": Gold star!");

}

静态域 static

public class Employee{

private static int sid = 1001;

private int id ;

……

}

static 修饰的常量,是面向类的,即无论存在多少Employee对象,sid只存在一个,所有对象将共享一个sid,但id却和对象同存在,多少个对象就有多少个id。(static 修饰后,它属于类,而不属于任何对象)

静态工厂方法

类似LocalDate.now和LocalDate.of都是使用静态工厂方法来构造对象。

NumberFormat currenyFormatter = NumberFormat.getCurrencyInstance();

NumberFormat percentFormatter = NumberFormat.getPercentInstance();

double x = 0.1;

System.out.println(currenyFormatter.format(x)); //输出 $0.10

System.out.println(percentFormatter.format(x)); //输出 10%

为什么不利用构造方法来完成这些操作呢?原因:

无法命名构造器,这里希望得到的货币实例和百分比实例采用不同的名字。

当使用构造器时,无法改变所构造的对象类型,而Factory方法将返回一个DecimalFormat类对象,这是NumberFormat的子类。

方法参数

方法参数共有两种类型:

基本数据类型

对象类型

一个方法不可能修改一个基本数据类型的参数,如:

double x = 10;

harry.raiseSalary(x);

中不论加薪方法具体怎么实现,但x值始终不变。

对象作为参数其实是对象引用的拷贝,他们指向同一个对象。

public void swap(Employee x,Employee y){

Employee temp = x;

x = y;

y = temp;

}

Employee a = new Employee("zhang");

Employee b = new Employee("wang");

swap(a,b); //现在x指向wang,y指向zhang

System.out.println(a.toString()+"--"+b.toString());

最后你会发现a依然是zhang,b依然是wang,因为形参x,y在执行完后被丢弃了,原来的a,b依然指向之前的的对象。

总结:

java对对象采用的不是引用调用,实际上,对象引用是按值传递的。

一个方法不能修改一个基本数据类型(数值型和布尔型)

一个方法可以改变一个对象的状态(属性……)

一个方法不能让一个对象参数引用新的对象

无參构造函数

当一个类没有提供构造函数时,系统会为这个类提供一个默认的无參构造函数,但当你提供了有参的构造函数时,系统是不会提供无參构造函数的,所以当你要调用无參构造函数时,主动提供无參构造函数或不提供任何构造函数。

类设计技巧

一定保证数据的私有性

一定对数据初始化

不要在类中使用过多的基本类型

将职责过多的类进行分解

类名和方法名要能体现他们的职责

优先使用不可变类

类不可变,就可以安全地在多个线程间共享其对象。

第五章 继承

父类和子类

将通用方法放在父类中,而将具有特殊用途的方法放在子类中。

关键字this的两种用法:一是引用本类成员变量,二是调用本类其他构造函数。

关键字super两种用法:一是应用父类成员变量,二是调用父类构造函数。不过两者调用构造函数时,调用语句必须放在构造函数第一行。

欢迎留言交流。

JAVA核心技术_【读】Java核心技术卷1相关推荐

  1. 你为什么推荐java核心技术_读《java核心技术卷一》有感

    过去一个多月了吧.才囫囵吞枣地把这书过了一遍.话说这书也够长的,一共706页.我从来不是个喜欢记录的人,一直以来看什么书都是看完了就扔一边去,可能有时候有那么一点想记录下来的冲动,但算算时间太紧,很多 ...

  2. 尚学堂java培训_送给 Java 自学者或者初学者的最全知识清单,2020 年 Java 就该这么学...

    最近逛知乎,发现有很多想自学 Java 或者 Java 初学者提问,不知道如何学习 Java?我接触 Java 快 8 年的时间了,一直从事 Java 开发工作,自己一直升级打怪,对于如何更好的学习 ...

  3. java图案_用java实现 图片组成心形图案

    用java实现 图片组成心形图案 来源:互联网 作者:佚名 时间:2014-03-15 17:52 灵感:java2核心技术卷1(共两卷)最近在看java2核心技术里面提到显示图片,于是就做了个心形图 ...

  4. java书籍_学习Java最好的10本书,从入门到精通

    在当代,学习Java等编程课程的主要方式是视频资源,如果你想学,在网上五分钟之内就可以找到一堆学习视频,瞬间将你的硬盘填满.但是这些课程质量良莠不齐,对于小白来说很难辨别好坏. 但是书籍不同,书籍都是 ...

  5. java海报_使用java画一张海报

    PS: 没找到合适的海报背景,就随便找了一张,使用技术都是相同的 1. 添加依赖 这俩其实跟本章节的核心技术没有关系,是为了获取QQ昵称和QQ头像而引入的. org.jsoup jsoup 1.11. ...

  6. java常见_关于Java的常见误解

    java常见 Java是世界上使用最广泛的语言(需要引用),每个人对此都有自己的见解. 由于它是主流,所以通常会嘲笑它,有时是对的,但有时批评并没有触及现实. 我将尝试解释我最喜欢的5个关于Java的 ...

  7. 易语言 java支持_开源Java客户端可以连接易语言服务器

    我们的服务端处理客户端的连接请求是同步进行的, 每次接收到来自客户端的连接请求后, 都要先跟当前的客户端通信完之后才能再处理下一个连接请求. 这在并发比较多的情况下会严重影响程序的性能, 为此,我们可 ...

  8. java大文件读,java 读大文件报错

    代码: import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import ...

  9. java 一二三四五_五道java小题,补更四道java小题

    一:分析以下需求,并用代码实现 1.定义List集合,存入多个字符串 2.删除集合中字符串"def" 3.然后利用迭代器遍历集合元素并输出 import java.util.Arr ...

  10. python解析java文件_读取java文件

    JAVA通信编程(二)--如何读取java的properties配置文件(插播) 如何读取java的properties配置文件本不属于java通讯编程这个系列的范畴,但是在做一些应用中编写通讯编程需 ...

最新文章

  1. 70佳精美的PSD素材免费下载(上篇)
  2. 网络基础之HTTP协议
  3. Redis+Nginx+设计模式+Spring全家桶+Dubbo阿里P8技术精选文档
  4. 新技术不断涌现,下一代云计算的突破口在哪里?
  5. Python知识点4——if分支与while循环
  6. 皮一皮:如此父母...究竟是好还是不好(沉思)...
  7. oracle 11g 清除 trc后缀文件,请教一个跟踪文件的问题。11g 很多trc文件。。
  8. .Net程序调试与追踪的一些方法
  9. SpringCloud局部过滤器自定义
  10. Linux基础——操作系统框架
  11. Android UI 备忘:DrawerLayout
  12. 数学表达式3+(a+b)2对应的python表达式是_与数学表达式cd/2ab对应的Python表达式中,不正确的是:...
  13. 电脑太慢了最简单的办法怎么弄_修电脑不求人—最实用办公室电脑故障及解决办法,办公室人都说好...
  14. 3D缺陷检测---小论文
  15. [3D分割 Benchmak] ScanNet: Richly-annotated 3D Reconstructions of Indoor Scenes
  16. NO JVM installation found. please install a 64-bit JDK,解决方法   Error launching android studio   NO J
  17. 报错undefined symbol: _ZN3c104impl23ExcludeDispatchKeyGuardC1ENS_11DispatchKeyE
  18. 软文写作是什么?如何写软文?软文标题怎样拟定?
  19. Windows 微信双开(批处理)
  20. 一款开源的二维地图软件,在GMap.net基础上进行了有效的扩展,曾经产生过非常大的商业价值,里面含有升级日志,有助于再次开发

热门文章

  1. 二、kubernetes
  2. 为MongoDB添加身份验证
  3. 12.Bridge-桥接模式
  4. 《java系统性能调优》--1.发现瓶颈
  5. NYOJ-71-独木舟上的旅行
  6. 搜狗输入法不能输入验证码,验证码错误怎么办?
  7. 越狱(第二季)19集,开始了!
  8. 674. Longest Continuous Increasing Subsequence最长连续递增子数组
  9. vs2005手机开发环境的配置
  10. 《冒号课堂》精彩书评集萃