Java中的包机制、final和super关键字

一、包机制

关于java语言当中的包机制:

1.包又被称为package,java中引入package这种语法机制主要是为了方便程序的管理。

不同功能的类被分门别类放到不同的软件包当中,查找比较方便,管理比较方便,易维护。

2.怎么定义package呢?

---在java源程序的第一行上编写package语句。

---package只能编写一个语句

---语法结构:

package 包名;

3.包名的命名规范:

公司域名倒序+项目名+模块名+功能名;

采用这种方式重名的纪律较低。因为公司域名具有全球唯一性。

4.包名要求全部小写,包名也是标识符,必须遵守标识符的命名规则。

5.一个包对应一个目录

例如:com.bjpowernode.javase.day; //4个目录【目录之间用.隔开】

6.使用package机制后应该怎么编译?怎么运行呢?

---使用package机制后,类名不再是Test01了,类名是com.bjpowernode.javase.day.Test01;

---编译:javac java源文件路径 (在硬盘上生成了一个class文件:Test01.class)

---手动方式创建目录,将Test01.class字节码文件放到指定的目录下

---运行:java com.bjpowernode.javase.day.Test01

---另一种方式(编译+运行):

*编译: javac ---d .编译之后存放路径 java源文件路径

javac 负责编译的命令

-d 带包编译

. 代表编译之后生成的东西放到当前目录下(点代表当前目录)

*例如:将F:\Hellow.java文件编译之后放到C:\目录下

java ---d C:\ F:\Hellow.java

*javac ---d .*.java

将当前路径中*.java编译之后存放到当前目录下

*运行:JVM的类加载器ClassLoader默认从当前路径下下载。保证DOS命令窗口的路径先切换到com所在的路径,执行com.bjpowernode.javase.day.Test01

java.lang.*;不需要手动引入,系统自动引入。

lang:language语言包,是java语言的核心类,不需要手动引入。

import语句用来完成导入其他类,同一个包下的类不需要导入,不在同一个包下需要手动导入。

import语法格式:

import 类名

import 包名.*

import语句需要编写到package语句之下,class语句之上

什么时候需要import?

不是java.lang包下,并且不再同一个包下的时候,需要使用import进行引入。

访问控制权限修饰符:

1.访问控制权限修饰符来控制元素的访问范围

2.访问控制权限修饰符包括:

public 表示公开的,在任何位置都可以访问

protected 同包 子类

缺省 同包

private 表示私有的,只能在本类中访问

3.访问控制权限修饰符可以修饰类,方法,变量

4.当某个数据只希望子类使用时,使用protected进行修饰。

5.修饰符的范围:

private<缺省<protected<public

6.类只能采用public和缺省的修饰符进行修饰【内部类除外】

二、final关键字

关于Java语言当中final关键字:

1.final是一个关键字,表示最终的,不可变的

2.final修饰的类无法被继承

3.final修饰的方法无法被覆盖

4.final修饰的变量"一旦"赋值之后,不可重新赋值【不可二次赋值】

5.final修饰的实例变量,必须手动赋值,不能采用系统默认值(实例变量有默认值,final修饰的变量一旦赋值不能重新赋值)

6.final修饰的引用,一旦指向某个对象之后,不能再指向其他对象,那么被指向的对象无法被垃圾回收器回收

final修饰的引用虽然指向某个对象之后不能指向其他对象,但是所指向的对象内部的内存是可以被修改的。

7.final修饰的实例变量,一般和static联合使用,被称为常量。

常量的定义语法格式:public static final 类型 常量名 = 值;

java程序中要求所有常量的名字全部大写,每个单词之间使用下划线连接

//创建用户对象

User u = new User(100); //User u=0X1234

//又创建了一个新的User对象

//程序执行到此处表示以上对象已变成垃圾数据,等待垃圾回收器的回收

u = new User(200); //u = 0X2586

//创建用户对象

final User user = new User(30);

