1996年 JDK 1.02正式诞生

 JAVA语言的特点:

 a)、简单:无指针、无运算符重载、无多继承

b)、网络的

c)、解释的

d)(纯)面向对象的

e)、体系中立的(不和任何硬件平台挂钩,字节码可以移植到任何机器而不受硬件的特性影    响)

f)、健壮的

g)、安全的(java中加入了垃圾回收机制)

h)、可移植的(不同平台上数据长度一样,再加上JVM即可实现移植)

java可移植的条件:

   1、在不同的平台上,java的数据类型所分配的长度是确定的

   2、字节码的长度是确定的(与平台无关)

   3、不同硬件平台有不同的JVM

java源文件执行过程:

   编译----》字节码----->>不同的OS

                                                 java源文件

                                                        | 编译

                                                    字节码

                                                         |(非0、1形式)

                                JVM1           JVM2                 JVM3          .......

                                    |                   |                          |                  |

                                windows       linux                   MAC         others OS


                              *****不同的机器需要不同的虚拟机*****************

 JAVA平台的分类:

        | JAVA SE(核心类库)  ----------标准版

        | JAVA EE  (企业开发) ----------企业版

        | JAVA  ME (微开发) ----------微型版  

    以上三种平台的划分依据是:对核心包的支持和8中基本数据类型的支持。

JAVA SE :    | JVM:解释执行自己饿吗文件(不可单独下载)

                     | JRE(包含JVM)---是最小的下载单位(有版本之分)

                     | JDK 

                     | java语言

 三者关系:

           |java

              |  JDK

                    | JRE

                        |JVM


******************一般浏览器会自带JVM,但支持不是太完全****************


java tips:

1、 在java中规定,一个源文件中可以有多个类,但是只能有一个公开(public)的类,而且公开的类的名字要与源文件的文件名相同,编译时源文件中有几个类就会生成几个字节码文件,字节码文件的名字与类名一致。

2、java demo1 : 该命令做了以下事情:

  a)、启动了一个JVM进程

  b)、默认到当前目录下找demo1.class(由ClassLoader加载)

  c)、由一个字节码校验器对字节码的安全进行审查

  d)、由解释器去结合JRE解释字节码文件

(JVM做了 b 、c、 d)


ClassPath: 为JVM指定寻找字节码文件的位置

 Path: 指定CMD程序到哪里去找可执行的命令(多是外部命令)


方法:修饰符、返回值、方法名称、参数列表

注意区分对象与引用

 Student s = new Student() ;  

s是引用,而真正的对象是   new Student() .


java中当一个类没有显示的给出构造方法时,系统会提供一个无参的构造方法,若认为提供了构造方法(无论是否有参数),系统都不会再提供构造方法。


java中的封装:修饰符级别(private等)、 语句块级别、方法级别、类级别、包层次。

封装的优点:隐藏具体的实现细节,防止对数据的未授权访问,保证数据的完整性。


方法重载: 要求方法的参数列表必须不同(参数的顺序、个数、类型)

***********java中导入jar包(java一般会自动导入lang包),只是导入该包的直接类,不会将该包的子包也导入,如导入一个包后还是找不到类,则徐考虑要用的类是否在该包的子包中。

字符编码: 用一串二进制数表示特定的字符。

UNIcode:占2个字节,是一种跨平台的字符编码,java采用的就是unicode

java中把char默认的当成无符号整数int 来处理。

构造方法:系统调用构造方法时,会先给属性分配空间,且此值为默认的,然后再执行构造方法内部的初始化语句进行初始化。 构造方法表面上没有返回值,但实际是有返回值的,其返回构造的对象的句柄。

 java中,局部变量使用前必须初始化,局部变量只能使用final修饰符。

“==”:对于引用型而言,比较的是地址,及两个引用是否指向同一个对象,对于基本类型,比较的是他们的值是否相等。

java继承:

      创建对象子类对象时先创建一个父类对象,父类的非私有属性可以被子类继承,父类的方法不再适合子类时,子类可以对父类方法进行重写。

构造子类对对象时会调用父类的默认无参的构造方法。

Java中一个类只能继承自一个直接父类,即单继承,但接口可以多继承。

引用类型的强制转换实质是一个还原的过程。

方法覆盖时的要求:

 1、访问权限不能缩小(可以放大,可以相同)

 2、返回类型不能改变或者返回其子类

 3、方法名称必须相同

 4、参数列表必须相同

 5、只能覆盖一次

6、覆盖只能在子类中进行

7、静态方法不存在覆盖(静态方法是专属与类的而不是某个对象)

方法重载要求:

1、修饰符没限制             2、返回值无限制

3、方法名称必须相同         4、参数列表必须不同

