Final关键字
1、final是Java中的一个关键字
2、final表示最终的、不可变的
3、final可以修饰变量以及方法,还有类等
4、final修饰的方法无法被覆盖,被重写
5、final修饰的类无法被继承
6、final与能否调用无关,final表示最后的,不能改变该内容
7、final修饰的局部变量一旦赋值不能重新赋值
Final修饰的变量只能赋一次值
8、final修饰的引用:该引用只能指向一个对象,并且他只能永远指向该对象,无法再指向其他对象;并且在该方法执行过程中该引用指向该对象之后,该对象不会被回收直到该方法执行结束,才会释放空间。
虽然final修饰的引用指向A后不能指向对象B,但是对象A中的数据可以被修改
9、final修饰的实例变量(构造方法执行的过程中赋值),系统不管赋默认值,要求程序员必须手动赋值,在变量后赋值可以,在构造方法中赋值也可以。
10、final修饰的变量一般添加static修饰
Static final联合修饰的变量称为“常量”,常量名建议全部大写,每个单词之间用下划线衔接。
常量:实际上和静态变量一样,区别在于常量的值不能变,常量和静态变量都是存储在方法区,并且都是在类加载时初始化
抽象类和接口以及抽象类和接口的区别
1、抽象类:类和类之间具有共同特征,将这些共同特征提取出来,形成的就是抽象类。类本身是不存在的,所以抽象类无法创建对象(无法实例化)
2、抽象类也属于引用数据类型
3、抽象类怎么定义:语法-(修饰符列表)abstract class 类名{
类体;
}
4、抽象类是无法实例化的,无法创建对象,所以抽象类是用来继承的。
5、final和abstract不能联合使用,不能同时出现
6、抽象类的子类可以是抽象类
7、抽象类虽然无法实例化但是抽象类有构造方法,这个构造方法是供子类使用的
8、抽象类关联到一个概念,抽象方法的概念,
抽象方法:没有实现的方法,没有方法体的方法
例如:public abstract void dosome{
}
9、抽象类中不一定有抽象方法,但抽象方法必须出现在抽象类中
10、重要结论:一个非抽象类继承抽象类,必须把抽象类中的抽象方法实现了(覆盖或是重写,也就是实现)
例题:Java语言中凡是没有方法体的方法都是抽象方法
错误的,object中就有许多没有方法体的非抽象类
接口(interface)
1、接口也是一种引用数据类型,编译之后也生成.class文件
2、接口是完全抽象的(抽象类是半抽象的)或者也可以说接口是特殊的抽象类
3、接口怎么定义,语法是什么?
(修饰符列表) interface 接口名{
}
4、一个接口可以继承多个接口
interface A{
}
interface B extends A{
}
Interface c extends A,B{ //一个接口可以继承多个接口
}
5、接口中只包含两部分内容:一部分是常量,一部分是抽象方法。接口中没有其他内容只有以上两部分
6、接口中所有的元素都是public修饰的,都是公开的
7、接口中的抽象方法定义时,public abstract修饰符可以省略
8、接口中的方法都是抽象方法所以接口中的方法不能有方法体(不能有{})
9、接口中的常量public static final可以省略不写,接口中的所有变量都是常量(值不能发生改变)
10、类和类之间叫做继承(extends),类和接口之间叫做实现(interface)(任可以将实现看做继承)
11、当一个非抽象的类实现接口的话,必须将接口中所有的抽象方法全部实现(implements相当于继承的extends)(覆盖、重写)
12、重点:一个类可以实现多个接口(interface A implements B,C{})
13、extends和implements可以共存,extends在前implements在后
14、使用接口写代码时,可以使用多态(父类型引用指向
子类型对象)
例:public class Test{
Public static void main(String[] args ){
}
} //动物类父类
class Animal{
}
//可飞行的接口,接口通常提取的是行为动作
interface Flyable{
Void fly();
}
class cat extends Animal implements Flyable{
public void fly(){
system.out.println(“fly”)
}
}
15、接口在开发中的作用,类似于多态在开发中的作用,
多态:面向抽象编程,不要面向具体编程,降低程序的耦合度,提高程序的扩展力,符合ocp的开发原则。(接口加上多态才可以达到降低耦合度的效果)
16、类型和类型之间的关系:is a、has a、like a
(1)is a:
cat is a Animal(猫是一个动物)
凡是能够满足is a 的表示:继承关系(A extends B
)
(2)has a:
I has a pen(我有一只笔)
凡是能满足has a关系的表示:关联关系
关联关系通常以“属性”的形式存在
(3)like a:
Cooker like a foodmenu(厨师像一个菜单一样)
凡是能满足like a关系的表示“实现关系”
实现关系通常是:实现接口(A implements B)
17、抽象类和接口有什么区别:
(1)抽象类是半抽象的,接口是完全抽象的
(2)抽象类中有构造方法,接口中没有构造方法
(3)接口和接口之间支持多继承,类和类之间只支持单继承
(4)一个类可以同时实现多个接口,一个抽象类只能继承一个类(单继承)
(5)接口中允许出现常量和抽象方法
关于Java语言中的package和import机制
1、为什么要使用package?
Package是Java中包机制,包机制的作用是为了方便程序的管理。不同功能的类分别存放在不同的包下(按照功能划分的,不同的软件包具有不同的功能)
2、package怎么用?
package 是一个关键字,后面加包名,例如:
package com.bjpowernode.javase.chapter17;
注意:package语句只允许出现在Java语句的第一行。
3、包名的命名规范:一般采用公司域名倒叙的方式(因为公司域名具有唯一性)
例如:公司域名倒叙+项目名+模块名+功能名
4、带有package的Java程序怎么编译,怎么运行?
例:
Package com.bjpowernode.java.chapter17;
Public class HelloWorlrd{
Public static void main(String[] args){
System.out.println(“Hello world!”);
}
}
采用javac . HelloWorld.java无法编译,
此时的类名是com.bjpowernode.java.chapter17.HelloWorld而不是HelloWorld
编译:javac.-d . HelloWorld.java
注释:javac 负责编译的命令
.d 带包编译(代表编译之后生成的东西放到当前目录下;.代表当前目录)
.HelloWorld.java 被编译的Java文件名
5、关于import的使用
Package com.bjpowernode.java.chapter17;
Public class Test{
Public static void main(String[] args){
/*com.bjpowernode.java.chapter17 w = new com.bjpowernode.java.chapter17*/太麻烦
}
}
import什么时候使用?如何使用?
(1)A类中使用B类
A类和B类都在同一个包下,不需要使用import
A类和B类不在同一个包下,需要使用import
(2)使用方法
import只能出现在package语句之下,class声明语句之上
import语句还可以采用*的方式(*代表某个或者某些类名)
Package com;
import com.bjpowernode.java.chapter17
(或者import com.bjpowernode.java.*)
Public class Test{
Public static void main(String[] args){
HelloWorld w = new HelloWorld;
}
}
6、package和import
(1)package:
第一、出现在Java源文件第一行
第二、带有包名怎么编译:java –d . xxx.java
第三、怎么运行: java 完整类名
(2)import
第一、import什么时候不需要:java.lang不需要;同包下不需要;其它一律需要
第二、怎么用:import 完整类名;
import 完整包名
活动地址:CSDN21天学习挑战赛