//user = new User(50); // 编译错误

User.id=50; //编译通过

实例变量采用final赋值

第一种方式:

final int age = 10; //直接赋值

第二种方式:

final int num;

public 类名(){

this.num = 100;

} //采用构造方法赋值

三、super关键字

1.super是一个关键字,全部小写

2.super和this对比学习:

this:

this能出现在实例方法和构造方法当中

this的语法时:"this." "this()"

this不能使用在静态方法中

this.大部分情况下是可以省略的

this.什么时候不能省略呢?在区分局部变量和实例变量的时候不能省略

public void setName(String name){

this.name=name;

}

this()只能出现在构造方法第一行,通过当前的构造方法去调用"本类"中其他的构造

方法,目的是:代码复用

super

super能出现在实例方法和构造方法当中

super的语法时:"super." "super()"

super不能使用在静态方法中

super.大部分情况下是可以省略的

super.什么时候不能省略呢?

父中有,字中又有,如果想在字中访问"父类特征",super.不能省略

super()只能出现在构造方法第一行,通过当前的构造方法去调用"父类"中的构造

方法,目的是:创建子类对象的时候,先初始化父类型特征

3.super()

表示通过子类的构造方法调用父类的构造方法。

模拟现实世界的这种场景,要想有儿子,需要先有父亲

4.结论:当一个构造方法第一行既没有this(),又没有super()的话,默认会有一个super();表示通过当前子类的构造方法调用父类的无参数构造方法。所以必须保证父类无参数的构造方法是存在的。

5.注意:super()和this()不能共存,他们都是只能出现在构造方法第一行

6.无论是怎么判断,父类的构造方法是一定会执行。(百分之百的)

7.在java语言当中不管是new什么对象,最后的Obiect类的无参数构造方法一定会执行。(Object类的无参数构造方法是处于"栈顶部")

栈顶的特点:

最后调用但是最先执行结束。后进先出原则。

8.super代表的是"当前对象(this)"的"父类型特征。

9.在构造方法执行的过程中一连串调用了父类的构造方法,父类的构造方法又继续向下调用它的父类的构造方法,但是实际上对象只创建了一个。

10.super(实参)到底是干啥的?

super(实参)的作用是:初始化当前对象的父类型特征。并不是创建对象,实际上对象只创建了1个。

11.super关键字代表什么呀?

super关键字代表的就是"当前对象"的那部分父类型特征

java是怎么区分子类和父类的同名属性的?

this.name 当前对象的name属性

super.naem 当前对象的父类型特征中的name属性

super不是引用,super也不保存内存地址,super也不指向任何对象

super只是代表当前对象内部的那一块父类型的特征

在父和子中有同名的属性,或者说有相同的方法,如果此时想在子类中访问父中的数据,必须使用"super"加以区分

super.属性名 【访问父类的属性】

super.方法名(实参) 【访问父类的方法】

super(实参) 【调用父类的构造方法】

相关推荐
三玖诶5 分钟前
如何在 Qt 的 QListWidget 中为某一行添加点击事件
开发语言·qt
InJre11 分钟前
QT widgets 窗口缩放,自适应窗口大小进行布局
开发语言·qt·ui
阿乾之铭13 分钟前
spring MVC 拦截器
java·spring·mvc
可愛小吉14 分钟前
Python 课程10-单元测试
开发语言·python·单元测试·tdd·unittest
码爸16 分钟前
flink 批量写clickhouse
java·clickhouse·flink
djgxfc18 分钟前
简单了解Maven与安装
java·maven
中文很快乐22 分钟前
springboot结合p6spy进行SQL监控
java·数据库·sql
丶白泽22 分钟前
重修设计模式-概览
java·设计模式
小电玩23 分钟前
谈谈你对Spring的理解
java·数据库·spring
五味香26 分钟前
C++学习,动态内存
java·c语言·开发语言·jvm·c++·学习·算法