1.abstract 关键字
abstract是抽象,是一个修饰符,方法或者类的修饰符。
1.1abstract可以修饰的对象
方法–抽象方法
类— 抽象类
1.2抽象的方法
格式:必须有abstract修饰,没有方法体。
Public abstract 返回值类型 方法名称(参数列表);
说明:
抽象方法是一个没有方法体的方法,没有具体的方法实现;
只是方法的声明、只有原型,没有具体的实现。
抽象方法就是没有完成的方法。意味着不能直接使用,被别人去重写。
1.3抽象类
格式:
Public abstract class 类名{
}
抽象类也可以认为是一个没有完成的类,不能被实例化。
1.4抽象类和抽象方法的关系
有抽象方法的类必须是抽象类
抽象类可以有抽象方法,也可以有实例方法。
1.5 抽象类和抽象方法的使用
一般情况向都是创建一个子类继承抽象类,在子类中重写抽象方法。
1.6abstract的使用场合
当一个父类应该具有这个方法,但是在父类中不知道如何给出具体的实现时使用抽象方法;
2.final 关键字:修是谁,谁不可变
inal 最终的
在java中一般用于声明常量。
Final 表示最终的结果,不可以改变。
2.1 final可以修饰的3个地方
属性和变量:其值不能改变
方法:方法不变,方法不能被重写
类:类不变,类不能被继承
2.2 final修饰引用数据类型
Public class A{
Private Int num;
Public void setNum(int num){this.num=num;}
Public int getNum(){return num;}
}
Final A a=new A();
a.setNum(23);//正确
a=new A();//错误 final修饰的是引用a,代表引用(地址)不可改变,意味着不能指向新的()空间
3.static 关键字
Static 静态,是一个修饰符
3.1 static关键字可以使用的4个地方
方法
类
属性(变量)
代码块
3.2 静态属性:static修饰属性
Static int i=10;
变量i就是静态属性。
对于静态的内容在访问上有新的格式:类名.静态属性
3.3静态与实例
实例属性:需要实例化后 才加载 存放在堆中
静态属性:又称为类属性。
因为静态属性属于整个类的属性,这个类和这个类的实例都可以访问。
实例属性属于实例的。必须先创建实例才能由实例访问这个实例属性。
静态的,也叫类的,内容属于整个类所有,类和实例都可用
实例的,内容属于每个实例所有,只能这个实例本身可用。
静态内容在整个应用程序中只有一份。
3.4静态方法:不能被继承
被static修饰的方法;
访问方式:类名.静态方法的名称();(推荐方式)
静态方法中不能使用实例属性
静态方法中也不能使用this.
静态方法中只能使用静态变量
静态方法不能被继承
3.5静态代码块
{}代码块
Static{
} 静态代码块
作用:为类中的静态属性初始化
静态代码块的执行比构造方法更靠前,只是在类加载的时候执行一次,只执行一次。
在java中有一组静态方法的类,称之为工具类。这种类中的所有内容都是静态的,方法也是基本功能的方法。
例如:Math类 Arrays类。
4.接口
是特殊的抽象类
4.1如何创建一个接口
关键字:interface
格式:
Public interface 接口名称{
Public static final公共静态常量;
Public abstract 公共抽象方法
}
4.2如何使用类实现接口
实现关键字:implements
格式:
Public class 类名 implements 接口名称{
}
4.2接口的细节内容
接口与接口直接可以有继承关系
在Java中只支持单继承,但是支持多实现
Java中的类可以继承一个父类的同时实现接口
//既有继承又有实现的时候,先继承后实现
public class Student extends Person implements MyInter,MyInter2{}
4.3接口也支持多态
继承关系中:父类的引用指向子类的实例
父类 引用= new 子类();
实现关系:接口的引用指向实现类的实例
接口 引用=new 实现类();
5 接口的应用
类是对大量对象的抽象;
父类是对大量子类的抽象;
接口是对行为的抽象;
接口代表了一个种行为和能力。
拍照本身是一个行为;
学生要拍照;
能有拍照行为的对象:相机 手机 笔记本
Public class Student(){
Public void 拍照(拍照行为的接口 引用){
引用.拍照行为();
}
}
6.接口也可以表示一种规范
7.接口与抽象类的对比
接口特性
接口不可以被实例化
实现类必须实现接口的所有方法
实现类可以实现多个接口
接口中的变量都是静态常量
两者的区别:
接口是公开的,里面不能有私有的方法或变量,而抽象类是可以有私有方法或私有变量的
实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法
接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现
8.String 类
8.1String是一个极为特殊的类,有常量池的存在
一下的代码中,s1对象首先去常量池中查找是否有“abc”常量的存在,没有即在常量池中创建了对象“abc”;s2首相去常量池中查找是否有“abc”常量的存在,如果有,直接指向该常量,如果没有才创建。
所以:s1==s2的结果是true
8.2String类中常用的方法
8.2.1boolean equals()
判定两个字符串的内容是否相同
8.2.2char charAt(int pos)
得出pos位置的字符
8.2.3int length()
获取字符串的长度
8.2.4String[] split()
按指定字符分割字符串
8.2.5boolean startWith(String s)
判定字符串是否是以字符串S开头
8.2.6 trim()
去掉两端的空格
8.2.7 String substring(int begin,int end)
字符串的截取
8.2.8compareTo()和compareToIgnoreCase()
字符串比较大小:返回值:0 整数 负数
8.2.9indexOf()
查找字符或者子串第一次出现的地方
8.2.10lastIndexOf()
查找字符或者子串最后一次出现的地方
8.2.11concat() +
连接两个字符串
8.2.12replace()
替换 用一个字符在调用字符串中所有出现某个字符的地方进行替换
8.2.13toLowerCase()
转换为小写
8.2.14toLowerCase()
转换为小写
8.3.15getBytes()
将字符存储在字节数组中
9 日期转换SimpleDateFormat
10 包装类
java5.0开始支持自动装箱和自动拆箱,包装类的变量可以被赋值为一个基本类型——装箱;基本类型的变量可以被赋值为一个包装类。
//自动装箱
Integer itg = 123;
//自动拆箱
Int i= Integer.valueOf(111);
注意
程序中少量的自动拆箱和装箱可以,但是大量的拆箱和装箱会对效率影响较大,所以尽量需要什么类型就声明什么类型
11内部类
内部类:在一个类(A)的内部 创建一个新的类(B)
B就是A的内部类
11.1内部类的分类
成员内部类
格式:类的内部嵌套类
使用:
在类的内容使用
在类的外部使用
11.2静态内部类
在成员内部类的基础上使用static 修改时。
使用:
在外部类中使用与成员内部类一样
静态内部类只能使用外部类的静态的属性和静态的方法
在外部使用:
//在类的外部使用静态内部类
InnerClass in=new OuterClass.InnerClass();
静态内部类与成员内部类的区别:
在其他类创建内部类对象时,创建的语法不同
在静态内部类中只能访问外部类的静态成员,可以定义静态方法
在成员内部类中能访问外部类中所有静态成员、非静态成员,但不可以定义静态方法
11.3局部内部类
只能定义在方法的内部
PS:局部内部在访问局部变量时,局部变量必须声明成final
11.4匿名内部类
匿名:没有类名
使用格式:
New 类名(){
};
只要用来实现一次抽象类或者接口的实例化。
抽象类 名=new 抽象类();//错误
抽象类 名=new 抽象类(){
@Override
抽象方法(){
}
};