Java面向对象——类的成员
摘要:本文主要介绍了类的常见成员。
属性
属性称为成员变量,一般来讲不用赋值,因为有默认值,另外显式赋值没有意义会导致所有由此类创建对象都是此值。
默认值
Boolean类型成员变量的默认值是false。
Int类型成员变量的默认值是0。
Double类型成员变量的默认值是0.0。
String类型成员变量的默认值是null。
Char类型成员变量的默认值是\u0000。
类变量
类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法和语句块之外。
静态变量在程序开始时创建,在程序结束时销毁。
静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量。
默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
实例变量
实例变量声明在一个类中,但在方法、构造方法和语句块之外。
实例变量在对象创建的时候创建,在对象被销毁的时候销毁。
访问修饰符可以修饰实例变量。
实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息。
实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定。
局部变量
局部变量声明在方法、构造方法或者语句块中。
局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁。
访问修饰符不能用于局部变量。
局部变量只在声明它的方法、构造方法或者语句块中可见。
局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
方法
方法就是用来完成解决某件事情或实现某个功能的办法。
定义
在Java中,声明一个方法的具体语法格式如下:
1 修饰符 返回值类型 方法名(参数类型 参数名, 参数类型 参数名, ... , 参数类型 参数名) { 2 执行语句; 3 return 返回值; 4 }
修饰符:
方法的修饰符比较多,有对访问权限进行限定的,有静态修饰符static,还有最终修饰符final等,这些修饰符在后面的学习过程中会逐步介绍。
返回值类型:
用于限定方法返回值的数据类型,返回给调用方,返回类型可以是任意类型。
如果不需要返回值,则写void,也不需要写return和返回值。如果需要返回值,则需要写一个返回类型,并且return后的返回值需要和返回类型一致。
方法名:
功能块的名字,命名规则和变量命名规则一样。
参数类型和参数名:
参数类型用于限定调用方法时传入参数的数据类型,可以为任意类型,参数类型和返回类型没有任何关系。
参数名是一个变量,用于接收调用方法时传入的数据。
参数:
参数类型和参数名组成参数。
参数可以有多个,中间用逗号隔开。
方法定义时参数称为形式参数,简称形参。
方法调用时参数称为实际参数,简称实参。
形参和实参的类型、个数、顺序必须一致,名字没有要求。
执行语句:
里面可以写任何逻辑语句,表示的是此方法的具体功能。
return和返回值:
return用于结束方法以及返回方法指定类型的值。
返回值是被return语句返回的值,该值会返回给调用者。
调用
方法的调用可以通过如下方式调用:
1 类型 变量名 = 对象实例.方法名(参数);
但是在不同的情况下又有不同的区分,有的可以不写或者不能写。
是否有参数:
如果有参数,那么需要在括号中填写参数,多个参数用逗号分隔: 类型 变量名 = 对象实例.方法名(参数, 参数); 。
如果没有,则不需要填写参数: 类型 变量名 = 对象实例.方法名(); 。
是否有返回值:
如果方法有返回值,那么需要用接收返回值,也可以不接收,但建议用对象接收: 类型 变量名 = 对象实例.方法名(参数); 。
如果没有返回值,则不需要接收返回值: 对象实例.方法名(参数); 。
是否在当前类中使用:
如果在当前类中使用,则可以直接调用,不需要通过对象实例调用: 类型 变量名 = 方法名(参数); 。
如果在其他类中使用,则需要通过对象实例调用: 类型 变量名 = 对象实例.方法名(参数); 。
如果是被statis修饰的方法,则可以通过类名调用: 类型 变量名 = 类名.方法名(参数); 。
参数传递
参数传递是指,调用方法时,将实参的值传递给形参过程。
定义方法时,参数列表中的变量,我们称为形式参数。调用方法时,传入给方法的数值,我们称为实际参数。
当调用方法时,如果传入的数值为基本数据类型(包含String类型),形式参数的改变对实际参数不影响。
当调用方法时,如果传入的数值为引用数据类型(String类型除外),形式参数的改变对实际参数有影响。
重载
同一个类中,方法名相同,参数列表不同,这种现象称为方法重载(overload)。
所谓的参数不一样,主要有两点,第一是参数的个数不一样,第二是参数的类型不一样。只要这两方面有其中的一方面不一样就可以构成方法的重载了。
重写(覆盖)
方法覆盖是说子类重新定义了父类的方法,是在两个类中,必须有相同的方法名,相同的参数列表,相同的返回类型。
被重写的方法不能拥有比父类的方法更严格的访问控制权限。
构造方法不能被继承,因此不能被重写,在子类中只能通过super关键字调用父类的构造方法。
类的构造方法(构造器)
构造方法是类用于创建对象的一个特殊的方法,当类创建对象时,就会调用类的构造方法。
语法
1 修饰符 类名(参数列表) { 2 方法体; 3 }
说明
构造方法没有返回类型,也不能使用void关键字。
构造方法的方法名必须和类名一致。
如果在类中没有定义构造方法,那么编译器会提供默认的构造方法,默认的构造方法没有参数列表,也没有方法体。
如果在类中定义了构造方法,那么编译器就不会提供默认的构造方法。
构造方法必须使用new关键字进行调用: new 类名(); 或 new 类名(参数); 。
初始化块
说明
初始化块分为静态初始化块和动态初始化块,优先于构造方法执行,经常执行初始化信息。
静态初始化块和普通初始化块都可以有多个,都可以写任何逻辑语句,不能定义方法。
执行顺序
静态成员变量初始化和静态初始化块的执行顺序由定义位置决定,从上往下执行。
成员变量初始化和初始化块的执行顺序由定义的位置决定,从上往下执行。
最后执行构造方法。
普通初始化块和静态初始化块对比
相同点:
默认执行顺序都是从上往下,都可以有多个。
不同点:
普通初始化块能执行多次,静态初始化块只执行一次。
普通初始化块实在对象创建后执行,静态初始化块是在类加载时执行。
普通初始化块可以访问普通成员和静态成员,静态成员初始化块只能访问静态成员。
原文地址:https://www.cnblogs.com/shamao/p/10907009.html