一、重点知识
只要你想对字符串有修改且返回的,你调的的是不变的,返回的那个是改变的
java中从哪开始到哪结束的区间问题,一般都是左闭右开的
一般length就是取几个,index就是到哪结束
抽象方法的最大目的,强制重写
默认方法只能在接口中被定义
一个抽象方法有没有实现看看有没有花括弧
注意接口的实现类的对象可以调用接口中的默认方法,如果重写了接口的默认方法,那么调用的是重写后的,但是接口中的静态方法,只能通过接口来调
如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的默认方法,那么子类在没有重写此方法的情况下,默认调用的是父类中的同名同参数的方法。-->类优先原则
如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法,那么在实现类没有重写此方法的情况下,报错。-->接口冲突。这就需要我们必须在实现类中重写此方法
以后再提属性不论有没有要求,都声明为私有,这是编码规则
final修饰的方法不允许子类重写
静态属性存在方法区中的静态域中
类变量最好不要用对象访问,不便捷
类变量与对象是否创建没关系,随着类的加载而加载
静态方法中可以创建对象,例如单例模式
二、重点问题
1、static的总结
2.1 属性,是否使用static修饰,又分为:静态属性 vs 非静态属性(实例变量)
实例变量:我们创建了类的多个对象,每个对象都独立的拥一套类中的非静态属性。当修改其中一个对象中的非静态属性时,不会导致其他对象中同样的属性值的修改。
静态变量:我们创建了类的多个对象,多个对象共享同一个静态变量。当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过了的。
2.2 static修饰属性的其他说明:
① 静态变量随着类的加载而加载。可以通过"类.静态变量"的方式进行调用
② 静态变量的加载要早于对象的创建。
③ 由于类只会加载一次,则静态变量在内存中也只会存在一份:存在方法区的静态域中。
2.3static修饰方法:静态方法、类方法
1. 随着类的加载而加载,可以通过"类.静态方法"的方式进行调用
2. 静态方法中,只能调用静态的方法或属性
非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性
2.4.static的注意点:
在静态的方法内,不能使用this关键字、super关键字
2.5如何判定属性和方法应该使用static关键字:
1 关于属性
> 属性是可以被多个对象所共享的,不会随着对象的不同而不同的。
> 类中的常量也常常声明为static
2 关于方法
> 操作静态属性的方法,通常设置为static的
> 工具类中的方法,习惯上声明为static的。 比如:Math、Arrays、Collections
三、课堂知识
3.1、final关键字
1、在Java中,可以修饰类,变量,方法。
1、final修饰局部变量
赋值之后,数值不能再修改了。
2、final修饰成员变量
final在类中修饰成员变量的话,要求必须初始化。并且赋值后,不能再修改数值了。
3、final修饰成员方法
final所修饰的方法,不允许子类重写的。
4、final修饰的类
final修饰的类,不允许子类继承。“太监类”,比如String。
2、final修饰变量(成员变量和局部变量),则为常量,只能赋值这一次。
修饰成员变量的时候,定义时,要同时给出初始化的值。
修饰局部变量,只能赋值一次。
3、final修饰方法,则该方法不能被子类重写
4、final修饰类,则类不能被继承
5、对比final和abstract关键字修饰方法:
final修饰的方法,不让子类重写。
abstract修饰的方法,要求子类必须重写。
所以final和abstract不能同时修饰一个方法,会疯掉的。
变量:本质就是一小块内存,用于存储数据。在程序执行过程中,数值可以改变。
常量:同变量类似,也是存储数据。数值不能改变。
3.2、static关键字
1、 修饰成员属性
public class Person {
//成员变量:随着对象的创建而产生的。每个对象都有自己的一份属性值,和其他的对象的数值是无关的。
String name;
int age;
static String city;//该类的对象,属性值,恰巧都相同。
}
2、修饰属性:
类中的属性:2种
1、非static,叫成员变量(name,age),属于对象的。随着对象的创建而产生,创建几个对象,就有几分该属性值。对象的属性值是彼此独立的。
对象.成员变量,表示该对象访问自己的属性,赋值,取值
2、static的属性,叫静态属性,属于类的。和对象无关。随着类的加载而产生。内存中,就一份。应该由类直接访问,但是对象也可以访问,多个对象,共享这一份数据。
类.静态属性。可以赋值,取值
3、static修饰的属性:
1、静态成员变量,使用static修饰的成员变量,定义再内存中,方法区中。
2、静态成员变量,不推荐使用对象调用,赋值,取值。。如果使用,也允许,但是会警告:
The static field Person.city should be accessed in a static way
3、静态的成员属性,属于类的,应该由类直接调用。
类名.静态属性名 = 赋值/取值。
4、如果代码中,没有创建对象,可以通过类名直接访问静态属性。【和对象无关的】
5、不管通过对象还是类,如果修改了静态属性的值,那么就改了,其他的对象来访问,会收到影响。
4、 修饰成员方法
//static修饰方法的语法格式:
public static 返回值类型/void 方法名(参数列表){
方法体;
}
一个方法,一旦使用static修饰,就表示该方法属于类,应该由类来直接调用。
静态方法中:
可以访问静态的属性(属于类的),但是不能直接访问非静态的属性(属于对象的)。
可以访问静态的方法(属于类的),但是不能直接访问非静态的方法(属于对象的)。
结论:静态方法中,不要涉及对象的内容:对象的属性(成员变量),对象的方法(成员方法),包括this和super关键字。
非静态方法中:属于对象
静态的,非静态的都可以。this,super都可以。
5、static修饰的方法:
1、静态方法推荐使用类名直接调用。
不推荐使用对象来调用,但是对象也可以调用
2、静态方法中,不能访问对象的内容,对象的成员变量,对象的成员方法。
3、静态方法中,不能出现this和super关键字。语法级别的要求。
4、静态方法中,可以访问静态的属性,以及其他的静态的方法。
5、静态方法中,可以通过new关键字来创建对象。
6、子类可以继承父类的静态方法,但是不能重写。