-
static 关键字 能够修饰成员方法和成员变量,成员内部类.修饰成员的 特点: 被这个类所有的对象所有共享
可以直接通过类名.调用
它是随着类的字节码加载而加载,而且只加载一次
优先于对象存在
使用注意事项:静态只能访问静态,里面不能有this关键字; 作用:当我们的成员变量需要被共享的时候用static来修饰这个成员变量,或者被静态调 用的时候
当我们需要定义工具类的时候,就要用static来修饰方法
普通成员是属于具体的对象的,你想调用就必须有对象 静态成员不需要创建对象就可以调用,通过类名调用就可以了,是属于整个类的,而不属于 某个具体对象.
1.1静态访问静态
静态里面不能有this关键字,因为静态是优先所有对象先存在,而是this属于谁调用我,我就代表那个对象
-
制作工具类的步骤 1.私有化构造函数(为了不让外界创建本类对象,可以直接通过类名调用) (将这个类抽象也可以)
3.代码块
3.1 局部代码块(跟局部相关的东西都说在方法内部)
位置:在方法内部,{}范围内;
作用:限制变量的生命周期,(节省内存)实际用的真不多;
3.2 构造代码块
位置:跟构造方法同一级,也是{}内,
作用:抽取构造函数中的共性内容,创建一次对象就要执行一次构造代码块,而且构造代码块优先于构造函数
3.3静态代码块 位置:跟构造方法是同一级的, 在static{}范围内: 作用:随着类的加载而加载, 只加载一次;用来初始化一些驱动用的,或者是一些唯一的数据; 3.4.同步代码块: 我们在多线程的时候才会接触到;
1.继承
继承能让类与类之间产生子父类关系,被继承的是父类,剩下的是子类
父类是抽取所有子类中共性内容;
子类有什么便捷之处:
子类可以使用父类里面的成员(非私有的成员)
2.继承的特点
java语言只支持单一继承,支持多层继承;
一个儿子只能有一个亲爹
3.就近原则
自强不息的原则,自己能干就不要去麻烦别人;
4.重点(重点)
当父亲的方法不能满足或者不能完全满足我们子类的需求的时候就需要方法重写
5.重写注意事项
1.子类不能重写父类私有的方法
2.(了解)子类重写的方法的权限必须大于等于父类的这个方法权限(一模一样)
6.继承中构造函数的执行顺序
1.如果子类的构造函数第一行没有调用子类的构造或者没有调用父类的构造,就会默认调
用父类的无参构造
2.如果子类有调用父类的构造,就不会调用父类的无参构造
3.如果子类调用了自身的其他构造,就不会调用父类的无参空构造
总结:
父类的构造一定会先执行;因为子类随时有可能要使用父类里面的资源,在子类
使用之前我们必须保证父类的资源已经被初始化,所有一定要走父类的构造,而且要先于子类先走
7.this和super的用处
this是用来调用本类的成员或者本类构造
super是用来调用父类的成员或者父类的构造
this如果说子类没有,也可以调用父类的
8.继承的优缺点
优点:
1.提高了代码的复用性(体现在:父类里面定义资源,所有子类都可以使用)
2.提高了代码的维护性(体现在:父类里面添加了,或者修改了,子类里面也跟着没有问题)
3.多态的前提
缺点:1.是类与类之间的关系变得紧密,耦合性变得非常强了(父类有的,子类也必须有,不
管你要不要,父类没有的)
我们开发的原则:
高内聚:
自己完成某项功能的完整度
低耦合:
类与类之间关系尽量不要太紧密
9.匿名对象
没有变量引用的对象就是匿名对象
特点:
方法只调用一次的时候,调用方法完毕后没有其他用途的时候我们可以使用匿名
对象.
集合数组里放东西的时候.
10.final关键字
能够修饰类,方法,变量
类:这个类不能有子类
方法:不能被子类重写
变量:不能被改变,成了常量(常量每一个单词每一个字母都大写,多个单词用_隔开)
final int STUDENT_NUMBER=80;
11.abstract关键字 只能修饰类和方法
能够修饰类和方法
修饰的类叫做抽象类
修饰的方法叫做抽象方法
抽象方法必须在抽象类中
抽象类不能直接创建对象
子类如果继承抽象类,就要不实现父类所有的抽象方法,要不自己也是抽象类实例;
13.抽象类的特点
1.抽象方法必须在抽象类中
2.抽象类不能直接实例化(不能创建对象)
3.抽象类中可以有非抽象的方法
4.抽象类和类之间的关系也是继承
5.继承抽象类必须重写抽象方法或者自己也是抽象的
14.抽象类比普通类可以多抽象方法
15.抽象类的作用
定义规则强制子类实现某些功能,架构师
16.注意事项
abstatic不能和final,private共存
1.接口
接口的出现解决了单一继承的局限性(一个儿子只能有一个亲爹,可以有一群干爹)
接口是一个比抽象类还要抽象的存在,里面的方法(jdk1.8之前)都是抽象方法
定义接口:
interface接口名{
}
定义类:
class 类名{
}
2.接口的成员特点
成员变量:都是常量,默认被public static final修饰
成员方法:在jdk1.8之前都是抽象方法,成员方法也有默认修饰符public abstract;
构造函数:接口是没有构造函数的,因为除了Object以外,任何一个类都用自己的亲爹,
子类初始化时要默认访问父类的构造函数,如果干爹有构造函数,子类就浑浊了
特点:
不能实例化
3.接口和类之间的关系
类与类是继承(extends)关系
单一继承 多层继承
类与接口是实现(implements)关系
支持多实现,还支持多层实现
接口与类的关系(extends)
继承关系,支持多继承
4.接口的优点
1.解决了单一继承的局限性
2.对外提供规则
3.降低了程序的耦合
5.接口与抽象类的区别
共同点:都是定义规则
不同点:
1.与类关系不一样
2.成员不同:
成员变量:
接口的成员变量都是常量,但是类可以有常量也可以有变量
成员方法:
接口jdk1.8之前都是抽象的,但是抽象类可以有抽象方法也可
以有非抽象方法
3.定义规则是作用域不一样
抽象类必须所有的子类都要实现抽象方法
但是接口可以让子类选择性的实现规则.
6.多态的前提
1.必须有继承关系
2.方法要重写(不让没有意义)
3.父类引用指向子类对象
Animal a = new Cat();//子类乔装成父类(外表(属相))的过程
-
成员变量:编译看父类,运行也看父类 成员方法:编译看父类,运行看子类 静态方法:编译看父类,运行看父类 总结:除了成员方法是编译看左边,运行看右边以外其他的都是看左边
8.向上转型和向下转型
向上转型:子类乔装成其父类的过程(多态的时候)
向下转型:卸妆的过程;(需要调用子类特有的成员的时候,就需要卸妆)
9.多态的优点
1.继承的优点它都有
2.增加程序的可扩展性
10.作用:
经常用来定义方法参数来提高方法的扩展性
经常用来定义集合的泛型,来增强集合的扩展性
12.instanceof:这个关键字的作用,是判断某个对象是否属于某个类或者某个接口
1.包
1.包里面还有包
2.不同包可以有同名的文件
3.包的声明必须在第一行
声明包的作用:证明在哪个包,方便其他类访问
2.类的全名 包名+类名;
不同包之间我们通常通过导包的形式来访问或者通过全类名来访问(不推荐)
import java.util.*; 会将util下的所有的类导入进来,如果util包下的子包里面的不会
导入
3.权限修饰符 public 本包本类中可以访问, 本包下不同类中可以访问, 不同包下也可以访问 private 本包相同类中可以访问 默认的 本包相同类中可以访问,本包下不同类中可以访问 protected 本包相同类中可以访问,本包下不同类中可以访问,不同包下子类里面可以访问;
protected和默认权限的区别:
区别就在, 不同包下,如果是子类对象,protected可以使用的,而默认的是不可以的
9.String
构造
String(byte[] bytes) //可以将字节数组转成字符串
String(byte[] bytes, int offset, int length) //转字节数组的一部分;
String(char[] value) //可以将字符数组转成字符串
String(char[] value, int offset, int count) //可以字符数组的一部分转成字符串;
成员方法
判断
boolean contains(CharSequence s) //判断字符串中是否包含s;
boolean endsWith(String suffix) //判断是否以suffix结尾;
boolean startsWith(String prefix) //判断是否以prefix开头
boolean equals(Object anObject) //字符串equals比较的是内容==比较的是地址// 判断anObject的内容是否一致
获取
int indexOf(int ch) //获取某个字符在字符串中的第一次索引
int indexOf(String str) //判断某个字符串在大串中第一次出现的索引位置
int lastIndexOf(int ch) //获取某个字符在字符串中的最后一次索引
int lastIndexOf(String str) //判断某个字符串在大串中最后一次出现的索引位置
int length() //获取字符串中有效的字符的个数
String substring(int beginIndex)//从 beginIndex开始截取到结尾, 老串不变,返回新串
String substring(int beginIndex, int endIndex) //从 beginIndex开始截取到endIndex-1 老串不变,返回新串
char charAt(int index);//获取执行索引处的字符;
其他
byte[] getBytes() // 可以将字符串变成byte数组;
String replace(char oldChar, char newChar) //将字符串中老的字符全部替换成新的字符; 注意, 老串不会改变,会返回一个新串给我们
String replace(CharSequence target, CharSequence replacement) //将字符串中老的字符串全部替换成新的字符串; 注意, 老串不会改变,会返回一个新串给我们
String replaceAll(String regex, String replacement) //将字符串中老的字符串全部替换成新的字符串; 注意, 老串不会改变,会返回一个新串给我们//正则有区别
String[] split(String regex) //他可以将原串按照规则切割成一个字符串数组//需要老串不变,返回一个新串;
char[] toCharArray() //可以将子串转成字符数组;
String toLowerCase() //可以将子串中所有的大写字母变成小写;原串不变返回新串
String toUpperCase() //可以将子串中所有的小写字母变成大写;原串不变返回新串
String trim()//去除两端空格,中间空格不能去掉,原串不变,返回新串
一大波valueOf方法
首先是静态方法,可以直接通过类名调用
可以将其他数据类型转成字符串;
|