CSDN将来的大佬,这来都来了,浅浅的给个赞呗。
目录
(主线三)关键字
Java的权限修饰符:(从小到大)private、缺省(什么都不写)、protected、public。
修饰符可以修饰的内部结构:属性、方法、构造器、内部类、
类只能缺省或者public;
This关键字:
This 关键字,我们一般在方法中形参和实参同名的时候,用来区分他们两个的。
This是指向对象的指向形参,this.对象的属性,也可以理解为this指向形参而不是实参;(例如:this.age=age;)将this理解为当前的对象,或者,当前正在创建的对象(构造器);
在类的方法中,我们可以使用“this.属性”或“this.方法”的方式,调用当前对象的属性或方法,但是通常情况下,我们都选择省略“this.” 特殊情况下 ,如果方法的形参和类的属性同名时,我们必须显式的使用“this.变量”的方式、表示此变量,而非形参。
This调用构造器 (也可以在其他地方使用)
1,我们在类的构造器中,可以显式的使用“this(形参列表)”去调用其他的对象;
2,构造器中不能使用“this(形参列表)”的调用自己(调用多次之后也只是调用了其他构造器的逻辑,即仅仅创建了一个对象而非多个对象);
3,规定,在其他的构造器中调用其他构造器的语句只能放在构造函数的首行;
Static关键字
Static关键字理解和static修饰属性
被static关键字修饰的变量或者方法都被称为静态的,(什么是静态的呢,静态这两个字只是沿用了C++中的叫法,并没有什么实际意义,我们不必过于望文生义),静态变量或者静态方法,只要变成静态的,那么他的加载就会随着类的加载而加载。被static修饰的属性或者行为是加载到静态域里面的。
为什么会有静态呢,比如我们做一个某学校的学籍管理系统,所有的学生都是同一个学校“某某某高中”,这是我们就需要一个一个去赋值,而如果我们把它设置成静态就不一样了,静态是被所有对象共有的,如果一个对象去修改了静态修饰的学校名,那么所有的对象的学校名都会改变,而与之对应的普通变量都是一个对象拥有一套独立的,A对象修改了,不会影响B的属性。但是静态就不一样了,一个变则全部的都会变。
我们在使用static的同时还会便随着final,被final和static同时修饰之后,这个变量就会被全部对象共同拥有并且只能赋值一次。这样就保证了学校名不会被对象轻易改变。
Static修饰方法
Static修饰方法则方法就被称为静态方法,静态方法随着类的加载而加载,并且静态方法只能调用静态变量,这个是为什么呢,我们可以从类的加载层面去理解。(一切关于静态的问题,我们都可以从类的加载层面去理解)。类加载的时候,静态的结构会先加载,而非静态的都还没加载,就是还没有,没有,你还去调用,那么就会报错了。
Final关键字
Final关键字修饰变量和方法的理解
从字面意思可以看出,final是最终的意思,fianl 修饰变量,那么这个变量在赋值后就是一个常量,
Final修饰方法之后,那么这个方法就不能被重写。
Final修饰类之后,那么这个类就不能被继承。为最终类。
abstract关键字
如果一个类被abstract修饰,那么则称这个类为抽象类,什么是抽象类呢 就是不能自身直接实例化,是抽象的,只能通过他的子类实例化对象,
抽象类用来描述一种类型应该具备的基本特征与功能, 具体如何去完成这些行为由子类通过方法重写来完成
即抽象方法指只有功能声明,没有功能主体实现的方法。
具有抽象方法的类一定为抽象类(除接口外)。
抽象类无法直接创建对象,只能被子类继承后,创建子类对象,但是他却有抽象方法。
子类需要继承抽象父类并完成最终的方法实现细节(即重写方法,完成方法体)。而此时,方法重写不再是加强父类方法功能,而是父类没有具体实现,子类完成了具体实现,我们将这种方法重写也叫做实现方法。
继承的子类如果不是抽象类,那么子类就必须重写父类的所有抽象方法,如果不能重写父类所有的抽象方法,那么子类本身也必须是抽象类,
在抽象类中抽象方法只有方法的声明,没有方法体。
抽象类也可以有构造器,虽然它本身不能实例化对象,但是继承他的子类实例化的时候,需要了解父类所有属性的初始化过程,那么就必须有构造器。
Interface关键字
接口使用来干什么的呢?接口是用来描述这个类可以干什么,类实现了某个接口,就相当于拥有了某个功能。
这里注意在jdk7及之前,我们在接口中只能定义抽象方法和全局常量,在接口中定义的方法,都是自动默认是public abstract的,所以我们在定义时可以省略public abstract,与接口中的方法都自动被设置为public abstract一样,在接口中定义的字段也都是默认public static final ,我们称为全局常量。
接口中不能定义构造器(注意,这里我们和抽象方法区分开来,抽象方法中是有构造器的但是他也不能自身去实例化,需要继承子类才能去实例化并要求子类重写抽象类中的所有抽象方法,然而接口不一样,他是没有构造器的,也不能自身实例化),这说明接口不能直接实例化,而抽象类是有构造方法的额,因为抽象类要被继承,在继承的时候,子类要访问父类的属性和方法,就要知道他们的实例化过程,所以有构造方法,然而接口中没有构造方法,在抽象类中可以有抽象方法也可以有非抽象方法,但是在接口中只能有抽象方法,即接口是百分之百的抽象类。
有关接口的经典疑问问题
接口中不能定义构造器,为什么? | 接口为什么不能被实例化? | 抽象类既然不能被实例化,为什么抽象类中还可以定义构造方法? | 接口中的方法都是抽象方法吗? |
构造器为实例化对象提供初始化操作,接口不能被实例化,在接口中定义构造器也没有什么意义 | 接口中存在抽象方法,抽象方法没有实体,不能被对象调用,所以接口不能被实例化,抽象类也是如此 | 构造方法是为了给可执行的方法提供初始化的条件,但抽象类中并不一定仅仅含有抽象方法,可能还有普通方法。 | 在java8之后出现了默认方法(具体方法),用default修饰 |
如果一个类要实现一个接口,他要做两件事
- 将类声明为实现给定的接口
- 对接口中的所有方法提供定义
在这里我们会用到implements关键字。例如:class employee implements comparable
接口和抽象类的区别:
成员区别 | 类和接口的关系区别 |
抽象类: 构造方法:有构造方法,用于子类实例化使用。 成员变量:可以是变量,也可以是常量。 成员方法:可以是抽象的,也可以是非抽象的。 | 类与类:继承关系,只能单继承。可以多层继承。 类与接口:实现关系,可以单实现,也可以多实现。 类还可以在继承一个类的同时实现多个接口。 |
接口: 构造方法:没有构造方法 成员变量:只能是常量。默认修饰符:public static final 成员方法:jdk1.7只能是抽象的。默认修饰符:public abstract (推荐:默认修饰符请自己永远手动给出) jdk1.8可以写以default和static开头的具体方法 | 接口与接口: 继承关系,可以单继承,也可以多继承。 体现的理念不同 抽象类里面定义的都是一个继承体系中的共性内容。 接口是功能的集合,是一个体系额外的功能,是暴露出来的规则 |
你选择使用接口和抽象类的依据是什么?
接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人
人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它. 所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)
当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。
抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度
构造器(constructor):
构造器我们有时候也叫构造方法,但是他和我们平常使用的方法毫无关系。构造器时构造器,方法是方法,不能误认为构造器是方法中的一种:
构造器作用:
创建对象(new时调用了);对可执行方法的结构进行初始化;
初始化类的属性;
构造器特点:
构造器与类同名,如果自己没有写构造器时,系统会提供一个无参的构造器,当你写了构造器后,无论有参无参,系统将不再给你提供无参构造器。
构造器的定义格式:
权限修饰符 类名(形参列表){};
构造器也可以重载(和方法一样)
认识 javabean 具体指符合以下三种特性的可重用组件;
- 类是公共的;
- 有一个无参的公共构造器;
- 有属性和与之对应的get、set方法;