一.java特点
跨平台:java编译器将java文件编译成class字节码文件,只要有安装java运行的机器都能执行这种文件。
简单:java摒弃了多继承运算符承载,指针,内存管理等,支持多线程,自动垃圾回收等特征。
面向对象:所有的java程序和applet均是对象,支持静态和动态风格的代码继承和重用。
分布式:java包括一个支持http和ftp等基于tcp/ip的子库。(为Internet下实现动态内容提供技术途径)
办编译半解释:源程序先编译成字节码文件,java解释器直接进行解释执行。
健壮:(类型检查/java自动操纵内存/垃圾回收)
安全:
多线程:一个程序里执行许多小线程(具有更好的网上交互习性能和实时控制性能尤其多媒体功能)
二.标识符命名规则
1.必须字母、下划线、美元符号、开头
2.标识符中间不能有空格
3.不能使用java中的关键字或保留字
三.数据类型
- 基本数据类型:数值型:整数类型:byte、short、int、long
字符型:char
布尔型:boolean
- 应用数据类型:类(class)、接口(interface)、数组(array)
四.数据类型之间的相互转化
1.boolean类型不能转化成其他类型
2.(byte、short、char)--->int--->long--->float--->double
3.byte、short、char之间不会相互转化,在计算是会先计算成int型
五.switch()多分支条件 表达式只接受能转化成int的数据类型(int、byte、short、char)
六.方法的重载
- 方法名必须相同
- 方法的参数必须不同
- 方法的返回参数可以相同也可以不相同
void int add(){
}
void int add(int a,int b){
}
七.构造方法
- 必须有跟类名相同的名字
- 不含有返回值
- 不能在方法中用return返回一个值
- 一般访问权限为public(单例模式除外)
public class Test{
public Test(){
}
public Test(参数1,参数...){
}
}
- 相同的方法名
- 相同的参数列表
- 相同的返回类型
- 子类重写的方法权限不能小于父类方法的权限
- 保证类有一个私有构造器,保证类不会被其他类通过调用本构造方法声明对象
- 保证类只有一个实例,并提供一个访问它的全局的访问点
- 提供一个自身静态私有成员变量(唯一的实例对象)
- 提供一个静态共有方法(调用它创建实例)
public class Singleton{
private static Singleton instance=new Singleton();
//在自己的内部定义一个自己的实例,只供自己调用
//私有构造方法,保证不会被其他类调用
private Singleton(){
}//提供一个静态共有方法,供外部类访问本类
public static Singleton getInstance(){
return instance;
}
}
- 方法中的变量名跟成员变量重名(封装类中的set方法)
- 在同一类中的构造器中调用其他的重载构造器
- 返回当前对象的引用
- super()中的参数决定了是调用的父类中的那个方法
- 如果子类构造器没有super关键字,系统会自动默认加上调用父类默认构造方法,如果父类没有默认构造方法的话,会提示编译错误
- 只能修饰类成员,不能修饰局部变量
- 用static修饰的变量和方法称为类变量和类方法(静态方法)
- 静态方法只能访问类中的静态成员,不能访问类中的非静态成员
- 静态方法中不能使用this和super关键字
- 静态方法不能被非静态方法覆盖,静态方法不能修饰构造器
- 当类被载入时,代码块(被static修饰的代码块/静态代码块)执行切只执行一次,经常用来进行类属性的初始化
- 同一实现接口,使用不同类实现不同的功能
- 例子:黑白打印机、彩色打印机 同是 实现了”打印机“这一接口的功能,但黑白打印机、彩色打印机这两个类能实现不同的功能
- 抽象类不能被实例化
- 其包含的抽象方法在其子类中必须被实现,否则子类只能定义成abstract的
- 抽象方法不能为static的
- 接口不是一个类,不能被实例化
- 接口默认常量:public static final
- 接口默认抽象方法:public abstract
- 接口中不能含有任何非抽象的方法,抽象类中可以
- 类可以实现多个接口但只能有一个父类
- 接口不是类分级结构的一部分,没有联系的类可以实现统一接口
- final修饰的类不能被继承
- final修饰的变量(成员变量/局部变量)不能被重新赋值
- final修饰方法不能再子类中被重写,即不能修改
- 内部类可以访问其外部类的所有属性方法
- 无需创建外部类对象就可访问
- 必须创建内部类对象,否则无法从外部类访问内部类属性方法
- 如果内部类有与外部类同名的变量和方法,则内部类属性和方法较外部成员具有更高的优先级
- 不能定义static变量
- 静态内部类只能访问外部类静态成员
- 非静态内部类只能定义非静态内部成员,而静态内部类可以定义静态/非静态成员
- 静态内部类使用 Outer.Inter inter = new Outer.Inter();进行实例化
- 非静态内部类不用使用上面的方法实例化
- 在方法中定义的内部类只能访问方法中final修饰的局部变量
- 当执行try语句是遇到异常,就会抛出异常,try结束执行,catch执行
- 两种情况下finally语句都会执行
- 当遇到 system.exit(0);是finally语句不会出执行,方法退出
- 继承Thread类,重写run()方法,通过start()方法激活线程
- 实现Runnable接口,重写run()方法,使用这种方式有效的避免了java的单继承的问题
- sleep():让线程终止一段时间
- join():导致当前线程等待,知道调用这个join()方法的线程终止
- yield():为其他可运行的线程提供机会
- wait():导致当前线程等待,知道其他线程调用此对象的notify()或notifyAll()
- notify():唤醒在此监视器上等待的单个线程
- notifyAll():唤醒在此对象监视器上的所有的线程
- stop():已过时
- interrupt():粗暴的终止方式
- 使用一个标志指示run()方法退出
- 有时可能会有两个或多个线程试图同时访问一个资源(数据可能会变得不一致)
- 为了确保在任何一个时间点一个共享资源只能被一个线程使用
- synchronized void method(){} 锁定方法
- Synchronized(object){} 锁定代码块