从事编程工作也有一段时间了,但是最近发觉基础知识的确还是需要加强,于是读了《Java核心技术》以加强基础知识。也只有掌握扎实的基础知识才能更灵活的
运用它们,才可以达到融会贯通的目的。
很难想象才流行20年java语言竟然获得了程序员竞相追逐的辉煌成就。
多态一般用在方法的返回值中和方法的参数上面。
类,定义起来容易划分起来难。
在java中,利用关键字final声明常量。关键字final表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了。
习惯上,常量名使用大写。
final double CM_PER=2.54;
在java中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量。可以
使用关键字static final设置一个类常量。
&& 和||是按照短路方式求值的。如果第一个操作数已经能够确定表达式的值,第二个操作数就不必计算了。
x !=0 && 1/x > x+y //如果x!=0为false则1/x不会被计算
expression1 || expression2 //当第一个表达式为true,结果自动为true,不会计算第二部分。
Math类中包含了各种各样的数学函数。
字符串:
从概念上讲,Java字符串就是Unicode字符序列。例如,串“Javau2122”由5个Unicode字
符J、a、v、a和TM 。Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类String。
每个用双引号括起来的字符串都是String类的一个实例:
String e="";
String str="Hello";
与任何程序设计语言一样,Java使用条件语句和循环结构确定控制流程。
块(即复合语句)是指由一对花括号括起来的若干条简单的Java语句。块确定了变量的作用域。
continue语句将控制转移到最内层循环的首部。
有个更加简单的方式打印数组中的所有值,即利用Arrays类的toString方法。调用Arrays.toString(a)。
每一个Java应用程序都有一个带String arg[]参数的main方法。这个参数表明main方法将接收一个字符串数组,也就是命令行参数。
数组排序P93 不规则数组。
标准的Java库提供了几千个类,可以用于用户界面设计,日期、日历和网络程序设计。
Java应用程序中的全部内容都必须放置在类中。Java中任何方法的代码都用"{"开始,用"}"结束。
Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。
在Java中,每一个变量属于一种类型(type)。在声明变量时,变量所属的类型位于变量名之前。
在Java中,变量的声明尽可能地靠近变量第一次使用的地方,这是一种良好的程序编写风格。
在Java中一共有8种基本类型。整型:int、short、long、byte,浮点类型:float、double
字符型char ,boolean类型。string不是基本类型!!
对象
要想使用OOP,一定要清楚对象的三个主要特性:
1、对象的行为。(可调用的方法)
2、对象的状态。(对象属性)
3、对象标识。——如何辨别具有相同行为与状态的不同对象?
作为一个类的实例,每个对象的标识永远是不同的,状态常常也存在着差异。
封装(有时称为数据隐藏)是与对象有关的一个重要概念。从形式上看,封装不过是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。
对于每个特定的类实例(对象)都有一组特定的实例域值。这些值得集合就是这个对象的当前状态。无论何时只要向对象发送一个消息,它的状态就有可能发生变化。
实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实例域。程序仅通过对象的方法与对象数据进行交换。
识别类的简单规则是在分析问题的过程中寻找名词,而方法对应着动词。
一定要认识到一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。
Date birthday;// 定义了一个变量
birthday=new Date();// birthday 引用Date类的一个实例
一定要认识到:一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。
在Java中,任何对象变量的值都是对存储在另外一个地方的一个对象的引用。new操作符的返回值也是一个引用。
构造器总是伴随着new操作一起调用。
隐式参数和显示参数
在每一个方法中,关键字 this 表示隐式参数。
方法参数:
Java程序设计语言总是采用值调用。也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的内容。
下面总结一下在Java程序设计语言中,方法参数的使用情况:
• 一个方法不能修改一个基本数据类型的参数(即数值型和布尔型)。
• 一个方法可以改变一个对象参数的状态。
• 一个方法不能实现让对象参数引用一个新的对象。
类设计技巧:
1、一定将数据设计为私有。
2、一定要对数据初始化。
3、不要在类中使用过多的基本数据类型。
4、不是所有的域都需要独立的域访问器和域更改器。
5、使用标准格式进行类的定义。
6、将职责过多的类进行分解。
7、类名和方法名要能够体现它们的职责。
只要方法是私有的,类的设计者就可以确信:它不会被外部的其他类操作调用,可以将其删去。如果方法是公
有的,就不能将其删去,因为其他的代码很可能调用它。
如果在编写一个类时没有编写构造器,那么系统就会提供一个默认构造器。这个默认构造对象与类121
器将所有的实例域设置为默认值。于是,实例域中的数值型数据设置为0、布尔型数据设置为false、所有对象变量将设置为null。
使用包的主要原因是确保类名的唯一性。
继承
继承已存在的类就是复用这些类的方法和域。在此基础上,还可以添加一些新的方法和域,以满足新的需求。这是Java程序设计中的一项核心技术。
"is-a"关系是继承的一个明显特征。在通过扩展超类定义子类的时候,仅需指出子类与超类的不同之处。因此在设计类时,应该将通用的方法放到
超类中,而将具有特殊用途的方法放到子类中,这种将通用的功能放到超类的做法,在面向对象程序设计中十分普遍。
动态绑定有一个非常重要的特性:无需对现存的代码进行修改,就可以对程序进行扩展。
在覆盖一个方法的时候,子类方法不能低于超类方法的可见性。特别是,如果超类方法是public,子类方法一定要声明为public。
由于在Java中,每个类都是由Object类扩展而来的,所以熟悉这个类提供的所有服务十分重要。
在Java中只有基本类型不是对象。所有的数组类型,不管是对象数组还是基本类型的数组都扩展于Object类。
强烈建议为自定义的每一个类添加toString方法。
可以使用Object类型的变量引用任何类型的对象:
Object obj=new Employee();
远程方法调用机制使得分布式对象之间可以进行通信。???
接口:用来描述类具有什么功能。接口绝不能含有实例域,也不能在接口中实现方法。提供实例域和方法实现的任务
应该由实现接口的那个类来完成。虽然在接口中不能包含实例域或静态方法,但却可以包含常量。与接口中的方法都自动地被
设置为public一样,接口中的常量域被自动设为 public static final。
Java集合类,应该将Java迭代器认为是位于两个元素之间。当调用next时,迭代器就越过下一个元素,并返回刚刚越过的
那个元素的引用。
int hashCode() 返回这个对象的散列码。equals和hashCode的定义必须兼容,即如果x.equals(y)为true,x.hashCode()必须等于y.hashCode()。
hashCode()方法的存在是为了减少equals方法的调用次数,从而提高程序效率。
多进程与多线程的区别,本质的区别在于每个进程拥有自己的一整套变量,而线程则共享数据。
如何通过运行一个线程中的关键代码来保持用户对程序的 控制权。
如果需要执行一个比较耗时的任务,应该使用独立的线程。
如何控制线程之间的交互。