基本语法

Java中的所有函数都属于某个类的方法

Java没有任何无符号的int、long、short 或 byte 类型

浮点数值不适用于无法接受舍入误差的金融计算中,比如2.0-1.1不会输出想要的0.9,如果不允许有任何舍入误差,应该使用BigDecimal类

建议不要在程序中使用char类型,除非确实需要处理UTF-16的代码单元,最好将字符串作为抽象数据类型处理

boolean类型:整数和布尔值之间不能相互转换

利用final指示常量,只能赋值一次,一旦被赋值后,就不能更改了

类常量:希望某个常量可以在一个类中的多个方法中使用,用 static final 设置,如果一个常量被声明为 public 那么其他类方法也可以使用这个常量,const是java的保留关键词,但并没有使用

操作符:>>>运算符会用0填充高位,这与>>不同,它会用符号位填充高位,不存在<<<运算符

字符串:String.subtring,+,String.join等等

String类没有提供用于修改字符串的方法,不能修改Java字符串中的字符,可以提取子串后拼接,String不可变,StringBuilder可变

一定不要使用==运算符检测两个字符串是否相等,它只能判断两个字符串是否在放置在同一个位置上,可以用equals或compareTo

空串是长度为0的字符串,是一个java对象,null则不是

比C++多了带标签的break: 目的是跳出嵌套的深层循环,标签必须放在希望跳出的最外层循环之前,并紧跟一个冒号,通过执行带标签的break跳转到带标签语句块的末尾,if语句也同样使用,但不能跳入语句块,只能跳出

Java没有提供运算符重载的功能,除了字符串拼接的 +

java.math包中的BigInteger和BigDecimal类可以处理包含任意长度数字序列的数值,实现了任意精度的整数和浮点数运算

数组:将一个数组变量拷贝给另一个数组变量,两个变量将引用同一个数组

int[] a = b;
a[5] = 12; // now b[5] is also 12

如果希望将一个数组的所有值拷贝到另一个新的数组中,需要使用Arrays类的copyOf方法

OOP

算法+数据结构 = 程序

面向过程往往先考虑算法实现,然后考虑数据存储

面向对象是相反的过程,将数据放在第一位,才考虑操作数据的算法

面对一个需求,先从设计类开始,然后再往类中添加方法。识别类的简单规则是在分析问题中寻找名词(属性),寻找动词(方法)

类之间的关系:

  依赖(uses-a):一个类的方法操纵另一个类的对象

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

  继承(is-a):类B继承类A的属性和方法

任何对象变量的值都是对存储在另外一个地方的一个对象的引用

只访问对象而不修改对象的方法称为访问器方法,修改则称更改器方法

不要编写返回可变对象的访问器方法,这样会导致破坏该对象私有数据的封装性,导致在类外发生自由修改。应该用clone返回一个拷贝

函数参数:Java总是采用按值调用,方法得到的是所有参数值得一个拷贝(值的拷贝,对象引用的拷贝[引用同一个对象])

参数一般分为(1)基本数据类型(数值、布尔),(2)对象引用。一般第一种类型实现的值传递,第二种实现所谓的"引用传递",实际还是值传递

1. 一个方法不能修改一个基本数据类型的参数

2. 一个方法可以改变一个对象参数的状态

3. 一个方法不能让对象参数引用一个新的对象(swap中只是swap了对象引用的拷贝,实参引用并没有交换,因为实质上还是值传递)

可以参考这里

相比C++,Java没有构造初始化列表来初始化对象,而多了可以在类定义中,直接将一个值赋给任何属性,或调用函数进行初始化

相比C++,Java可以用this(...)的形式在构造函数中调用同一个类的另一个构造函数,C++不行

多了一种初始化块的方式来构造对象,首先运行初始化块,然后才运行构造器的主体部分

综上所述:构造方法大致有三种

  在构造函数中设置

  在声明中赋值

  初始化块

析构函数:java有自动的垃圾回收机制,不需要人工回收内存,所以java不支持析构函数

包:将类放入包中,必须将包的名字放在源文件的开头,包中定义类的代码之前,需要将包中的文件放到与完整的包名匹配的子目录中,别的目录文件需要时直接import该路径下的类即可

包作用域:标为public的部分可以被任意的类使用,标为private的部分只能被定义它们的类使用,没有指定public和private的部分(类、方法、变量),可以被同一个包中的所有方法访问

继承:extends  所有继承都是公有继承

super可以调用父类的函数,也可以帮助子类完成初始化

多态:不需要将方法声明为虚拟方法,动态绑定是java的默认处理方式

如果是private, static, final方法或构造器,那么编译器将准确知道应该调用哪个方法,称为静态绑定。除此之外的方法采用动态绑定,虚拟机预先为每个类创建了一个方法表,其中列出了所有方法的签名和实际调用的方法

final类:阻止人们利用某个类定义子类,其所有方法自动成为final方法,属性不是,属性如果需要则可以单独设置为final

final方法:子类不能覆盖这个方法,且取消方法的动态绑定

抽象类:声明abstract的方法不需要实现,包含一个或多个抽象方法的类本身必须声明为抽象(abstract),不能创建这个类的实例化对象

编译器只允许调用在类中声明的方法

Object类:它是java中所有类的始祖,每个类都是由它扩展而来,除了基本类型不是对象,包括数组类型都是由Object类扩展而来

泛型数组列表:ArrayList是一个采用类型参数的泛型类,在添加或删除元素时,可以自动调节数组容量,相比C++访问元素用[],当java不能重载运算符只能调用显示的方法,另外C++是值拷贝,vector<int> a=b,a是一个和b的值一样的新向量,java则会使a和b指向同一个数组列表

