其他关键字
this
理解
this:可以理解为:当前对象 或 当前正在创建的对象
作用
在属性或方法冲突时,做区分用
调用
this可以用来调用:属性、方法、构造器
具体含义
this调用属性、方法
指定属性或方法。但是通常情况下,我们都省略了"this."。但是如果方法的形参和当前对象的属性名相同的情况下,我们必须显式的使用"this.变量"的方式,表明此变量是属性,而非形参。
在构造器中:我们可以在构造器中通过"this.属性"或者"this.方法"的方法,表示调用当前正在创建的对象的指定属性或方法。
但是通常情况下,我们都省略了"this."。但是如果构造器的形参和当前正在创建的对象的属性名相同的情况下,我们必须显式的使用"this.变量"的方式表明此变量是属性,而非形参。
this调用构造器:
1.可以在类的构造器中使用"this(形参列表)"的方式,调用本类中重载的其他的构造器!
2.明确:构造器中不能通过"this(形参列表)"的方式调用自身构造器
3.如果一个类中声明了n个构造器,则最多有 n - 1个构造器中使用了"this(形参列表)"
4."this(形参列表)"必须声明在类的构造器的首行!
5.在类的一个构造器中,最多只能声明一个"this(形参列表)"
注意:
1.使用this()必须放在构造器的首行!
2.使用this调用本类中其他的构造器,保证至少有一个构造器是不用this的。
super
定义
在Java类中使用super来调用父类中的指定操作:
super可用于访问父类中定义的属性
super可用于调用父类中定义的成员方法
super可用于在子类构造器中调用父类的构造器
注意:
尤其当子父类出现同名成员时,可以用super进行区分
super的追溯不仅限于直接父类
super和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识
this和super的区别
No |
区别点 |
this |
super |
1 |
访问属性 |
访问本类中的属性,如果本类没有此属性则从父类中继续查找 |
访问父类中的属性 |
2 |
调用方法 |
访问本类中的方法 |
直接访问父类中的方法 |
3 |
调用构造器 |
调用本类构造器,必须放在构造器的首行 |
调用父类构造器,必须放在子类构造器的首行 |
4 |
特殊 |
表示当前对象 |
无此概念 |
package
概念
1.为了方便的对项目中的类,进行统一的管理。提供了包的概念。
2.声明为源文件的首行
3.遵循标识符的命名规则和规范:xxxyyyzzz
4.命名时,每"."一次,代表着一层文件目录。
JDK中主要的包介绍
1. java.lang----包含一些Java语言的核心类,如String、Math、Integer、 System和Thread,提供常用功能。
2.java.net----包含执行与网络相关的操作的类和接口。
3.java.io ----包含能提供多种输入/输出功能的类。
4.java.util----包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。
5. java.text----包含了一些java格式化相关的类
6. java.sql----包含了java进行JDBC数据库编程的相关类/接口
7. java.awt----包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。 B/S C/S Client
import
import:导入
1. 可以在源文件中使用import来导入指定包下的类或接口
2. 声明在类的结构和包的声明之间
3. 如果需要在源文件中导入多个类或接口,则并列声明出即可
4. 比如:import java.util.*;表示可以导入util包下的所有的类或接口
5. 如果使用的类或接口是java.lang下定义的,则可以省略此import语句。
6. 如果使用的类或接口是当前包下定义的,则可以省略此import语句。
7. 如果一个类中使用了不同包下的同名的类,则必须通过全类名的方法进行区分调用
8. import static 可以导入指定类的静态的属性、方法
9. 如果已经声明过导入a包下的结构(如:import java.a.*),但是如果导入a包的子包下的类或接口,仍然需要导入声明。
JDK中主要的包介绍
1. java.lang----包含一些Java语言的核心类,如String、Math、Integer、
System和Thread,提供常用功能。
2. java.net----包含执行与网络相关的操作的类和接口。
3. java.io ----包含能提供多种输入/输出功能的类。
4. java.util----包含一些实用工具类,如定义系统特性、接口的集合框架类、
使用与日期日历相关的函数。
5. java.text----包含了一些java格式化相关的类
6. java.sql----包含了java进行JDBC数据库编程的相关类/接口
7. java.awt----包含了构成抽象窗口工具集(abstract window toolkits)的
多个类,这些类被用来构建和管理应用程序的图形用户界
面(GUI)。 B/S C/S Client
static
1)什么是static
“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”
这段话虽然只是说明了static方法的特殊之处,但是可以看出static关键字的基本作用,简而言之,一句话来描述就是:
方便在没有创建对象的情况下来进行调用(方法/变量)。
很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
static可以用来修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能。
2)static方法
static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。
但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。
3)static变量
static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
static成员变量的初始化顺序按照定义的顺序进行初始化。
4)static代码块
static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次
5)总结
使用范围:
在Java类中,可用static修饰属性、方法、代码块、内部类
被修饰后的成员具备以下特点:
随着类的加载而加载
优先于对象存在
修饰的成员,被所有对象所共享
访问权限允许时,可不创建对象,直接被类调用
6)static误区
1.static关键字会改变类中成员的访问权限吗?
有些初学的朋友会将java中的static与C/C++中的static关键字的功能混淆了。在这里只需要记住一点:与C/C++中的static不同,Java中的static关键字不会影响到变量或者方法的作用域。在Java中能够影响到访问权限的只有private、public、protected(包括包访问权限)这几个关键字
2.能通过this访问静态成员变量吗?
静态成员变量虽然独立于对象,但是不代表不可以通过对象去访问,所有的静态方法和静态变量都可以通过对象访问(只要访问权限足够)。
3.static能作用于局部变量么?
在C/C++中static是可以作用域局部变量的,但是在Java中切记:static是不允许用来修饰局部变量。不要问为什么,这是Java语法的规定。
final
是什么
表示“最终”。final标记的类不能被继承。提高安全性,提高程序的可读性。 final标记的方法不能被子类重写。final标记的变量(成员变量或局部变量)即称为常量。名称大写,且只能被赋值一次。
作用
表示“最终”。final标记的类不能被继承。提高安全性,提高程序的可读性。 final标记的方法不能被子类重写。final标记的变量(成员变量或局部变量)即称为常量。名称大写,且只能被赋值一次。
用在哪
类、方法、变量
怎么用
1.final修饰类
final class A{
}
class B extends A{ //错误,不能被继承。
}
2.final修饰方法
class A{
public final void print(){
System.out.println(“A”);
}
}
class B extends A{
public void print(){ //错误,不能被重写。
System.out.println(“尚硅谷”);
}
}
3.final修饰变量——常量
class A{
private final String INFO = “atguigu”; //声明常量
public void print(){
//INFO = “尚硅谷”;
}
}
特别说明:常量名要大写,内容不可修改。只可赋值一次。
static final:全局常量