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的路径。