100天JAVA学习计划03-浅谈方法

今天是第三天啦,哦,今天是3月30号,一个伟大的日子,本博主的生日!

今天主要简单的了解一下Java中的方法!

在上一篇文章中已经提到了方法长啥样,可能有些小伙伴会说,好像跟C语言里的函数差不多嘛(PS:原谅我会不止一次的提到C语言,毕竟这是博主写代码的启蒙语言!)。从长相上来看,确实差不多,但是地位上可差远了,Java可不是颜控哟!Java之所以称之为面向对象的语言,自然地位最高的就是类和对象,而C语言是结构化的语言,所以在C中函数才如此的重要!在Java中,方法的地位是永远赶不上类和对象的,所以,方法是不能独立存在,也不能独立执行,必须属于类或者对象如果这个方法用了static修饰,那么这个方法属于类,也叫作静态方法,通常使用类.方法名进行调用;如果没有用static修饰,那么使用对象.方法名进行调用,再说一遍,方法只能被类或者对象调用,永远不能独立执行!!!那有的小伙伴就要反驳我了,我试过,在同一个类中,可以在一个方法中直接调用另一个方法!这其实是这么回事,在同一个类中一个方法调用另一个方法,java会自己给它加上调用者的,普通方法就用this关键字,静态方法就用类名啦

下面我们来了解一下java方法的参数传递!在Java中,方法参数的传递方法只有一种,是值传递!值传递的意思就是说,我有一个参数,如果你方法想要我的参数,那我是不会给你参数的,我把参数的值copy一份给你用,但是参数还在我手里!官方一点的说法是,将实际参数值的副本传入方法而方法本身不受影响!下面这段代码就解释了值传递!

import java.util.*;
//值传递演示代码1
public class Main{

    public static void changenum(int num1,int num2){
        int temp = num1;
        num1 = num2;
        num2 = temp;
        System.out.println("在方法中:");
        System.out.println("num1 = "+num1+";num2 = "+num2);
    } 

    public static void main(String[] args){

        int num1 = 1;
        int num2 = 2;
        changenum(num1,num2);
        System.out.println("在main中:");
        System.out.println("num1 = "+num1+";num2 = "+num2);
    }
}

运行结果如图:

这里可以清晰的看到在方法中,传入的副本被交换了,而在main中,原来的参数不受任何影响!

小伙伴们再来仔细的看这段代码,changenum(int num1,int num2)方法用了static修饰,也就是说,把他设定为静态方法,那么如果我把这个static去掉会怎么样呢?

import java.util.*;
//值传递演示代码2
//这段代码中和代码1的唯一区别是把 changenum(int num1,int num2)前的static去掉了
public class Main{

    public void changenum(int num1,int num2){//前面没有static了哟!
        int temp = num1;
        num1 = num2;
        num2 = temp;
        System.out.println("在方法中:");
        System.out.println("num1 = "+num1+";num2 = "+num2);
    } 

    public static void main(String[] args){

        int num1 = 1;
        int num2 = 2;
        changenum(num1,num2);
        System.out.println("在main中:");
        System.out.println("num1 = "+num1+";num2 = "+num2);
    }
}

那么如果我们在命令行编译一下会发生什么呢?如下图:

哦哦,出错了,这个错误很好地验证了静态成员(用static修饰)不能直接访问非静态成员(不用static修饰)。因为main方法之前加了static,所以它就不能直接访问非静态的changenum方法!注意啦,是不能直接访问,想要访问,还是可以做到的!在main方法中这样写就可以啦!

Main test = new Main();
test.changenum(num1,num2);

创建个对象就搞定啦!

你以为这就是值传递?太天真了,关于值传递,还有如下这样的代码:

import java.util.*;
//值传递演示代码3
public class Main{

    int num1;
    int num2;

    public static void changenum(Main test){
        int temp = test.num1;
        test.num1 = test.num2;
        test.num2 = temp;
        System.out.println("在方法中:");
        System.out.println("num1 = "+test.num1+";num2 = "+test.num2);
    } 

    public static void main(String[] args){
        Main test = new Main();
        test.num1 = 1;
        test.num2 = 2;
        changenum(test);
        System.out.println("在main中:");
        System.out.println("num1 = "+test.num1+";num2 = "+test.num2);
    }
}

先来看运行结果吧:

这下方法里的main中的结果一样了,是不是就不是值传递了呢?

当然还是值传递,这次我们传的是个对象,是个引用变量,上一篇我们讲过,引用变量里面存的是个地址,那我现在把这个地址复制给另一个引用(方法中的),那么两个引用指向了同一个对象,都对同一个对象进行操作,所以无论是在方法中进行操作还是在main函数中进行操作都是一样,因为他们都指向了同一个对象呀!

关于方法,还有几个小玩意需要了解一下:

第一,方法的形参可以是不固定的!如果你不知道一个方法到底有几个形参,那么可以在最后一个形参类型后面加三个点(…)表示程序员已经疯掉了无语了妥协了因为他不知道到底有几个参数!就像这样

import java.util.*;
//形参可变演示代码
public class Main{
    public static void meetingpeople(int num,String... name){
        System.out.print(num);
        for(String temp:name){
            System.out.print(temp);
        }
    }
    public static void main(String[] args){
        meetingpeople(3,"小张","小李","小王");
    }
}