对象包装器与自动装箱:对象包装器类是不可变的,一旦构造,不能改变内部的值,还是final的,不能定义其子类。作用是将基本类型包装为对象,这种类型的运算与基本类型一致,原因是进行了自动装箱和拆箱操作,另一方面该类封装了一些基本方法,比如parseInt:将一个数字字符串转化为数值

一个类只能继承一个类,但可以实现一个或多个接口,,接口所有的方法自动属于public,接口不能含有实例域(属性), 不能实例化,接口中的域自动属于public static final 静态常量

反射:JVM的动态加载机制,Class 廖雪峰博客

深拷贝:实现Cloneable接口,重新定义public的clone方法对Object的浅拷贝对象,补上该对象的深拷贝

hashtable 和 hashmap 的区别: blog

Java核心技术-读书笔记的更多相关文章

  1. Java核心技术读书笔记02

    第四章 对象和类 类之间的关系 最常见的三种关系 依赖("uses-a") Order依赖Account类看信息 聚合("has-a") Order包含多个It ...

  2. Java核心技术读书笔记01

    Volume I Chapter 1  An Introduction to Java  • 1.1 Java as a Programming Platform• 1.2 The Java ‘Whi ...

  3. java effective 读书笔记

    java effective 读书笔记 []创建和销毁对象 静态工厂方法 就是“封装了底层 暴露出一个访问接口 ” 门面模式 多参数时 用构建器,就是用个内部类 再让内部类提供构造好的对象 枚举 si ...

  4. 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域

    深入理解Java虚拟机 -- 读书笔记:JVM运行时数据区域 本文转载:http://blog.csdn.net/jubincn/article/details/8607790 本系列为<深入理 ...

  5. Java并发读书笔记:线程安全与互斥同步

    目录 导致线程不安全的原因 什么是线程安全 不可变 绝对线程安全 相对线程安全 线程兼容 线程对立 互斥同步实现线程安全 synchronized内置锁 锁即对象 是否要释放锁 实现原理 啥是重进入? ...

  6. 单元测试之道Java版——读书笔记

    单元测试知道Java版读书笔记 首先我们必须要知道我们所写的代码,它的功能是什么,如果我们不了解代码的行为,那么也就无从测试. 我们测试的目的,是为了我们整个程序架构的稳定,代码其实就是欧文要实现功能 ...

  7. java核心技术学习笔记之一程序设计概述

    Java 核心技术之一程序设计概述 一.   Java语言的特点 简单行 :取经于C++,排除了C++不常用的指针.结构等,增加垃圾回收. 面向对象:与C++不同是单继承,但是可以继承多接口.完全面向 ...

  8. java中的自动拆装箱与缓存(Java核心技术阅读笔记)

    最近在读<深入理解java核心技术>,对于里面比较重要的知识点做一个记录! 众所周知,Java是一个面向对象的语言,而java中的基本数据类型却不是面向对象的!为了解决这个问题,Java为 ...

  9. 《Effective Java》读书笔记(一)之创建和销毁对象

    最近在研读<Effective Java>一书,读书不做点笔记,感觉很容易就忘掉,于是用本篇博客来记录阅读此书的笔记. 郑重声明: 由于是<Effective Java>一书的 ...

随机推荐

  1. 【selenium】基于python语言,如何用select选择下拉框

    在项目测试中遇到了下拉框选择的控件,来总结下如何使用select选择下拉框: 下图是Select类的初始化描述,意思是,给定元素是得是select类型,不是就抛异常.接下来给了例子:要操作这个sele ...

  2. gdb gdbtui

    1. gdbtui 打开tui模式 gdbtui a.out gdb -tui a.out 调试一个正在运行的进程 gdb -p pid 在linux自带的终端里是正常显示的,但是在securecrt ...

  3. Android Xutils3 完全解析

    1.先来认识一下xUtils3 1)xUtils3简介 xUtils是基于Afinal开发的目前功能比较完善的一个Android开源框架,最近又发布了xUtil3.0,在增加新功能的同时又提高了框架的 ...

  4. .net web api 权限验证

    做一个登录权限验证. 开始吧. using System; using System.Collections.Generic; using System.Drawing; using System.D ...

  5. Python之路(第四十七篇) 协程:greenlet模块\gevent模块\asyncio模块

    一.协程介绍 协程:是单线程下的并发,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的. 协程相比于线程,最大的区别在于 ...

  6. Java数据类型(2)------自动封装拆箱

    目的: 自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象,以使用对象的API和引用类型操作.自动装箱与拆箱的机制可以让我们在Java的变量赋值或者是方法调用等情况下 ...

  7. NetScaler的常用配置

    CITRIX NETSCALER常用功能有:LB,CS,GSLB,SSL LB实现的功能是服务器负载均衡,CS实现基于七层(域名,IP等)的负载均衡,GSLB实现的功能是全局负载均衡,SSL实现的功能 ...

  8. vue中axios的简单使用

    我们一般在用jq的时候会使用到ajax来进行与服务器之间的交流,vue中也提供了相应的类似于ajax的方法-axios来进行与服务器之间的数据传递 现在的这篇是最简单的使用,后续会添加上来复杂的使用 ...

  9. udp,select超时和recvfrom收不到数据原因

    wirshark抓包,发现有数据.但是select超时,直接recvfrom又失败. 代码中需要改进:select超时后,会移除fd_set集合中超时的那个句柄,所以每次要重新进行FD_SET,然后再 ...

  10. pychram-redis破解

    1. Preferences -> Plugins-> 选择右下角Browse repositories 2. 搜索Iedis 3. 找到Iedis插件目录:C:\Users\用户名\.P ...