对象方法
方法的定义:一组动作的集合 一组动作要执行都执行 否则都不执行
在类中定义的方法只能通过对象和类加点调用 定义方法的流程是面向过程的,调用方法是面向对象的
方法构成:方法签名+方法体
方法签名{
方法体
}
方法签名的构成:修饰符 返回值数据类型 方法名(参数列表)
方法返回值:方法执行完毕交给外界的运行结果
void关键字:表示空返回值,代表当前方法运行不需要抛出反回值
是否有参数 | 是否有返回值 | 类型名称 | 作用 |
---|---|---|---|
无 | 有 | 生产型方法 | 若某些信息已经记录在当前对象中,则不需要重复传递参数给方法 |
有 | 无 | 消费型方法 | 1.类似于对对象属性或者中间变量进行赋值操作的方法,可使用消费型方法 2.若需要将内存中产生的数据写出到磁盘文件上,也可使用消费型方法 3.若需要将传递的参数与一些数据进行运算的结果进行单独的打印输出,也可使用消费型方法 |
有 | 有 | 加工型方法 | 根据传递的参数和某些现有的数据,计算过程进行搭配,最终计算得到并返回一个值 |
有 | boolean | 断言型方法 | 判断参数经过计算之后是否符合某一条件 |
参数传递的本质: 结论:在java中方法的参数传递被称为值传递,其本质是传递变量取值的拷贝。
名词普及:方法的形参和实参
形参:仅在定义方法时,用来声明方法需要哪些参数才能够运行的
但在方法定义的过程中,形参无具体取值
形参作用:在定义方法过程当中,在方法的执行体中进行符号占位。当具体调用这个方法时,这些形参形成的占位符,会被方法调用者传递的具体参数所替代
实参作用:在一个方法被调用时,实际带有具体数据传递给这个方法,用来替代形参占位符的具体位置。
传递实参的时候 实参的变量名称不一定非和形参的变量名保持一致
对于基本数据类型的值传递,形式参数的改变 不影响实际参数的值
当对于复合数据类型(对象)而言 值传递拷贝并传递的是对象的内存地址。只要对象的内存地址未发生变化,那么操作的始终为同一个对象
类方法
类方法和对象方法区别(参考对象属性和类属性之间区别)
区别1:对象方法不使用static关键字进行修饰 类方法使用static关键字进行修饰
区别2:对象方法必须使用队象加点调用 类方法也可使用对象点调用也可使用类加点调用 推荐使用类名加点调用的方式(静态方法)
基本语法结构
static 返回值 方法名(参数列表){
方法体
}
对象方法和类方法使用场景:
对象方法:若一个方法根据对象不同 其结果不同 用对象方法
类方法:不区分对象的区别 任意本类的对象运行此方法 结果都一致 用类方法 被称为工具方法
注意:若一个类当中所有的方法都是工具方法(静态方法),那么 这种类被称为工具类
常用工具类:Arrays、Math、Collections
静态方法不能够直接调用非静态结构(对象方法 对象属性)
对象方法必须使用对象加点调用 类方法可使用对象或类加点调用 推荐类名加点调用(静态方法)
若需要在静态方法中调用对象方法或对象属性 需要在静态方法中创建对象(参数传递)使用对象加点调用
注意:不仅仅是静态方法 在任意静态结构当中 都不能够直接调用非静态结构
在对象方法(非静态结构)中 可直接调用静态方法(静态属性)等静态结构
总结:静态不能直接调非静态 要调用 new对象 非静态能直接调用静态
解释
类加载和对象创建的流程
1.jvm接到new关键字通知 表示要创建一个对象 jvm需要为这个对象开辟内存空间
2.这个对象有多大 内存空间开辟多大 这些信息都记录在类的原信息中
3.为了得到类的原信息 必需在为对象开辟内存控件之前 先将类信息加载进入内存静态区中 类的元信息也就携带了静方法和和静态全局变量
4.得到类的元信息后 jvm才知道这个对象有多大 开辟多大内存
5.内存分配完毕后 执行对象的创建工作()
经过上述的步骤
类属性和类方法的加载时机一定在对象方法和对象属性前
一定存在的结构(静态成员)不能够冒险调用不一定存在的结构(非静态成员)后加载的结构一定能调用先加载的结构
总结:静态不能调用非静态 非静态能调用静态 本质上加载时间先后的问题
构造方法(构造器Constructor)
创建对象的语法结构
类型 变量 =new 类型();
类型()实际上就是调用这个类型的构造方法 进行对象的初始化
定义:是一种声明在类中的特殊方法 用来在实例化对象时 为对象执行初始化过程
基本语法结构: [修饰符] 类名(参数列表){
构造方法的方法体
}
特性总结:
构造方法名称需和类名一致
一个类中可存在多个构造器(函数重载原理)
构造方法因为其返回值的特殊性 不允许声明返回值数据类型 若对构造方法声明了返回值数据类型 就相当于创建了一个和类名同名的普通方法
一个类中 若没有任何手动声明的构造器 jvm会默认为这个类提供一个空构造器 若类中已经手动声明 则jvm不会提供空构造器
jvm创建对象步骤
1.jvm根据类的元信息 在堆内存中创建一个该类型的空间
2.通过构造器 对对象属性赋初值
3.在完成开辟空间和对象初始化操作后 构造方法会将一个特殊的返回值进行返回(对象的内存地址),这个内存地址将保存在左边的引用变量中
在上述创建对象的过程当中 构造方法将会参与到步骤2、3中
变量的生命周期与作用范围
变量的生命周期
变量的生命周期从定义这个变量开始计算 到这个变量所在层的{}结束为止 在生命周期中 这个变量可进行访问
同名变量的优先级
满足就近原则
在同一级别或较低的级别中 不能出现同名变量 但全局变量(对象属性和类属性)除外
this关键字
定义:指向当前对象的一个代名词、
当前对象:调用此方法的对象
this关键字用法:
可在对象中指代调用其他的对象方法 在对象方法中通过this.方式调用其他对象方法和对象属性时 this可不写 默认存在
注意:在静态结构中不可使用this关键字
使用this语法调用本类中生命的其他构造器:
基本语法结构:
构造器1(参数1,参数2,参数3){
使用参数1.2.3赋值过程
}
构造器1(参数1,参数2,参数3,参数4){
this(参数1,参数2,参数3);
使用参数4.5.6赋值过程
}
注意事项:
通过this()的方式,调用别类中其他的构造方法,在一个构造器中 只能被调用一次
通过this()的方式,调用本类中其他的构造方法,必须声明在调用者构造器的逻辑第一行
在普通方法中 不允许使用this()的方式调用构造器
方法重载
同一个类中定义的多个方法之间的关系。满足下列条件的多个方法相互构成重载 1.多个方法在同一个类中
2.多个方法具有相同的方法名
3.多个方法的参数不相同,类型不同或数量不同
4.参数之间的相对位置
注意:方法的返回值不可作为方法重载的区分条件
main方法
作用:所有java程序运行的指定唯一入口:JVM
main方法的基本语法结构是不可改变的 若对某些特定内容进行修改 则编译器不会认为修改后的方法为main方法
参数args[]的值传递
main方法中 因为main方法的调用是JVM的工作 所以给main函数的args形参传递实参也是JVM的工作
默认情况下 JVM不会自主的给main方法的参数传递实参 除非设定程序运行参数
方法:右键 -> Run as -> Run Configurations
在program arguments编写命令 编写的命令以换行为单位
args的作用:可通过传递参数的方式 指定程序的运行方式和启动方式