总结:
- java的数据类型可分为两种,基本数据类型和引用数据类型
- unicode为每个字符制定了一个唯一的数值,在任何语言、平台、程序都可以安心的使用
- 布尔(Boolean)类型的变量,只有true(真)和false(假)两个值
- 数据类型的转换可分为下列两类:自动类型转换与强制类型转换
- 算法运算符的成员有加法运算符、减法运算符、乘法运算符、除法运算符、余数运算符
- if语句可依据判断的结果来决定执行程序
- 递增与递减运算符有着相当大的便利性,善用他们可提高程序的简洁度
- 括号是用来处理表达式优先级的,也是java的运算符
- 需要重复执行某项功能时,循环就是最好的选择。可以根据程序的需求与习惯,选择使用java中所提供的for、while及do...while循环来完成
- break语句可以让程序强制逃离循环,当程序运行到break语句时,会离开循环,继续执行循环外的下一个语句。如果break语句出现在嵌套循环中的内层循环,则break语句只会逃离当前层循环。
- continue语句可以强制程序跳到循环的起始处,当程序运行到continue语句时,会停止运行剩余的循环主体,而返回到循环的开始处继续运行
- 选择结构包括了if、if...else及switch语句,语句中加了选择结构后,就像是十字路口,根据不同的选择,程序的运行会有不同的方向与结果
- 方法是一段可重复调用的代码段,当方法需要被主方法(main)调用时,方便的做法可以加入public static关键字修饰
- 方法的重载:方法的名称相同,方法的返回参数可以相同也可以不同,参数的类型或个数不同,则此方法称之为重载
15.面向对象的三大特征:封装、继承、多态。
16.类与对象的关系:类是对象的模板,对象是类的实例,类只能通过对象才可以使用。
17.类的组成:属性和方法。
18.对象的产生格式:类名称 对象名称 = new 类名称();
19.如果一个对象没有被实例化而直接使用,则使用时会出现空指针异常。
20.类属于引用数据类型,进行引用传递时,传递的是堆内存的使用权。
21.类的封装性:通过private关键字进行修饰,被封装的属性不能被外部直接调用,而只能通过setter或getter方法完成。只要是属性,则必须全部封装。
22.构造方法可以为类中的属性初始化,它与类的名称相同,无返回值类型声明。如果在类中没有明确地定义出构造方法,则会自动生成一个无参的构造方法,在一个类的构造方法可以重载,但是每个类都至少有一个构造方法。
23.String类在java中较为特殊,它可以使用直接赋值的方式,也可以通过构造方法进行实例化,前者只会产生一个实例化对象,而且此实例化对象可以重复使用,后者将产生两个实例化对象,其中一个是垃圾空间。在String中,比较内容使用equals()方法,而“==”比较的只是两个字符串的地址值。字符串的内容一旦声明则不可改变。
24.在java中使用this关键字表示当前的对象,通过this.属性调用本类中的属性,通过"this.方法()" 调用本类中的其他方法,还通过this()的形式调用本类中的构造方法,但是调用时要求放在构造方法的首行。
25.使用static声明的属性和方法可以由类名直接调用,static属性是所有对象共享的,所有对象都可以对其进行操作。
26.如果需要限制类对象的产生,则可以将构造方法私有化。
27.对象数组的使用要分成两个部分:第一步是声明数组,第二步是为数组开辟空间。开辟空间之后数组中的每个元素的内容都是null。
28.内部类是在一个类的内部定义另外一个类,使用内部类可以方便地访问外部类的私有操作。在方法中声明的内部类要访问方法的参数,则参数前必须加上final关键字。
29.继承可以扩充已有类的功能,通过extends关键字实现,可将父类的成员(包含数据成员与方法)继承到子类
30.java在执行子类的构造方法前会先调用父类中的构造方法,则可在子类的构造方法中通过super()这个关键字来完成。
31.this()是在同一类内调用其他的构造方法,而super()则是从子类的构造方法调用其父类的构造方法。
32.使用this调用属性或方法时会先从本类中查找,如果本类中没有查找到,再从父类中查找,而是用super的话会直接从父类中查找需要的属性和方法。
33.this()与super()的相似之处:(1)当构造方法有重载时,两者均会根据所给予的参数的类型与个数正确地执行相对应的构造方法。(2)两者均必须编写在构造方法内的第一行,也正是这个原因,this()与super()无法同时存在同一个构造方法内。
34.重载(overloading),指在相同类内,定义名称相同,但参数个数或类型不同的方法,也因此,java可依据参数的个数或类型调用响应的方法
35.覆写(overriding),指在子类中,定义名称、参数个数与类型均与父类相同的方法,用以覆写父类里的方法。
36.如果父类的方法不希望被子类覆写,可在父类的方法之前加入final关键字,如此该方法便不会被覆写。
37.final的另一个作用是把它加在数据成员变量前面,如此,该变量就变成了一个常量,便无法在程序代码中在做修改了,使用public static final可以声明一个全局常量。
38.所有的类均继承自Object类,一个好的类应该覆写Object类中的toString()、equals()、hashCode()3个方法,所有的对象都可以向Object类进行向上转型。
39.java可以创建抽象类,专门用来当作父类,抽象类的作用类似于模板,其目的是依据格式来修改并创建新的类。
40.抽象类的方法可以分为两种:一种是一般的方法,另一种是以abstract关键字开头的抽象方法。抽象方法并没有定义方法体,而是要保留给由抽象类派生出的新类来定义。
41.抽象类不能直接用来产生对象,必须通过对象的多态性(指向上转型 如:抽象类 对象名称 = new 抽象类继承类(); )进行实例化操作。
42.接口是方法和全局常量的集合,他必须被子类实现。一个接口可以同时继承多个接口,一个子类可以同时实现多个接口。
43.java并不允许类的多重继承,但是允许实现多个接口。
44.接口与一般类一样,均可通过扩展的技术来派生出新的接口。原来的接口成为基本接口或父接口; 派生出的接口成为派生接口或子接口。通过这种机制,派生接口不仅可以保留父接口的成员,同时也可以加入新的成员以满足实际的需求。
45.java对象的多态性分为向上转型(自动)和向下转型(强制)。
46.通过instanceof关键字,可以判断对象属于那个类。
47.匿名内部类的好处是可利用内部类创建不具有名称的对象,并利用它访问类里的成员。
48.异常是导致程序中断运行的一种指令流,当异常发生时,如果没有进行良好的处理,则异常就会中断执行。
49.异常处理可以使用try……catch语句进行处理,也可以使用try……catch……finally进行处理。在try语句中捕捉异常,之后在catch中处理异常,finally 作为异常的统一出口,不管是否发生异常都要执行此段代码。
50.异常的最大父类是Throwable,它分为两个子类:Exception和Error。Exception表示程序处理的异常,而Error表示JVM错误,一般不由程序开发人员处理。
51.发生异常后,JVM会自动产生一个异常类的实例化对象,并匹配相应的catch语句中的异常类型。也可以利用对象的向上转型关系,直接捕获Exception。
52.throws用在方法声明处,表示本方法不处理异常。
53.throw表示在方法声明处,表示本方法不处理异常。
54.自定义异常类时,只需要继承Exception类即可。
55.断言时JDK1.4之后提供的新功能,可以用来检测程序的执行结果,但开发中并不提倡使用断言进行检测。
56.java中使用包可以实现多人协作的开发模式,避免类名称重复的问题。
57.在Java中使用package关键字来将一个类放入一个包中。
58.在java中使用import语句,可以导入一个已有的包。
59.如果在一个 程序中导入了不同包的同名类,在使用时一定要明确地写出“包.类名称”。
60.java中的访问控制权限分为4种:private、default、protected、public。
61.使用jar命令可以将一个包打成一个jar文件,供用户使用。
62.java新特性中提供了可变参数,这样在传递参数时就可以不用受到参数的个数限制,全部的参数将以数组的形式保存下来。
63.foreach时java中的新特性,主要目的是方便地输出数据或集合组中的内容。
64.泛型可以使程序的操作更加安全,避免发生类转换异常。
65.在程序中使用类时如果没有指定泛型,则泛型将被擦除,使用Object接受参数。
66.可以使用通配符“?”接受全部的泛型类型对象。
67.通过<?extends 类> 可以设置泛型的上线,通过<?super 类> 可以设置泛型的下限。
68.泛型方法可以定义在泛型类中,也可以定义在普通类中。
69.泛型也可以在接口中定义,实现泛型接口的子类要指明具体的泛型类型。
70.在程序中可以使用一个枚举来指定对象的取值范围,枚举就相当于一种简化版的多例设计模式。
71.在java中使用enum关键字定义一个枚举类,每一个枚举类都是继承Enum类。
72.在枚举中可以通过values()方法取得枚举中的全部内容。
73.在枚举类中可以定义构造方法,则在设置枚举范围时必须显式地调用构造方法。
74.一个枚举类可以实现一个接口或者直接定义一个抽象方法,但是每个枚举对象都必须分别实现全部的抽象方法。
75.Annotaion是JDK1.5之后新增的功能,主要是使用注释的形式进行程序的开发。
76.在系统中提供了3个内建的Annotaion: @Override、@Deprecated、@SuppressWarnings。
77.线程(thread)是指程序的运行流程。多线程的机制可以同时运行多个程序块,使程序运行的效率更高,也解决了传统程序设计语言所无法解决的问题。
78.如果在类里要激活线程,必须先做好下面的两项准备。
(1) 此类必须继承Thread类或者实现Runnable接口
(2) 线程的处理必须覆写run()方法。
79.每一个线程,在其创建和消亡前,均会处在下列5种状态之一:创建、就绪、运行、堵塞和终止。
80.Thread类里的sleep()方法可用来控制线程的休眠状态,休眠的时间要视sleep()方法的参数而定。
81.当多个线程对象操控同一资源时,要使用synchronized关键字来进行资源的同步处理。
82.在一个字符串内容需要频繁修改时,使用StringBuffer可以提升操作性能,因为StringBuffer的内容是可以改变的,而String的内容是不可以改变的。
83.StringBuffer类中提供了大量的字符串操作方法:增加、替换、插入等。
84.Runtime表示运行时在一个JVM中只存在一个Runtime,所以如果要想取得Runtime类的对象,直接使用Runtime类中提供的静态方法getRuntime()即可。
85.System类是系统类,可以取得系统的相关信息,使用System.gc()方法可以强制性地进行垃圾的收集操作,调用此方法实际上就是调用了Runtime类中的gc()方法。
86.使用Date类可以方便地取得时间,但取得的时间格式不符合地域的风格,所以可以使用SimpleDateFormat类进行日期的格式化操作。
87.处理大数字可以使用BigInteger和BigDecimal,当需要精确小数点操作位数时则需要使用BigDecimal类。
88.通过random类可以取得指定范围的随机数字。
89.如果一个类的对象想被克隆,则此对象所在的类必须实现Cloneable接口。
90.要想对一组对象进行排序,则必须使用比较器,比较器接口Comparable中定义了一个compareTo()的比较方法,用来设置比较规则。
91.正则表达式是开发中最常用的一种校验方式,再JDK1.4之后,String类中的replaceAll()、split()和matches()方法都对正则有所支持。
92.Class类是反射机制操作的源头,Class类的对象有3种实例化方式:
(1) 通过Object类中的getClass()方法;
(2) 通过“类.class” 的形式。
(3)通过Class.forName()方法(此种方法最为常用)。
93.可以通过Class类中的newInstance()方法进行对象的实例化操作,但是要求类中必须存在无参构造方法,如果类中没有无参构造,则必须使用Constructor类完成对象的实例化操作。
94.在Java中使用File类表示文件本身,可以直接使用此类完成文件的各种操作,如创建、删除等。
95.输入输出流,主要分为字节流(OutputStream、InputStream)和字符流(Writer、Reader)两种,但是在传输中以字节流操作较多,字符流在操作时使用到缓冲区,而字节流没有使用到缓冲区。
96.字节或字符流都是以抽象类的形式定义的,根据其使用的子类不同,输入或输出的位置也不同。
97.在IO包中可以使用OutputStreamWriter和InputStreamReader完成字符流与字节流之间的转换操作。
98.使用ByteArrayInputStream和ByteArrayOutputStream可以对内存进行输入输出操作。
99.在IO中,输出时最好使用打印流(PrintStream、PrintWriter),这样可以方便地输出各种类型的数据。
100.System类提供了3个支持IO操作的常量:out、err和in。
System.out:对应着显示器的标准输出;
System.err:对应着错误打印,一般此信息不希望用户看到;
System.in:对应着标准的键盘输入。
101.BufferedReader可以直接从缓冲区中读取数据。
102.使用Scanner类可以方便地进行输入流操作。
103.造成字符乱码的根本原因就在于程序编码与本地编码的不统一。
104.对象序列化可以将内存中的对象转化为二进制数据,但对象所在的类必须实现Serializable接口,一个类中的属性如果使用transient关键字声明,则此属性的内容将不会被序列化。
105.对象的输入输出主要使用ObjectInputStream和ObjectOutputStream两个类完成。
106.ServerSocket主要用在TCP协议的服务器程序开发上,使用accept()方法等待客户端连接,每一个连接的客户端都使用一个socket表示。
107.服务端加入多线程机制后,就可以同时为多个用户提供服务。
108.类集的目的是用来创建动态的对象数组操作。
109.Collection接口是类集中的最大单值操作的父接口,但是一般开发中不会直接使用此接口,而常用List或Set接口。
110.List接口扩展了Collection接口,里面的内容是允许重复的。
111.List接口的常用子类ArrayList和Vector,在开发中,ArrayList性能较高,属于异步处理,而Vector性能较低,属于同步处理。
112.Set接口与Collection接口的定义一致,里面的内容是不允许重复的,依靠Object类中的equals()和hashCode()方法来区分是否是同一个对象。
113.Set接口的常用子类是HashSet和TreeSet,前者是散列存放,没有顺序,后者是顺序存放,使用Comparable进行排序操作。
114.集合的输出要使用Iterator接口完成,iterator属于迭代输出接口。
115.在JDK1.5之后,集合也可以使用foreach的方式输出。
116.Enumeration属于最早的迭代输出接口,现在基本上很少使用,在类集中,Vector类可以使用Enumeration接口进行内容的输出。
117.List集合的操作可以使用ListIterator接口进行双向的输出操作。
118.Map接口可以存放一对内容,所有的内容以key->value的形式保存,每一对key->value都是一个Map.Entry对象的实例
119.Map中的常用子类是HashMap和Hashtable。HashMap属于异步处理,性能较高,Hashtable属于同步处理,性能较低。
120.类集中提供了Collections工具类完成类集的相关操作。
121.Stack类可以完成先进后出的操作。
122.Properties类属于属性操作类,使用属性操作类可以直接操作属性文件。