5、可以重载多次          6、只能在本类中           

继承缺点: 打破封装、容易受基类影响、父类的东西都拿过来(有些东西子类并不需要)


*********

代码复用时首选合成(聚合)

 1、private可以修饰属性、方法、构造方法但不能修饰类,被private修饰的有效范围是本类

 2、default可以修饰属性、方法、构造方法和类,被其修饰的可以在同包类中使用

 3、protected可以修饰属性、方法、构造方法、可以在本类中访问,可以在同包类中访问,可以在非同包类中子类中访问。

**********************protected专门为继承而设计**********************************

 this、super的使用:

 this是在创建好对象之后,JVM分配的指向该对象自身的引用,可以利用其调用构造函数:

 this(参数),但这仅限与在构造方法。

 super:可以调用父类的指定的构造方法,且只能在子类的构造方法的第一行语句中。

*****

一般子类的构造方法的第一行默认系统会调用父类的构造方法:super();

子类的每一个构造方法中都有supre();

****


一个java类中属性的初始化的顺序:

 1、父类的属性          2、父类初始化块             3、父类构造方法 

 4、子类属性              5、子类初始化块             6、子类构造方法

当你使用一个类时,这个类就会被立刻加载进来

静态方法中不可以访问实例属性及方法,但实例方法却可以访问静态方法、属性,静态方法不能使用this。

对与初始化的顺序,永远是:先初始化父类静态的,然后是子类静态的属性,然后是父类的实例属性,最后是子类的实例属性。


抽象类:

1、抽象类与具体类的唯一区别是:抽象类不可以直接实例化

2、一个继承了抽象类的类,如果实现了抽象类的所有抽象方法,则其变成一个具体类,而若只实现了部分抽象方法,则其必须声明为抽象类。

3、抽象类中的方法可以全部是抽象方法,也可以全部是具体方法,也可以一半一半

4、抽象类是一种类型

5、内存中是存在抽象类的实例的

6、抽象类是专用来继承的

接口:接口是一个特殊的抽象类

1、接口中声明的属性,系统会自动添加 public staic final修饰,表示该属性是一个公开的静态常量

2、接口中声明的方法都是抽象方法,系统会默认添加abstract和public修饰符

3、java中一个类只能直接继承一个类,但却可以同时实现多个接口,而接口之间却可以实现多继承


接口与抽象类的区别:

 抽象类中可以有实例属性,且抽象类是有构造方法的,但接口是没有构造方法的。

接口中可以什么都没有,这样的接口称为“标识”。


异常处理:

目的:异常是不能避免的,而处理异常是为了让程序平稳的结束,将损失减小到最低

异常分类:运行时异常(未检查异常)和编译时异常(已检查异常),一般异常处理只针对运行时异常。

处理异常:编程(通过条件过滤等措施避免)、try -catch、异常抛出(throws、throw)

exit与finally及return的执行强度:

  exit(1)  > finally   > return 

 

内部类:在一个类内部定义的类


局部内部类(定义在方法中类)使用外部方法的局部变量时,要使用的局部变量一定必须是final类型。(定义成final后,虚拟机会将该final的变量拷贝一份给局部内部类,局部内部类实际使用的是自身的那一份拷贝 。)

       

内部类:

1、可以使用外部类的私有属性及方法

2、每一个内部类都隶属于外部类

3、成员内部类中不能有静态的东西

4、内部类将接口公开,但实现类作为局部内部类隐藏起来,强制用户使用面向对象的编程

5、内部类可以配合接口及抽象类正真实现多继承(内部类主要用途)

(当一个接口和一个抽象类有一个同名的方法时,而一个具体类又必须实现并继承他们,此时必须使用内部类)。

匿名内部类只是用一次,所以此种类没有构造方法,匿名类可以出现在方法的参数中,也可以出现在方法的返回值中。

java集合:

java的集合分为2个接口: collection、Map

 对应关系:

                                                         collection接口

                有序可重复接口:List                                  无序不可重复接口:set

          LinkedList             ArrayList                           HashSet                   接口SortedSet

                                                                                                                             TreeSet

                                          

                                接口Map

         HashMap                         SortedMap

                                                             TreeMap


集合操作:添加、删除、查找、遍历


Java操作properties文件:

读操作:1、获取流:FileInputStream 或者getResourceAsStream

2、装载键值列表到新建的properties对象:load(流)

3、操作键值

(properties文件的操作还可以使用Resourcebuddle)

Properties文件要放在classpath下(即java类或者库的存放路径),java工程中一般与类文件同目录即可,在web工程中最简单的是放在WEB-INF/classes目录下,也可放在其他目录下,此时需要指定目录的位置,即设置classpath的路径。