前言
Java是面向对象的语言,在学习它之前我们需要了解什么东西呢?这篇博客中我将为小伙伴们介绍一下面向对象之前必须了解的知识。
构造方法
构造方法的定义
构造方法是一种特殊的方法,它是一个与类同名没有返回值类型的方法。对象的创建就是通过构造方法来完成的,它的主要功能是完成对象的初始化。当类的实例化一个对象时会自动调用构造方法。
构造方法是一种特殊的成员方法,它的特殊性反映在下面的几个方面:
- 构造方法的名字必须与定义它的类名完全相同,没有返回类型,甚至连void也没有。
- 主要完成对象的初始化工作,构造方法的调用是在创建一个对象时使用new操作进行的。
- 类中必定有构造方法。如果不写,系统自动帮你添加无参的构造方法。
- 不能被static、final、synchronized、abstract和native关键字修饰;
- 构造方法在初始化对象时自动执行,一般不能显式地直接调用。当同一个类存在多个构造方法时,Java编译系统会自动调用初始化时最后面括号的参数个数以及参数类型来自动一一对应。完成构造函数的调用。
- 构造方法分为两种:无参构造方法和有参构造方法。
无参构造方法
public class Example{
//名称与类名相同,并且没有返回类型
public Example(){
//初始化
}
}
如果没有为类提供构造方法,那么系统默认会生成一个无参的构造方法,我们也可以显示去实现该方法,在方法内部进行一些初始化操作。
有参构造方法
构造方法允许自定义参数,如果我们显示的为该类创建了一个有参的构造方法,那么系统再也不会给我们创建一个默认的构造方法,这是如果我们需要默认的无参构造方法,需要显示的去创建。
public class Example{
private String name;
//有参的构造方法
public Example(String name){
this.name = name;
}
}
this关键字
this
关键字是代表正在调用这个类的方法的当前实例,随调用该方法,那么this
就是指向那个方法。
this关键字的用途
this
调用本类中的属性,也就是类中的成员变量;- 在上面的例子中,当调用构造方法创建对象实例时,如果类的实例变量和局部变量名称相同,则要用
this
关键字区分,否则这个赋值没有任何意义的。
- 在上面的例子中,当调用构造方法创建对象实例时,如果类的实例变量和局部变量名称相同,则要用
this
调用本类中的方法:- 我们在内部调用其他的成员方法,实际上系统都会为我们前面默认加上
this
关键字。
- 我们在内部调用其他的成员方法,实际上系统都会为我们前面默认加上
this
调用本类中的其他构造方法,调用时要放在构造方法的首行。
private String name;
public Example(String name){
//使用this()去调用无参的构造方法,this()必须放在第一行
this();
this.name = name;
}
public Example(){
System.out.println("无参构造方法");
}
方法重载
Java中允许在一个类中,有多个方法拥有相同的名字。在名字相同的同时,必须有不同的参数,这就是重载。编译器会根据实际情况挑选正确的方法,如果编译器找不到匹配的参数或者找到多个可能的匹配就会产生编译时错误。
1.普通方法的重载
普通方法的重载是Java实现多态技术的重要手段,为编程带来了很多便利,当方法同名时,为了让编译器区别他们,至少需要下面之一不同
- 参数个数不同
- 对应位置上的参数类型不同
不允许参数完全相同而只是返回值不同的情况出现。
举例说明:
public int max(int a ,int b){
return a>b?a:b;
}
//普通方法重载,方法名相同,参数类型或者参数列表长度不同
public long max(long a, long b){
return a>b?a:b;
}
2.构造方法的重载
private String name;
private String password;
//当初始化有很多情况发生时,我们需要经常需要去重载构造方法
public Example(String name){
this.name=name;
}
public Example(String name, String passwrod) {
this.name = name;
this.password = passwrod;
}
构造代码块
构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。
语法格式
{
System.out.println("构造代码块");
}
##final关键字
Java 关键字 final 有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类、非抽象类成员方法和变量。
- final类不能被继承,没有子类,final类中的方法默认是final的。
- final 方法不能被子类的方法覆盖,但可以被继承。
- final 成员变量表示常量,只能被赋值一次,赋值后值不再改变。
- final 不能用于修饰构造方法。
注意:父类的 private 成员方法是不能被子类方法覆盖的,因此 private 类型的方法默认是 final 类型的。
1、final类
final 类不能被继承,因此 final 类的成员方法没有机会被覆盖,默认都是 final 的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为 final 类。
2、final 方法
如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为 final 方法。
##static关键字
static是Java中的静态修饰符,可以用来修饰成员变量,成员方法和代码块。它的修饰特点如下:
- 静态方法和静态变量是属于某一个类,而不是类的对象。
- 静态方法和静态变量的引用直接通过类名来引用。
- 在静态方法中不能调用非静态的方法和非静态的成员变量。反之,则可以。
- 静态变量在某种程序上和其他语言的全局变量相类似,如果不是私有的就可以在类的外部进行访问。
- 修饰变量:类的所有对象共同拥有一个对象,也成为类变量。类变量在类加载的时候初始化,而且只被初始化一次。在程序中任何对象对静态变量做修改,其他对象看到都是改变后的值,static变量可以用类名直接访问,而不需要对象。
- 修饰方法:类的所有对象共同拥有一个功能,称为静态方法。静态方法也可以用类名直接访问而不需要对象。所以在静态方法里不能直接访问非静态变量和非静态方法,在static方法不能出现this或者super等关键字。
- 修饰代码块:用static去修饰里面的一个独立的代码块,称为静态代码块。静态代码块在类第一次被加载的时候执行,而且只执行一次。静态代码块没有名字,因此不能显式调用,而只能在类加载的时候由JVM来调用。它主要用来完成一些初始化操作。利用静态代码块可以对一些static变量进行赋值。
总结
关于Java面向对象就总结到这里,后面会和小伙伴们分享面向的对象的核心思想——封装、继承、多态。