zoukankan      html  css  js  c++  java
  • 方法回顾及加深

    方法一定是定义在类中的,属于类的成员。

    1、方法的定义

    1 格式: 修饰符 返回类型 方法名(参数列表)异常抛出类型{...}

      1、修饰符:

    1 publicstaticabstract、final等等都是修饰符,一个方法可以有多个修饰符。例如程序入口
    2 main方法,就使用了public static这个俩个修饰符
    3 注:如果一个方法或者属性有多个修饰符,这多个修饰符是没有先后顺序的

      2、返回类型

    1 方法执行完如果有要返回的数据,那么就要声明返回数据的类型,如果没有返回的数据,那么返回类型就必须写void.
    2 只有构造方法(构造器)不写任何返回类型也不写void

    【示例】

    1 public String sayHello(){
    2     return "hello";
    3 }
    4 public int max(int a,int b){
    5     return a>b?a:b;
    6 }
    7 public void print(String msg){
    8     System.out.println(msg);
    9 }

    思考:声明返回类型的方法中一定要出现return语句,那么没有返回类型(void)的方法中,能不能出现 return语句?

    注:break和return的区别

     1 return 语句的作用
     2 (1) return 从当前的方法中退出,返回到该调用的方法的语句处,继续执行。
     3 (2) return 返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值的类型一
     4 致。
     5 (3) return后面也可以不带参数,不带参数就是返回空,其实主要目的就是用于想中断函数执行,返回
     6 调用函数处。
     7 
     8 break语句的作用
     9 (1)break在循环体内,强行结束循环的执行,也就是结束整个循环过程,不在判断执行循环的条件是否
    10 成立,直接转向循环语句下面的语句。
    11 (2)当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。

      3、方法名

    1 遵守java中标示符的命名规则即可.

      4、参数列表

    1 根据需求定义,方法可以是无参的,也可以有一个参数,也可以有多个参数

      5、异常抛出类型

    1 如果方法中的代码在执行过程中,可能会出现一些异常情况,那么就可以在方法上把这些异常声明并抛出,
    2 也可以同时声明抛出多个异常,使用逗号隔开即可。

    【示例】

    public void readFile(String file)throws IOException{
    }
    public void readFile(String file) throwsIOException,ClassNotFoundException{
    }

    2、方法调用

    在类中定义了方法,这个方法中的代码并不会执行,当这个方法被调用的时候,方法中的代码才会被一行一行顺序执行。

      1、非静态方法

    1 没有使用static修饰符修饰的方法,就是非静态方法.
    2 调用这种方法的时候,是"一定"要使用对象的。因为非静态方法是属于对象的。(非静态属性也是一样的)

    【例子】

    1 public class Student{
    2     public void say(){}
    3 }
    4 main:
    5 Student s = new Student();
    6 s.say();

      2、静态方法

    1 使用static修饰符修饰的方法,就是静态方法.
    2 调用这种方法的时候,"可以"使用对象调用,也"可以"使用类来调用,但是推荐使用类进行调用,因为静态
    3 方法是属于类的。(静态属性也是一样的)

    【例子】

    1 public class Student{
    2     public static void say(){}
    3 }
    4 main:
    5 Student.say();

      3、类中方法之间的调用

    假设同一个类中有俩个方法,a方法和b方法,a和b都是非静态方法,相互之间可以直接调用。

    1 public void a(){
    2     b();
    3 }
    4 public void b(){
    5 }

    a和b都是静态方法,相互之间可以直接调用.

    public static void a(){
        b();
    }
    public static void b(){
    }

    a静态方法,b是非静态方法,a方法中不能直接调用b方法,但是b方法中可以直接调用a方法. 静态方法不能 调用非静态方法!

    public static void a(){
        //b();报错
    }
    public void b(){
        a();
    }

    另外:在同一个类中,静态方法内不能直接访问到类中的非静态属性.

    总结:类中方法中的调用,两个方法都是静态或者非静态都可以互相调用,当一个方法是静态,一个方 法是非静态的时候,非静态方法可以调用静态方法,反之不能。

    3、调用方法时的传参

      1. 形参和实参

    【例子】

    1 // a = x;
    2 public void test(int a){
    3 //..
    4 }
    5 main:
    6 int x = 1;
    7 t.test(x);

    参数列表中的a是方法test的形参(形式上的参数)

    调用方法时的x是方法test的实参(实际上的参数)

    注意:形参的名字和实参的名字都只是一个变量的名字,是可以随便写的,我们并不关心这个名字,而是关 心变量的类型以及变量接收的值。

      2. 值传递和引用传递

    调用方法进行传参时,分为值传递和引用传递两种。

    如果参数的类型是基本数据类型,那么就是值传递。

    如果参数的类型是引用数据类型,那么就是引用传递。

    值传递是实参把自己变量本身存的简单数值赋值给形参.

    引用传递是实参把自己变量本身存的对象内存地址值赋值给形参.

    所以值传递和引用传递本质上是一回事,只不过传递的东西的意义不同而已.

    【示例:值传递】

    public class Test{
        public static void changeNum(int a){
            a = 10;
        }
        public static void main(String[] args){
            int a = 1;
            System.out.println("before: a = "+a); //1
            changeNum(a);
            System.out.println("after: a = "+a); //1
        }
    }

    【示例:引用传递】

     1 public class Demo03 {
     2     public static void changeName(Student s){
     3         s.name = "tom";
     4     }
     5     public static void main(String[] args){
     6         Student s = new Student();
     7         System.out.println("before: name = "+s.name); //null
     8         changeName(s);
     9         System.out.println("after: name = "+s.name); //tom
    10     }
    11 }
    12 class Student{
    13     String name;
    14 }

    4、this关键字

    在类中,可以使用this关键字表示一些特殊的作用。

      1、this在类中的作用

    【区别成员变量和局部变量】

    public class Student{
        private String name;
        public void setName(String name){
            //this.name表示类中的属性name
            this.name = name;
        }
    }

    【调用类中的其他方法】

     1 public class Student{
     2     private String name;
     3     public void setName(String name){
     4         this.name = name;
     5     }
     6     public void print(){
     7     //表示调用当前类中的setName方法
     8         this.setName("tom");
     9     }
    10 }

    注:默认情况下,setName("tom")和this.setName("tom")的效果是一样的.

    【调用类中的其他构造器】

     1 public class Student{
     2     private String name;
     3     public Student(){
     4         //调用一个参数的构造器,并且参数的类型是String
     5     this("tom");
     6     }
     7     public Student(String name){
     8         this.name = name;
     9     }
    10 }

    注:this的这种用法,只能在构造器中使用.普通的方法是不能用的.并且这局调用的代码只能出现在构造器 中的第一句.

    【示例】

     1 public class Student{
     2     private String name;
     3     //编译报错,因为this("tom")不是构造器中的第一句代码.
     4     public Student(){
     5         System.out.println("hello");
     6         this("tom");
     7     }
     8     public Student(String name){
     9         this.name = name;
    10     }
    11 }

      2、this关键字在类中的意义

    this在类中表示当前类将来创建出的对象.

    【例子】

     1 public class Student{
     2     private String name;
     3     public Student(){
     4         System.out.println("this = "+this);
     5     }
     6     public static void main(String[] args){
     7         Student s = new Student();
     8         System.out.println("s = "+s);
     9     }
    10 }

    运行后看结果可知,this和s打印的结果是一样的,那么其实也就是变量s是从对象的外部执行对象,而this是 在对象的内部执行对象本身.

    这样也就能理解为什么this.name代表的是成员变量,this.setName("tom")代表的是调用成员方法,因为 这俩句代码从本质上讲,和在对象外部使用变量s来调用是一样的,s.name和s.setName("tom")。

    【this和s打印出来的内存地址是一样的,使用==比较的结果为true。】

    注:这句话是要这么来描述的,s1对象中的this和s1相等,s2对象中的this和s2相等,因为类是模板,模板中写 的this并不是只有一个,每个对象中都有一个属于自己的this,就是每个对象中都一个属于自己的name属性 一样.

  • 相关阅读:
    PHP.TP框架下商品项目的优化2-图片优化
    PHP.TP框架下商品项目的优化1-时间插件、鼠标所在行高亮、布局规划页面
    PHP.26-TP框架商城应用实例-后台3-商品修改、删除
    PHP.25-TP框架商城应用实例-后台2-商品列表页-搜索、翻页、排序
    PHP.24-TP框架商城应用实例-后台1-添加商品功能、钩子函数、在线编辑器、过滤XSS、上传图片并生成缩略图
    PHP.23-ThinkPHP框架的三种模型实例化-(D()方法与M()方法的区别)
    PHP.22-Smart模版
    python爬取某站上海租房图片
    Python爬虫入门这一篇就够了
    按PEP8风格自动排版Python代码
  • 原文地址:https://www.cnblogs.com/koss/p/14465805.html
Copyright © 2011-2022 走看看