1、今天学了什么 (1)构造器 构造器的定义: 需要注意的是构造器是一种特殊的方法,其方法名和类名相同,但没有方法返回值,也不用void修饰。
[修饰符] 方法名(形参列表){ 方法体 } 修饰符:修饰符可以省略,也可以是public、protected、private其中之一,如果构造器的修饰符为private,则不能通过new调用,也就是说当一个类的构造器被private修饰,该类则不能通过new来创建对象 方法名:必须与类名相同 形参列表:和方法中的形参格式完全相同 构造器的作用: 1、创建对象 2、初始化实例变量 3、如果开发者不提供构造方法,编辑器会自动提供一个无参构造方法
(2)this关键字
1、this访问实例变量时,一个作用是区分实例变量和局部变量,另一个是在实例方法中访问实例变量 2、this可以在方法中访问调用类中的其他实例方法,this可以省略 3、在构造器中可以用this调用其他构造器,且只能在第一行
(3)类方法和实例方法
1、static修饰的方法叫做类方法 2、不用static修饰的方法叫做实例方法,实例方法属于对象,调用方法时必须先创建对象,对象.方法名 3、在同一个类中,类方法间互相调用实际上可以省略类名,同样的,实例方法间互相调用省略了this 4、在同一个类中,实例方法可以调用类方法,因为类方法的初始化在实例方法的初始化之前,实例方法被调用时,内部类已经被加载了。this不能出现在类方法中。
(4)方法中参数的传递
public class Test { //在JVM中的栈内存中 创建main方法栈帧 public static void main(String[] args) { // TODO Auto-generated method stub int a = 10; int b = 5; //调用swap方法,并传递参数。JVM在栈内存中 创建swap方法栈帧 swap(a,b); //方法调用结束后 JVM swap方法栈帧被回收 System.out.println(a); //5 System.out.println(b); }
public static void swap(int a,int b) { int temp = a; a = b; b = temp; } }
public class Cat { int age; public Cat() { } public Cat(int age) { this.age = age; } } public class Test { //在栈内存中 创建main方法栈帧 public static void main(String[] args) { // TODO Auto-generated method stub //实例化cat对象 JVM会在堆内存中为Cat类实例化的对象分配内存,并将对象的地址存储在栈内存中 Cat cat = new Cat(18); //调用change方法,并传递引用类型的参数对象cat。JVM在栈内存中 创建swap方法栈帧 change(cat); //方法调用结束后 JVM中change方法栈帧被回收,打印对象的age变量,此时age变量的值已被改变。 System.out.print(cat.age); } /** * JVM会在栈内存中为变量cat分配新的内存,该内存中同样存储的是堆内存中实参对象的地址 * @param cat */ public static void change(Cat cat) { //为堆内存中对象的实例变量赋值 cat.age = 30; } }
(4)可变参数
本质是数组 可变参数是指方法参数列表不确定 public class Varargs { public static void main(String[] args) { //可变参数可以单独传递 test(100, "张三","李四","王五"); String[] strs = {"张无忌","赵敏","张三丰"}; //可变参数可以传入数组 test(200, strs); //也可以不传递 test(300); } public static void test(int a,String...names) { System.out.println(a); if(names!=null&&names.length>0) { for (String name : names) { System.out.println(name); } } } } 遍历可变参数时,先判断是否为空并且长度大于0