ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java学习随笔-方法

2022-09-11 03:00:08  阅读:288  来源: 互联网

标签:Java int age 学习 void println 随笔 方法 public


方法的定义

public 返回数据类型 方法名 (形参列表..) {
//方法体
	语句;
	return 返回值;
}

注意:
1.形参列表:表示成员方法输入cal(int n),	getSum(int num1, int num2)

2.返回数据类型:表示成员方法输出,void表示没有返回值

3.方法主体:表示为了实现某一功能代码块

4.return语句不是必须的。

方法的调用机制

方法使用细节

  • 在调用带参数的方法时,一定要对应着参数列表传入相同类型或兼容类型的参数
public class test01{
    public double f1(){
        double d1 = 1.1 * 3;
        int n = 100;
        return n; //int自动转换为double,编译通过
        //return d1; 这里就不行了,double不能转换为int,会报错!不能把高精度的转为低精度的
    }
}
  • 一个方法最多有一个返回值,那如何返回多个结果?返回一个数组就好了
public class test02{
    public void f3(int n1,int n2){
        int[] resArr = new int[2];
        resArr[0] = n1 + n2;
        resArr[1] = n1 - n2;
        return resArr;
    }
}
  • 方法不能嵌套定义!
public class test03{
    
    //错误:方法不能这样嵌套定义!
	public void m1(){
        public void m2(){ 
        }
    }
    
    //可以这样写:
    public void m3(){
       m4();
    }
    
    //在方法m3()外定义m4(),然后再m3里面调用方法m4()
    public void m4(){
        
    }
}

调用细节

  • 同一个类中的方法调用:直接调用就好了
class Demo{
    //同一个类中的方法调用:直接调用即可
    public void print(int n){
        System.out.println("调用print()方法 n=" + n);
    }
    
    public void sayOk(){
        //sayOk调用 print
        print(10);
    }
}
  • 跨类中的方法A类调用B类方法:需要对象名调用
class B{
    public void hi(){
        System.out.println("B类中的hi(被执行)");
    }
}
class A{
    public void m1(){
        //创建B对象,然后再调用方法即可
        System.out.println("m1()方法被执行");
        B b = new B();
        b.hi();
        System.out.println("m1()方法继续执行");
    }
}

public class test {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        //创建AA对象 名字 obj
        AA obj = new AA();
        obj.swap(a,b); //调用swap
        System.out.println("main方法 a="+a+" b="+b);//这个输出什么??
        //输出 a=10 b=20,方法swap()没有改变main方法里的a和b,因为是值传递,具体原理如上图(在调用方法的时候会在栈区建立一个新的栈空间用于执行方法体,执行完之后销毁这个栈空间释放内存,从始至终都没有改变main中的a和b的地址,属于值传递,所以main中的a和b没有受到影响,System.out.println("main方法 a="+a+" b="+b)仍输出 a=10 b=20;
    }
}
public class AA {
    public void swap(int a,int b){
        System.out.println("\na和b交换前的值\n"+a+"\tb="+b);//a=10 b=20
        //完成了a和b的交换
        int tmp = a;
        a = b;
        b = tmp;
        System.out.println("\na和b交换后的值\na="+a+"\tb="+b);//a=20 b=10
    }
}

对于基本数据类型,传递的是值(值拷贝),形参的任何改变不影响实参!!!


数组是引用数据类型(学C++时刻入DNA的一句话:数组名是数组的首地址,就是数组中第一个元素的地址,是常量

public class Test {
    public static void main(String[] args) {
        B b = new B();
        int[] arr = {1,2,3};
        b.test100(arr);//调用方法
        System.out.println(" main的 arr数组 ");
        //遍历数组
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]+"\t");//输出什么呢?
        }
        System.out.println();
    }
}
public class B {
    //B类中编写一个方法test100,
    //可以接收一个数组,在方法中修改该数组,看看原来的数组是否变化
    public void test100(int[] arr){
        arr[0] = 200;//修改元素
        //遍历数组
        System.out.println(" test100的 arr数组 ");
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]+"\t");//输出什么呢?
        }
        System.out.println();
    }
}

//输出
 test100的 arr数组
200		2		3
 main的 arr数组
200		2		3

//同理
 
class test{        
    //测试 
    public static void main(String[] args) {
        Person p = new Person();
        p.name = "jack";
        p.age = 10;
		B b = new B();
        b.test200(p);
        System.out.println("main 的p.age"+p.age);//肯定输出了10000
    }
}

class Person{
        String name;
    int age;
}
class B{
      public void test200(Person p){
        p.age = 10000; //修改了对象属性
    }
}

韩老师挖坑题

将上面B类 test200()方法里的 p.age = 10000 改成 p=null后,测试类test里面的main方法的System.out.println("main 的p.age为"+p.age);输出的是什么???

class test{
    public static void main(String[] args) {
    Person p = new Person();
        p.name = "jack";
        p.age = 10;
		B b = new B();
        b.test200(p);
        System.out.println("main 的p.age为"+p.age);//这里输出什么???
    }
}
class Person{
    String name;
    int age;
}
class B{
    public void test200(Person p){
       // p.age = 10000; 将这行换成下列代码
        p = null;  
}

答案是:main 的p.age为10

方法的编写思路:

按下列顺序思路编写方法:

  1. 方法的返回类型
  2. 方法的名字
  3. 方法的形参
  4. 方法体

练习题:

编写一个方法copyPerson, 可以复制一个Person对象, 返回复制的对象。克隆对象,注意要求得到新对象和原来的对象是两个独立的对象,只是他们的属性相同。

public class MyTools{
    //编写一个方法copyPerson, 可以复制一个Person对象, 返回复制的对象。克隆对象,
    //注意要求得到新对象和原来的对象是两个独立的对象,只是他们的属性相同

/*       编写方法的思路:
        1. 方法的返回类型
        2. 方法的名字
        3. 方法的形参
        4. 方法体
*/
    public Person copyPerson(Person A){
       Person B = new Person();
       B.name = A.name;
       B.age = A.age;

       return B;
    }
}
public class Person {
    //编写一个方法copyPerson, 可以复制一个Person对象, 返回复制的对象。克隆对象,
    //注意要求得到新对象和原来的对象是两个独立的对象,只是他们的属性相同
    public String name;
    public int age;
}
public class Test {
    public static void main(String[] args) {
        MyTools test = new MyTools();
        Person I1 = new Person();
        I1.name = "芒特";
        I1.age = 25;
        Person I2 = test.copyPerson(I1);
        System.out.println("对象A的属性: 姓名:"+I1.name+" 年龄:"+I1.age);
        System.out.println("对象B的属性: 姓名:"+I2.name+" 年龄:"+I2.age);

    }
}
//结果:
对象A的属性: 姓名:芒特 年龄:25
对象B的属性: 姓名:芒特 年龄:25

以上是看韩顺平老师的Java课程做的随笔笔记

韩老师课程链接:https://www.bilibili.com/video/BV1fh411y7R8?spm_id_from=333.999.0.0&vd_source=a5cb5abf51083a337c47109ab202cc59

标签:Java,int,age,学习,void,println,随笔,方法,public
来源: https://www.cnblogs.com/YeJ1an/p/16683360.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有