JAVA复习Day6
7.4可变参数
java中允许同一个类中多个同名 同功能但参数个数不同的方法,封装成一个方法,就可以通过可变参数实现
访问修饰符 返回类型 方法名(数据类型… 形参名){
}
当要求2个、3个、……n个数的和时,使用重载的方法也不是很方便
这里就用到了可变参数
class H{
public int sum(int... nums){
System.out.println("接收的参数个数="+nums.length);
int sums = 0;
for (int i=0;i<nums.length;i++)
{
sums+=nums[i];//让nums进行相加,当做数组来使用
}
return sums;
}
}
public class Main {
public static void main(String[] args) {
H adds = new H();//创建对对象
int add = 0;//定义要输出的总和
add= adds.sum(1,5,100,34);
System.out.println("这些数字的和为"+add);
}
}
! 程序结果允许图
7.4.1可变参数的细节
可变参数的实参可以为0或者任意多个
可变参数的实参可以为数组
可变参数的本质就是数组
可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后
一个形参列表中只能出现一个可变参数
7.5作用域
1、主要的变量就是属性(成员变量)和局部变量
2、局部变量一般是指在成员方法中定义的变量
3、JAVA中作用域的分类:
全局变量:也就是属性,作用域为整个类体
class H{
int age=10;
public void sum(){
System.out.println(age);
}
}
局部变量:除了属性之外的其他变量,作用域为定义它的代码块中
全局变量不可以赋值,直接使用,因为有默认值
局部变量必须赋值后才能使用,因为没有默认值
7.5.1作用域的注意事项和细节使用
1、属性和局部变量可以重名,访问时遵顼就近原则
2、在同一个作用域中,比如在同一个成员方法中,两个局部变量,不能重名
3、属性的生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁
而局部变量生命周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而销毁
4、作用域范围不同:
全局变量:可以被本类使用,或者其他类使用(通过对象调用)
class Person{
int age=10;
public void say(){
int age=56;
System.out.println("say()age"+age);
}
}
class T{
public void text(){
Person p1 = new Person();
System.out.println(p1.age);
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person();
p1.say();
T t = new T();
t.text();
}
}
! 程序运行图
局部变量:只能在本类中对应的方法中使用
5、修饰符不同
全局变量/属性可以加修饰符
局部变量不可以加修饰符
7.6构造方法/构造器
7.6.1基本语法
[修饰符] 方法名 (形参列表){
方法体;
}
1、这里的修饰符可以是默认的
2、构造器没有返回值
3、方法名和类的名字必须一样
4、参数列表和成员方法一样的规则
5、构造器的调用系统完成
构造器的主要作用是完成对新对象的初始化
7.6.2快速入门
class Person{
int age;
String name;
public Person(String pname,int page){
name = pname;
age = page;
System.out.println("构造器被调用");
}//构造器没有返回类型
//名字和类名一致
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person("小明",67);
//创建一个对象的时候,直接通过构造器指定名字和年龄
System.out.println("对象的年龄"+p1.age);
System.out.println("对象的姓名"+p1.name);
}
}
! 程序运行图
7.6.3细节和注意事项
1、一个类可以定义多个不同的构造器构成重载(构造方法)
2、构造器名和类名要相同
3、构造器没有返回值
4、构造器是完成对象初始化
5、若不定义构造器,系统会自动给类生成一个默认无参数构造方法(默认构造方法)
6、一旦定义了自己的构造器,默认的将会被覆盖,除非显式的定义一下
javap反编译
7.6.4对象创建的流程
1、先加载类信息,只会加载一次(在方法区)
2、在堆中分配空间
3、完成对象初始化,默认初始化,显式初始化,构造器初始化,引用的化,会在常量池中,常量池中的地址放在堆中
4、堆中的地址返回给p
7.7this
构造方法的输入参数名不是非常好,如果要将以下的代码pname,page
改为name,page时,则就会出现错误
class Person{
int age;
String name;
public Person(String pname,int page){
name = pname;
age = page;
System.out.println("构造器被调用");
}//构造器没有返回类型
//名字和类名一致
}
7.7.1使用和理解
this:java虚拟机会给每个对象分配this,代表当前对象
class Person{
int age;
String name
public Person(String name,int age){
this.name=name;//this.name表示当前的对象属性
this.age=age;//this.age表示当前的对象属性
}
}
7.7.2this本质
7.7.3this的注意细节
1、this关键字可以用来访问本类的属性,方法,构造器
2、this用于区分当前类的属性和局部变量
3、访问成员方法的语法:this.方法名(参数列表)
4、构造器语法:this(参数列表);注意只能在构造器中使用(即只能在构造器中)
必须放在第一条语句 如果要调用的话 着重注意
5、this 不能在类定义的外部使用 ,只能在类定义的方法中使用