成员方法定义格式
访问权限修饰符 方法返回值类型方法名(参数列表) throws 异常名
{
方法体;
}
访问格式
对象名.方法名(参数列表);
成员方法返回值
方法运行完毕后,如果有明确的结果,则方法需要在声明时进行运行结构的声明,并在方法体中使用return关键字描述方法的运行结果
方法运行完毕后,如果没有明确运行最终结果(呈现给用户的结果),则方法无需对运行结果进行说明,在方法声明时明确该方法无任何运行结果,使用关键字void进行声明
使用void声明返回结果时,可以使用独立的return语句来提前结束方法的运行
成员方法访问控制修饰符
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
默认 √ √ × ×
private √ × × ×
成员方法修饰符
static
方法有两种,静态方法(类方法),非静态方法(实例方法)
变量有两种,静态变量(类变量),非静态变量(实例变量)
√:非静态方法调用非静态方法
√:非静态方法调用静态方法
×:静态方法调用非静态方法
√:静态方法调用静态方法
总结:静态方法不能调用实例方法
※无法从静态上下文中引用非静态方法
√:非静态方法调用非静态变量
√:非静态方法调用静态变量
×:静态方法调用非静态变量
√:静态方法调用静态变量
总结:静态方法不能调用实例变量
※无法从静态上下文中引用非静态变量
综合总结:静态的内容中不能使用非静态的成员
静态变量和实例变量的区别?
在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
方法的参数
形参
形参是指方法初始化阶段为其分配的用于保存外部临时数据的对应内存空间
实参
实参是指方法执行阶段为调用方法而提供的实际数据所占用的对应内存空间
方法的参数用于描述方法执行过程中所需要使用的外部资源
方法在初始化阶段会对其参数进行初始化
方法在执行完毕后,会销毁所携带的参数
参数具有前后顺序关系
执行方法时,参数必须数量与类型与定义格式完全一致才可以执行方法
方法运行时传递的实参如果是基本数据类型或字符串,传递时仅仅将所对应的值
传递给运行的方法的形参,当形参在方法内部发生变化时,不影响外面实参的值
方法的重载
重载描述的一种方法间的关系
同一个类中,多个方法间满足下列关系称这些方法之间相互构成重载
拥有相同的方法名
拥有不同的参数数量或参数
重载方法的调用冲突
重载方法在定义过程中不产生任何问题,但是在调用过程中,由于使用的参数不能精确指向定义的方法,造成对多个方法的引用全部匹配的现象类型
方法的递归调用
任意方法的方法体中如果再次调用本方法,称为方法的递归调用
方法的递归构造条件:
方法内部调用方法本身
具有退出方法的条件
//1.求1到100的和
int fn(int n)
{
if(n==1)
return 1;
return f(n-1)+n;
}
//2.求1*2*3*....*n n!
int fn(n)
{
if(n == 0){
return 1;
break;
}
if(n==1)
return 1;
return f(n-1)*n;
}
//3.求斐波那契数列第N项
int fn(int n)
{
if(n==1)
return 1;
if(n==2)
return 1;
else
{
return f(n-1)+f(n-2)
}
}
构造方法
javap 反编译类字节码文件,仅仅能查看类的结构,查看的内容仅仅包含让看的内容
语法结构
1. 构造方法名与类名相同。
2. 构造方法有参数列表。
3. 构造方法不设计返回值项。
4. 构造方法定义在类中
5. 虽然构造方法定义在类内部,但构造方法不是类的成员
6. class 类名{
7. [访问控制修饰符] 类名(参数列表){方法体;}
8. }
构造方法的作用
构造方法仅在创建对象时被调用
构造方法不能当做一般方法被调用
在创建对象时,new关键字后面跟随的即构造方法
构造方法的重载
构造方法间也具有重载现象
在一个类中定义多个构造方法,对其所携带的参数进行数量或类型的区分即为构造方法的重载
构造方法的重载是为了在创建对象时提供更便利的入口模式,对对象创建过程中需要指定数据进行加载,或执行不同的程序代码
默认的构造方法
当用户没有显式的为一个类定义构造方法时,系统会为每个没有定义构造方法的类分配一个默认无参的构造方法
class Person{
}
其中包含有一个Person(){}
默认构造方法不受任何限制,随处可以调用
构造方法访问类成员
构造方法属于一种特殊的方法,在构造方法中可以对类的成员进行访问
访问类变量
访问实例变量
访问类方法
访问实例方法
类成员无法直接调用构造方法,除非按照构造方法的原始格式,在创建对象时调用
构造方法的相互访问
构造方法是在创建对象时被调用的,构造方法间可以通过this关键字实现相互的调用
格式:
this(参数列表);
上述语句只能出现在构造方法体中第一句,否则会引起编译器语法报错
null
创建对象时,系统会调用构造方法,并为其在内存中分配对应的内存空间
对于未分配内存空间的对象,即未进行初始化的对象,其对应的值为null
静态代码块
静态代码块是一种定义在类的内部的特殊的语法结构
静态代码块在类被加载到JVM时运行
一个类中可以定义多个静态代码块
多个静态代码块的运行顺序是自上向下依次运行的
静态代码块不是类的成员
类的初始化静态变量归属静态代码块的执行,因此对象的静态变量声明位置在类中有顺序设置
语法结构
static {
语句序列;
}
举例:
class Demo
{
static int i;
static
{
i=1;
System.out.println(i);
}
static
{
j = 2;
System.out.println(j);
}
static int j;
}
静态代码块中如果要获取静态变量的值需要把静态变量的声明放在静态代码块之前,如:i对,j错
static int a = 3;其实是
static int a;
static{
a = 3
}
实例代码块
实例代码块是一种定义在类内部的特殊的语法结构
实例代码块在调用构造方法创建对象前被运行
一个类中可以定义多个实例代码块
多个实例代码块的运行顺序是自上向下依次运行
实例代码块不是类的成员
对象的初始化实例变量归属实例代码块的执行,因此对象的实例变量声明位置在类中有顺序设置
语法格
式
{
语句序列
}
Java的代码块
Java语言中具有静态代码块,实例代码块与局部代码块三种块结构
静态代码块只在类加载时运行,只运行一次
实例代码块在每次创建对象前被运行
class Demo
{
int i;
{
i=1;
System.out.println(i);
}
{
j = 2;
System.out.println(j);
}
int j;
}
实例代码块中如果要获取实例变量的值需要把实例变量的声明放在实例代码块之前,如:i对,j错
int a = 3;其实是
int a;
{
a = 3
}
局部代码块是java语言中发放内部定义的用于对代码进行区域划分的特殊语法结构,主要用于限定局部变量的作用范围