一、搭建Java环境
1、下载和安装JDK(jdk和jre到指定目录,如E:\Java\jdk1.7.0 以及E:\Java\jar路径必须记住)
2、配置环境变量
1、计算机→属性→高级系统设置→高级→环境变量
2、系统变量→新建 JAVA_HOME 变量
变量值填写jdk的安装目录(本人是 E:\Java\jdk1.7.0)
3、系统变量→寻找 Path 变量→编辑
在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
(注意原来Path的变量值末尾有没有;号,如果没有,先输入;号再输入上面的代码)
4、系统变量→新建 CLASSPATH 变量
变量值填写 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)
系统变量配置完毕
3、验证环境搭建成功,打开CMD 输入 Java -version
三、Eclipse
1、Eclipse SE版本是标准版,一般用来书写JAVA功能程序
2、Eclipse EE版本是企业版,才能书写Web系统
3、My Eclipse与Eclipse EE类似,但本身集成的功能较多
四、类的一般形式
1、类的概述:
类就是事物的集合和抽象,它所代表的是这类事物所共有的行为和属性
2、类的一般形式
比如:汽车是一个类,
它的属性有发动机、车轮、颜色、长度,
它的方法有1、启动汽车 2、关闭汽车
而宝马车是汽车的一个对象,一个实例
修饰符有:可以修饰类、属性、方法
Private:只有在本类中可以看见
Protected:在本类或者是同一个包可见
Public:对于所有的类都可见
默认(无修饰符):默认修饰符,在本类或者在同一个包可见
返回值类型和return的数据的类型一致
Public class 类名{
类型1 变量名; 例子:public int n=0;
类型2 变量名; public string m=”y”;
方法:修饰符 返回值类型 类名(参数){
方法体
}
}
3、自定义构造方法
(原本系统会给类分配一个默认的构造方法,
默认构造方法:给该类的所有属性都分配一个初值,
如果是字符串类型就是null
所有的数字变量为0
所有的boolean类型全部设置为false
所有的对象变量为null)
构造方法的名字与类名一致,分为无参构造函数和有参构造函数
比如: Student 类中
1、无参:
2、有参:
构造方法的作用是:
1、初始化对象的数据初始化,在声明对象的时候就可以直接初始化数据,例如:
Student student=new Student(“陆超杰”,22);
五、方法的重载
1、实用static声明静态方法,在主类时可以不用声明对象而直接调用该类中的方法
2、在一个类中可以有多个方法共享同一个名称,只要他们的参数不一样就可以了,叫做方法的重载
3、重载具有相同的方法名称,参数类型不同,参数数量不同,参数次序不一样都可以
六、static关键字
1、静态变量
通过static修饰的变量是静态变量
Int a; 非静态的变量在类中是可变的,
Static int b; 静态的变量在类中的值是唯一的,无论哪个对象使用都是同个值
2静态方法
通过static修饰可以声明为静态方法,静态方法和属性一开始就已经存在于内存中,而非静态方法需要声明也就是new才能出现在内存中
访问静态方法是通过(类名.方法名)
1、静态方法不能访问非静态变量
2、非静态方法可以访问静态变量
静态属性或者方法是在类加载的时候产生的
非静态的属性或者方法是在new的时候产生的
3、静态常量
Public static final int x=20; //静态常量的定义方法
七、final关键字
使用final修饰过后的,无论是变量还是方法,都是不可改变的
1、final修饰变量
对于恒定不变的属性,可以使用final来进行修饰
变量名建议全部使用大写
Final修饰的变量不能改变,如果在程序中重新赋值的话,编译会报错
2、final修饰方法
任何继承类无法覆盖该方法,但是重载不受限制
3、final修饰类
该类不能作为任何类的父类
类中的方法全部被自动定义为final类型
八、封装
1、封装概述
封装是Java的三大特性之一
修饰符: private、public、protected、默认
目的:使用修饰符把需要封装的属性(成员)分开来,给私有化,让它不受外部代码影响
2、实现封装
例如,把属性用private修饰,让外部无法影响到这些属性,获取或者赋值只能通过set和get方法,从而实现初步的封装,提高程序的健壮性
九、继承
1、继承概述
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
生活中的继承:
兔子和羊属于食草动物类,狮子和豹属于食肉动物类。
食草动物和食肉动物又是属于动物类。
所以继承需要符合的关系是:is-a,父类更通用,子类更具体。
虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。
2、继承实现
父类:
子类:
主类运行情况:
子类优先调用子类重写的方法,本身就继承有父类的属性和方法
3、如果想调用父类有参的构造方法,必须使用super方法,而且super方法必须在方法体内置顶
十、多态
1、概念
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:
多态性是对象多种表现形式的体现。
现实中,比如我们按下 F1 键这个动作:
• 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
• 如果当前在 Word 下弹出的就是 Word 帮助;
• 在 Windows 下弹出的就是 Windows 帮助和支持。
同一个事件发生在不同的对象上会产生不同的结果。
方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
• (1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
• (2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
• (3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
十一、抽象类
1、抽象类的定义
Abstact 抽象类是为子类提供的一个规范
Public abstract class类名{
定义一个抽象方法 修饰符 abstract 返回值类型 方法名(参数列表); //抽象方法没有方法体
Public abstract void test();
Public abstract void test(){ };
定义一个类,如果这个类是抽象类,那么这个类中至少有一个抽象方法
抽象方法必须在抽象类中 ,而抽象类中可以有抽象方法也可以有非抽象方法
}
2、抽象类的使用
@override //英文单词是重写的意思,只是用来检测是否重写成功,无实际意思
1、如果一个类包含抽象方法,那么该类必须是抽象类。
2、任何子类必须重写父类的抽象方法,或者声明自身为抽象类
十二、接口
1、接口概述
extends(继承)只能继承一个
implements(实现)可以接口多个
接口只有抽象方法,它是比抽象类还要抽象,接口是彻彻底底的抽象。
接口是抽象方法和常量的属性集合。
接口中只能够包含抽象方法和常量,不能够有常量,初始化块,构造器
注意事项:
1、接口的修饰符只有两种,默认(只有在同一个包里可见)和public(所有类可见),
2、接口内的变量会被设置成共有的、静态的和最终的字段
如果定义一个 int i=1; 它会变成 public static final int i=1;
2、接口的实现
1、一个实现类实现多个接口,也就是多继承,需要用逗号来分割开
形式: public class 类名 implements 接口1,接口2,接口3{
方法1( ){
}
方法2( ){
}
…………………
}
2、一个主接口继承多个接口,再用一个类去实现主接口
形式: public interface 主接口 extends 接口1,接口2,接口3{
主接口方法1();
主接口方法2();
}
接口的实现注意事项:
1、为接口中所有的方法都提供具体的实现
2、必须遵守方法重写的所有规则
3、方法的具体实现要跟接口中的方法,保持相同的返回值类型
多继承就是继承多个接口,接口之间需要用逗号来分割开,实现的方法名也可以实现
十三、内部类
一、内部类概述
一个类被嵌套定义在另一个类中,那么这个类就称为是内部类,包含内部类的类就被称为是外部类
内部类相当于外部类的成员方法或者变量
二、如何构造内部类
例如:已创建一个名 Out_class的类,里面嵌套有一个名inner 的内部类
在主方法中使用与声明,需要内部类不可以直接实例化对象出来,只能先声明外部类再进行声明内部类
三、匿名内部类概述
匿名指的是没有名称的类,形式为: 接口名 对象名 =new 接口名(){ 重写接口内的方法}
四、局部内部类
1、在一个类中的方法中,再定义一个类
2、在类的局部位置进行定义的类叫做局部内部类
3、在局部内部类里面可以访问外部类的所有成员变量
五、静态内部类
十四、异常
一、异常概述
1、什么是异常?
异常就是程序运行过程中所出现的不正常现象
Try //把可能发生异常的代码包起来,当发生异常时,将异常抛出
Catch //捕获,如果加上System.exit(0);,则finally段代码则不会执行了
Finally //不管有无异常,这部分代码都必须执行,进行收尾工作
Throw //手动引发一个异常
Throws //声明方法的异常,定义任何被调用方法的异常
2、异常出现的原因
这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起
要理解Java异常处理是如何工作的,你需要掌握以下三种类型的异常:
• 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
• 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
• 错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
原因有:
1、用户输入错误2、代码的错误3、环境的因素
异常机制目的是保证程序的健壮性
3、异常的分类
Error:它是Java运行时的内部错误以及资源耗尽错误,很难恢复,不期望用
RuntimeException:运行时异常
非RuntimeException:非运行时异常,大部分因素是因为环境引起。
空指针异常,指针为空,无法调用方法
数组越界异常,
3、获取异常信息
用e.方法
4、异常声明
声明指的是一个方法不处理它所产生的异常,而是调用层次向上传递,谁调用这个方法,谁来处理
5、手动抛出异常
代码: thorw exception;参数exception表示要抛出的异常对象,该对象是throwble的子类
Try catch finally是可以嵌套使用的
6、异常链
两个或者多个不同的异常出现在同一个程序中,并且会发生嵌套发生
十五、多线程
一、多线程的概述
Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。
这里定义和线程相关的另一个术语 - 进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。
多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。
Java的线程模型
1、新建状态 线程被创建之后便处于新建状态
2、就绪状态 新建状态的线程调用start()进入就绪状态,阻塞状态的线程解除之后进入就绪
3、运行状态 处于就绪状态的线程获得了CPU的资源,该线程进入了运行状态
4、阻塞状态 是一个正在运行的线程,因为一些原因让出CPU资源暂时中止而进入
5、终止状态 正常中止,强制终止,异常终止
二、创建一个线程
Java 提供了三种创建线程的方法:
• 通过实现 Runnable 接口;
•
• 通过继承 Thread 类本身;
•
• 主方法:
•
• 通过 Callable 和 Future 创建线程。
小提醒:接口 对象名 = new 实现类名();// 创建类对象
三、多线程应用
1、多线程并发执行
2、线程优先级