运行结果:

第二,方法重载。方法重载就是说一个类中可以包含2个或者以上的同名方法,只要形参列表不一样就可以了。那么在实际调用的时候,根据方法名和形参表就可以判断出来到底调用的是哪个方法。比如下面这个例子:

import java.util.*;

//方法重载演示代码

public class Main{

public static void fangfa(){
    System.out.println("我是方法1");
}

public static void fangfa(String say){
    System.out.println(say);
}

public static void fangfa(int num){
    System.out.println("我是方法"+num);
}

public static void main(String[] args){
    Main test = new Main();
    test.fangfa();
    test.fangfa("我是方法2");
    test.fangfa(3);
}

}

运行结果:

时间: 2024-10-13 23:27:59

100天JAVA学习计划03-浅谈方法的相关文章

转 Android开发学习笔记:浅谈WebView

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/647456 WebView(网络视图)能加载显示网页,可以将其视为一个浏览器.它使用了WebKit渲染引擎加载显示网页,实现WebView有以下两种不同的方法: 第一种方法的步骤: 1.在要Activity中实例化WebView组件:WebView webView = new WebView(this); 2

201671010116. 2016-2017-3《Java程序设计》 Java学习计划

Java学习计划 周次 (阅读/编写)代码行数 发布博客量/博客评论数量 课余/课堂学习时间小时() 最满意的编程任务 1 50/13 1/2 8/6 安装JDK和Eclipsse 2 200/70 2/0 20/6 对数的分离,求和运算 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

[转]Java虚拟机类加载机制浅谈

Java语言是一种编译后再经过解释器执行的过程, 解释器主要就是如何处理解释Class文件的二进制字节流.JVM主要包含三大核心部分:运行时数据区,类加载器和执行引擎. 虚拟机将描述类的数据从Class文件加载到内存,并对数据进行校验.准备.解析和初始化,最终就会形成可以被虚拟机使用的Java类型,这就是一个虚拟机的类加载机制.Java中的类是动态加载的,只有在运行期间使用到该类的时候,才会将该类加载到内存中,Java依赖于运行期动态加载和动态链接来实现类的动态使用. 一个类的整个生命周期如下:

关于分布式程序 java的内存管理浅谈

关于分布式程序 java的内存管理浅谈 标签(空格分隔): 分布式 内存管理 java Preface 当前全球正处于互联网时代,是个信息大爆炸时代.对于商家来说,每一天信息都是宝贵的,都可以转换成money的.所以对数据的处理要求也变的越来越严格,从以前的hadoop/MapReduce 的离线处理,到现在的准实时和实时处理,都是由数据需求而引起的技术革命.数据的处理快慢取决于很多因素.现在主流的解决方法,像Spark,Flink,Pular,包括腾讯,阿里,百度的诸多为开源的框架都是基于分布

2016最新Java学习计划

一.Java学习路线图 二.Java学习路线图--视频篇 六大阶段 学完后目标 知识点 配套免费资源(视频+笔 记+源码+模板) 密码        第一阶段 Java基础 入门 学习周期: 35天 学完后目标: 1.可进行小型应用程序开发 2.对数据库进行基本的增删改查管理 市场价值:¥5000 计算机基础知识 计算机基础.DOS常用命令.Java概述.JDK环境安装配置.环境变量配置.Java程序入门 1.2015年Java基础视频-深入浅出精华版(强烈推荐) 2.历经5年锤炼(适合初学者入

java学习计划

最近经常有人在论坛,或群里询问,也想报一些java培训班,但是想问一下怎么样学习java最快! 其实,编程的学习正好体现了一句老话:欲速则不达. 今天想给大家谈一下我的对java学习个人的一些见解,和学习的初衷. 前言 <站长>杂志方谈蔡文胜:一名站长最宝贵的品质应该是什么? 回:热情和学习,有这两点才能做.热情不是冲动,要持续耐心做一个事情才能成功.学习不只是看书,问个专家就可以,要有学习方法和总结能力. 1 爱好.   这个是动力,如果你不爱Java,不爱计算机,而是喜爱游戏,娱乐或者其他

Java 学习计划

1. 双文博客     为提高个人英语水平和学习积极性,在此学习Java的时候写下自己的个人学习博文记录自己的学习过程.采用汉语和英文两种方式进行写作. 2. 解释     英文版和中文版并不是绝对统一. 3. 后续计划     自己坚持写部分后,会积极学习一种规范的格式,开源给大家,让我们一起协作,讲述自己的Java学习历程.

Java知识图谱(附:阿里Java学习计划)

摘要:     本文主要描绘了Java基础学习过程,给出Java知识结构图,以及阿里Java岗学习计划,对Java学习爱好者.准备及将要从事Java开发方面的同学大有裨益. 温馨提示:     由于CSDN对图片的压缩,导致图片观看效果不理想,建议大家通过右键"在新标签页打开图片"进行观看或直接把图片下载下来观看. JVM 1. 内存模型( 内存分为几部分? 堆溢出.栈溢出原因及实例?线上如何排查?) 2. 类加载机制 3. 垃圾回收 Java基础 什么是接口?什么是抽象类?区别是什么

疯狂JAVA学习计划

? Java_StudyPlane ?2015/2/20 ????????大年初二 ????????雨天 1.5小时为1个课时. JAVA学习进度表