工欲善其事必先利其器! java
再快不能快基础,再烂不能烂语言! 程序员
第一章 Java程序设计概述
Java“白皮书”的关键术语
1. 简单性 2. 面向对象 3. 分布式 4. 健壮性
5.安全性 6. 体系结构中立 7. 可移植性 8. 解释性
9. 高性能 10. 多线程 11. 动态性
复制代码
Java语言的发展情况
版本 |
年份 |
语言新特性 |
类与接口的数量 |
1.0 |
1996 |
语言自己 |
211 |
1.1 |
1997 |
内部类 |
477 |
1.2 |
1998 |
strictfp修饰符 |
1524 |
1.3 |
2000 |
无 |
1840 |
1.4 |
2002 |
断言 |
1524 |
5.0 |
2005 |
泛型类,“for eash”循环,可变元参数,
自动装箱,元数据,枚举,静态导入 |
3279 |
6 |
2006 |
无 |
3793 |
7 |
2011 |
基于字符串的switch,钻石操做符,
二进制字面亮,异常处理改进 |
4024 |
8 |
2014 |
lambda表达式,包含默认方法的接口,
流和日期/时间库 |
4240 |
第2章 Java程序设计环境
- JDK(Java Development Kit)-编写java程序的程序员使用的软件
- JRE(Java Runtion Envionment)-运行java程序的用户使用的软件
- SDK(Software Development Kit)-一个过期的术语,用于描述(1998-2006)之间的JDK
- SE-用于桌面或简单服务器应用的java平台
- EE-用于复杂服务器应用的java平台
- ME-用于手机和其余小型设备的java平台
第3章 Java的基本程序设计结构
3.1 一个简单的Java应用程序
- Java区分大小写
- 关键字class代表java程序中的所有内容都包含在类中。类做为一个加载程序逻辑的容器,程序逻辑定义了应用程序的行为。
- 类名必须是以大写字母开头的名词。若是字母有多个单词组成,每一个单词的第一个字母都应该大写(驼峰命名法)。
- 在类的源文件中必须有一个main方法。
- 在javaSE1.4及之后的版本中强制main方法是public的。
- java中的main方法必须是静态的。
3.3 数据类型
- java是一种强类型的语言,必须为每个变量声明一种类型。
- java没有任何无符号的类型。
- float类型的数值有一个后缀F或f(例如:3.14F)。没有后缀F的浮点数值(例如:3.14)默认为double类型,也能够在浮点数值后面添加后缀D或d(例如:3.14D)。
- 浮点型数值不适用于没法接受舍入偏差的金融计算中,建议使用BigDecimal。
- 声明一个变量后,必须用赋值语句对变量进行显式初始化。
- 关键字final表示这个常量只能被赋值一次,一旦被赋值以后,就不能再改了。常量名使用全大写。
- 可使用equals方法检测两个字符串是否相等,必定不要用== 检测两个字符串是否相等!这个只能肯定两个字符串是否放在同一个位置上(内存地址)。
- 在jdk5.0中引入StringBuilder类。这个类的前身是StringBuffer,其效率有点低,但容许采用多线程的方式执行添加或删除字符的操做。
- 每个以%字符开始的格式说明符均可以用相应的参数替换,其中f表示浮点数,s表示字符串,d表示十进制整数。
- 块(即复合语句)是指由一对大括号括起来的若干条简单的java语句。块肯定类变量的做用域。一个块能够嵌套在另外一个块中。
- 若是在case分支语句中的末尾没有break语句,那么就会接着执行下一个case分支语句。这种状况至关危险,经常会引起错误。
- BigIntger类实现类任意精度的整数运算,BigDecimal实现了任意任务精度的浮点数运算,静态的valueOf方法能够将普通的数值转换成大数值!
- add(加)
- subtract(减)
- multiply(乘)
- divide(除)
- 若是建立了一个100个元素的数组,而且视图访问元素a [ 100 ] (或任何在0~99以外的下标),程序就会引起“array index out of bounds”异常而终止。
第4章
4.1 面向对象程序设计概述
- 面向对象程序设计(OOP)是由对象组成的,每一个对象包含对用户公开的特定功能部分和隐藏的实现部分。程序中不少对象来自标准库,还有一些是自定义的。
- java是彻底面向对象的。
- 类
-
类(class)是构造对象的模版或蓝图。编程
-
由类构造对象的过程称为建立类的实例。数组
-
封装(有时称为数据隐藏): 封装是将数据和行为组合在一个包里,并对对象的使用者隐藏了数据的实现方式。安全
实现 封装 的关键在于绝对不能让类中的方法直接地访问其余类的实例域,程序仅经过对象的方法与对象数据进行交互。服务器
-
对象中的数据称为实例域。多线程
-
操纵数据的过程称为方法。并发
-
对于每一个特定类实例(对象)都有一组特别的实例域值。这些值的集合就是这个对象的状态。分布式
-
OOP的另外一个原则会让用户自定义java类变得垂手可得:经过扩展一个类来创建另外一个新的类。扩展后的新类具备所扩展的类的所有熟悉和方法。扩展一个类的过程称为继承。ide
- 对象
- 对象的三个主要特征:
- 对象的行为: 对象的行为是用可调用的方法定义的。
- 对象的状态: 描述当前特征的信息。对象的状态必须经过调用方法实现。
- 对象标识: 每一个对象都有一个惟一的身份。 就算是两个数据一摸同样的对象也有不一样之处。 做为一个类的实例,每一个对象的标识永远是不一样的,状态经常也存在着差别。
- 类之间的关系
- 依赖(“uses-a”): 若是一个类的方法操做另外一个类的对象,咱们就说一个类依赖于另外一个类。应该尽量地将相互依赖的类减至最少,也就是低耦合。
- 聚合(“has-a”): 一个类中包含另外一个类的对象。也称为“关联”。
- 继承(“”is-a): 在一个类的基础上扩展一个新类。
4.2 使用预约义类
4.3 用户自定义类
- 构造器与类同名。在构造对象时,构造器会运行并将实例域初始化。
- 构造器:
- 构造器与类同名
- 每一个类能够有一个以上的构造器
- 构造器能够有0个,1个或多个参数。
- 构造器没有返回值。
- 构造器老是伴随着new操做一块儿调用
- 构造器中不能定义与实例域重名的局部变量。
- 全部的java对象都是在堆中建立的。
- 普通方法中的第一个参数被称为隐式参数,通常是调用方法名前的对象,后面的参数术语显示参数,显示参数是明显的列在方法中声明的。
- 关键字this表示隐式参数。
- 须要得到或设置实例域的值,须要提供下面几项内容:
- 一个私有的数据域;
- 一个公有的域访问器方法;
- 一个公有的域更改器方法。
- 在实现一个类时,因为公有数据很是危险,因此应该将全部的数据域都设置为私有的。实现一个私有的方法,只需将关键字public改成private便可。
- final修饰符大都用于基本类型域,或不可变类的域(若是类中的每一个方法都不会改变其对象,这种类就是不可变的类)
4.4 静态域与静态方法
- 若是将域定义为static,每一个类中只有一个这样的域。而每个对象对于全部的实例域却都有本身的一份拷贝。
- 静态域属于类,不属于任何独立的对象。
- 静态方法是不能对对象操做的方法。
- 静态方法是没有this参数的方法。
- 如下两种状况下可使用静态方法:
- 一个方法不须要访问对象状态,其所需参数都是经过显示参数提供。(如:类名.方法名)
- 一个方法只须要访问类的静态域。(如:类名.静态域名)
- main方法也是一个静态方法。
4.5 方法参数
- java程序设计语言老是采用按值调用。也就是说,方法获得的是全部参数值的一个拷贝,特别是方法不能修改传递给它的任何参数变量的内容。
- java中方法参数的使用状况
- 在传参过程当中,一个方法不能修改一个基本数据类型的参数。
- 在传参过程当中,一个方法能够改变一个对象参数的状态。
- 若在方法中,对象参数引用类一个新的对象,那么改变的就是新对象的值。
4.6 对象构造
- 重载:有些类有多个构造器,这种特征叫作重载。若是多个方法有相同的名字,不一样的参数,便产生了重载。经过根据参数的不一样匹配对应的方法,这个过程被称为重载解析。
- java容许重载任何方法,而不仅是构造函数。
- 返回类型不做为重载的区别参照。
- 若构造器中没有显示地给域赋予初值,那么会自动赋为默认值。对象引用为null。
- 仅当类没有提供任何构造器的时候,系统才会提供一个默认的构造器,若是给出了构造器则覆盖默认构造器。
- 建议将初始化块放在域定义以后。
- 调用构造器的具体处理步骤:
- 全部数据域被初始化为默认值
- 按照在类声明中出现的次序,依次执行全部域初始化语句和初始化块。
- 若是构造器第一行调用了第二个构造器,则执行第二个构造器主体。
- 执行这个构造器的主体。
- 在类第一次加载的时候,将会进行静态域的初始化。全部的静态初始化语句以及静态初始化块都将依照类定义的顺序执行。
- 对象析构与finalize方法的区别:
- 在析构器中,最见的操做是回收分配给对象的存储空间。因为java有自动的垃圾回收器,不须要人工回收内存,因此java不支持析构器。
- 能够为任何一个类添加finalize方法。finalize方法将在垃圾回收器清除对象以前调用。在实际应用中,不要依赖与使用finalize方法回收任何短缺的资源。(不建议使用)
4.10 类设计技巧
-
必定要保证数据私有(绝对不要破坏封装性)。
-
必定要对数据初始化(java不对局部变量初始化,但会对对象的实例域进行初始化)。
-
不要在类中使用过多的基本类型(能够将多个相关的基本类型用其余类代替)。
-
不是全部的域都须要独立的域访问器和域更改器(按需设计)。
-
将职责过多的类进行分解(若是明显地能够将一个复杂的类分解乘两个更为简单的类,就应该将其分解)。
-
类名和方法名要能体现它们的职责。(例如访问器方法用小写get开头,更改器方法用小写set开发)
-
优先使用不可变的类。
更改对象的问题在于,若是多个线程试图同时更新一个对象,就会发生并发更改,其结果是不可预测的。但若是类是不可变的,就能够安全地在多个线程间共享其对象。
后期持续更新中。。。。。。
如有书写错误的地方,欢迎留言,但愿咱们能够一块儿进步,一块儿加油!😜😜