方法

方法

方法的作用

  • 方法,也称函数,如果想要重复一段或者多段代码块的使用,可以将这些代码封装成一个方法,方法具体表现为某种行为,使用方法可以提高代码的复用性。

方法的定义

访问权限符 返回值 方法名(参数列表){
方法体
}

public viod method(){
System.out.println(“Hello World!!!”);
}

静态方法(类的方法)

  • 关键字static修饰的方法称为静态方法,也叫类方法,静态方法不属于对象,而是属于类,随着类的加载而加载,优先于构造方法执行。
  • 静态方法可以直接使用类名.方法直接调用,如果静态方法位于本类中可以直接省略类名直接调用
  • 在静态方法中,可以访问静态方法,可以引用类变量(被static修饰的变量),不能访问非静态方法与变量,不能使用super和this关键字

成员方法(对象的方法)

  • 是不含有static关键字修饰的普通方法,又称为实例方法,成员方法。属于对象的,不属于类的。(成员属性,成员方法是属于对象的,必须通过new关键字创建对象后,再通过对象调用)。

  • 在非静态方法中,即可以调用非静态方法,也可以调用静态方法,可以引用类变量和成员变量,可以使用关键字super和this。

    public class Text3 {
    int age = 26;//成员变量
    static String name = "蔡徐坤";//类变量

      public static void main(String[] args) {
      	Text3 t1 =  new Text3();
      	method();//本类中调用静态方法,直接省略类名
      	t1.method1();//调用成员方法
    

    }

      //静态方法
      static void method() {
      	System.out.println("静态方法");
      	//访问属性
      	System.out.println(name);
      	//System.out.println(age);//报错,静态不能访问非静态
      	//t1.method();//报错
    

    }

      //非静态方法,也叫成员方法
      void method1() {
      	System.out.println("非静态方法1");
      	method();//既可以调用静态方法
      	new Text3().method2();//又可以调用非静态方法
      
      	System.out.println(name);//既可以访问静态属性
      	System.out.println(age);//又可以访问非静态属性
      }
      void method2() {
      	System.out.println("非静态方法2");
      }
      }
    

方法的实参与形参

  • 实参也叫形式参数,方法声明时候的参数称为形参,如add(int a)
  • 形参也叫实际参数,方法调用时传入的参数,如add(1)

public class Text {

public static void main(String[] args) {
	method("字符参数");//括号中为实参
}

private static void method(String str) {//括号中为形参
	System.out.println(str);//将传入的参数打印输出
}

}

JVM内存结果划分

堆(Heap)

  • 作用:堆是JVM中最大的一块内存区域,用于存放所有创建的对象实例和数组。无论是哪个线程创建的对象,都会存储在堆内存中,因此堆内存是线程共享的。
  • 特点:堆内存由垃圾收集器(Garbage Collector)管理,负责回收不再使用的对象所占用的内存。堆内存可以细分为年轻代(Young Generation)和老年代(Old Generation)。年轻代又分为Eden区和两个Survivor区(S0和S1),用于存放新创建的对象;老年代则存放从年轻代晋升过来的长期存活对象。

方法区(Method Area)

  • 作用:方法区用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器(JIT)编译后的代码等数据。这些信息是全局共享的,对JVM中的每一个类都是可见的。
  • 特点:在HotSpot虚拟机中,方法区的一部分实现为永久代(Permanent Generation),但在Java 8之后被元空间(Metaspace)取代。元空间使用本地内存,因此不会受到JVM堆内存大小的限制。

虚拟机栈(Java Virtual Machine Stack)

  • 作用:虚拟机栈是线程私有的,它的生命周期与线程相同。每个线程在创建时都会创建一个虚拟机栈,用于存储局部变量、操作数栈、动态链接、方法出口等信息。每调用一个方法都会创建一个栈帧(Stack Frame),方法执行完成后,栈帧会被销毁。
  • 特点:由于虚拟机栈是线程私有的,因此不存在线程间的数据共享问题。但是,如果线程请求的栈深度超过了虚拟机所允许的最大深度,就会出现StackOverflowError异常。此外,如果栈的扩展时无法申请到足够的内存,还会出现OutOfMemoryError异常。

本地方法栈(Native Method Stack)

  • 作用:本地方法栈与虚拟机栈的作用非常相似,不过它是为执行本地(Native)方法服务的。本地方法栈也是线程私有的。

程序计数器(Program Counter Register)

  • 作用:程序计数器是一块较小的内存空间,用于记录当前线程执行的字节码指令的地址。它是线程私有的,每条线程都有一个独立的程序计数器。
  • 特点:由于程序计数器是线程私有的,因此不存在数据共享的问题。当线程执行一个Java方法时,程序计数器记录的是正在执行的虚拟机字节码指令的地址;如果线程执行的是一个Native方法,则程序计数器的值为空。

直接内存(Direct Memory)

  • 作用:直接内存并不是JVM运行时数据区的一部分,但它也被频繁使用。直接内存是通过java.nio包提供的ByteBuffer类来直接访问系统内存的。
  • 特点:直接内存的分配不会受到JVM堆大小的限制,但它仍然受到本机总内存(包括RAM和SWAP区)大小以及处理器寻址空间的限制。如果系统内存不足,可能会出现OutOfMemoryError异常。

方法的重载

  • 方法重载是指方法名相同,参数列表不同(无关返回值类型)的方法造成了方法的重载,通常发生在类的成员方法中,方法的重载提高了程序的强壮性

重载规则:

  • 被重载的方法必须改变参数列表(参数个数或类型不一样);
  • 被重载的方法可以改变返回类型;
  • 被重载的方法可以改变访问修饰符;
  • 方法能够在同一个类中或者在一个子类中被重载
  • 无法以返回值类型作为重载函数的区分标准

public class Text {

public static void main(String[] args) {
	add(1,2);//两个数的相加
	add(1,2,3);//三个数的相加
	add(1,2,3,4);//四个数的相加
	add(1,2,3,4,5);//五个数的相加
}
//方法名相同,参数列表不同造成重载
private static void add(int a,int b) {
	int sum = a + b;
	System.out.println("两个数的相加和为"+sum);
}
private static void add(int a,int b,int c) {
	int sum = a + b + c;
	System.out.println("三个数的相加和为"+sum);
	}
private static void add(int a,int b,int c,int d) {
	int sum = a + b + c +d;
	System.out.println("四个数的相加和为"+sum);
}
private static void add(int a,int b,int c,int d,int e) {
	int sum = a + b + c + d +e;
	System.out.println("五个数的相加和为"+sum);
}

}

posted @ 2024-08-02 10:33  坤坤真爱粉  阅读(21)  评论(0)    收藏  举报