14、JAVA入门——方法和构造方法

简介: 14、JAVA入门——方法和构造方法

1、方法重载


(1)方法重载的定义


       方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数类型或参数个数。


(2)方法重载的特点:


       -->在同一个类中。


       -->方法名相同。


       -->参数列表不同(参数顺序、参数类型、参数个数不同)。


       -->方法的返回值不能作为判断方法之间是否构成重载的依据(与方法的返回类型和访问修饰符无关)。


       -->代码展示:定义一个Calculate类


public class Calculate {
  // 定义2个int类型数据相加的方法
  public int sum(int a, int b) {
  return a + b;
  }
  // 定义3个int类型数据相加的方法
  public int sum(int a, int b, int c) {
  return a + b + c;
  }
  // 定义2个double类型数据相加的方法
  double sum(double a, double b) {
  return a + b;
  }
  // 定义一个int类型和一个double类型数据相加的方法
  public double sum(int a, double b) {
  return a + b;
  }
  // 定义一个double类型和一个int类型数据相加的方法
  public double sum(double a, int b) {
  return a + b;
  }
}


(3)方法重载的调用


       -->通过对象调用重载的方法时,系统的代码智能提示会给出返回类型和参数的信息,使用“↑”和“↓”键或者单击,都可以选择要使用的方法。


       -->通过对象直接调用并传递参数,系统会根据参数类型自动匹配相应的方法。


       -->代码展示:定义一个CalculateTest类,来使用Calculate类


public class CalculateTest {
  public static void main(String[] args) {
  //创建Calculate对象
  Calculate c = new Calculate();
        //调用的两个int类型相加,返回int数值的方法
  int result1 =c.sum(10, 20);
  System.out.println(result1);
  }
}

(4)方法重载的优点


       方法重载其实是对原有方法的一种升级,可以根据参数的不同,采用不同的实现方法,而且不需要编写多个名称,简化了类调用方法的代码


2、构造方法


       Java中,当类创建一个对象时会自动调用该类的构造方法,构造方法分为默认构造方法和带参数的构造方法。


(1) 构造方法的定义


       1)构造方法的主要作用是进行一些数据的初始化。


       2)当开发人员没有编写自定义构造方法时,Java会自动添加默认构造方法,默认构造方法没有参数。


       3)当开发人员编写了自定义了有参的构造方法时,默认无参构造方法会被覆盖。若要使用无参构造方法,需要在类中手动添加无参构造方法。


       定义构造方法的语法格式如下:


       [访问修饰符] 方法名([参数列表]){


               //方法体代码


       }


       -->构造方法没有返回值,void也不写。


       -->默认构造方法没有参数,因此参数列表可选。


       -->构造方法的方法名与类名相同。


public Student(String name, int age, double height) {
  }


(2) 构造方法重载


       构造方法重载即在同一个类中可以定义多个重载的构造方法。


public class Student {
  String name;
  int age;
  double height;
  public Student() {
  System.out.println("我是无参构造方法");
  }
  public Student(String name, int age, double height) {
  System.out.println("我是有参构造方法");
  }
}


3、this关键字

(1)this关键字是对一个对象的默认引用。每个实例方法内部都有一个this引用变量指向调用这个方法的对象。


(2)this关键字的使用


       1)使用this调用成员变量,解决成员变量和局部变量的同名冲突。


       2)使用this调用成员方法。


       3)使用this调用重载的构造方法,只能在构造方法中使用,且必须是构造方法的第一条语句。


       4)因为this是在对象内部指代自身的引用,所以this只能调用实例变量、实例方法和构造方法,不能调用类变量和类方法,也不能调用局部变量。


public class Student {
  String name;
  int age;
  double height;
  public Student() {
  System.out.println("我是无参构造方法");
  }
  public Student(String name, int age, double height) {
  //调用其它构造方法,必须写在构造方法的第一行
  this();
  System.out.println("我是有参构造方法");
  //this调用属性
  this.name = name;
  this.age = age;
  this.height = height;
  }
  public void printName(){
  System.out.println("学生姓名:"+this.name);
  }
  public void printInfo(){
  //this调用其它普通方法
  this.printName();
  System.out.println("学生年龄:"+this.age);
  }
}

4、成员变量和局部变量



(1)成员变量作用域


       1)类的属性,也就是直接在类中定义的变量称为成员变量,它定义在方法的外部。


       2)成员变量可以在声明时赋初始值。


(2) 局部变量作用域


       1)局部变量就是定义在方法中的变量。


       2)局部变量在使用前需要赋值,否则会编译出错。


(3) 成员变量和局部变量的区别


       1)作用域不同:局部变量的作用域仅限于定义于它的方法,在该方法外无法访问它。


       成员变量的作用域在整个类内部都是可见的,所有成员方法都可以使用它,如果访问权限允许,还可以在类外部使用成员变量。


       2)初始值不同:对于成员变量,如果在类定义中没有给它赋予初始值,Java会给它一个默认值。


       基本数据类型整数型值为0,浮点型的值是0.0,char类型的值是'\u0000',boolean类型的值是false,引用类型的值为null。


       但是Java不会给局部变量赋予初始值,因此局部变量必须要定义并赋值后再使用。


       3)在同一个类中,不允许有同名成员变量。在同一个方法中,不允许有同名的局部变量。在不同的方法中,可以有同名的局部变量。


       4)局部变量可以和成员变量同名,并且在使用时,局部变量具有更高的优先级。



public class Demo01 {
  /*
  * 局部变量:定义在方法或者某些结构中的变量,只能作用在方法中或者定义它的结构中
  * 成员变量(全局变量):定义在类中方法外(某些结构外)的变量,能够作用在整个类中
  * 
  * 系统会给成员变量赋予一个默认值,局部变量必须先初始化(赋值)才能使用,系统不会给局部变量赋予默认值
  * 同一个类中不能有同名的成员变量(全局变量),在同一个方法或者结构中,不能有同名的局部变量,不同的方法中可以有同名的局部变量
  * 同一个类中可以有同名的成员变量和局部变量,但是局部变量具有更高的优先级
*/
  // 定义在类中,方法外
  int num = 10;
//  int num = 200;
  public void print() {
  // a定义在print()方法中,只在当前这个方法中可以使用
  int a = 100;
  // int a = 200;
  System.out.println(a);
  int num = 20;
  System.out.println(num);
  }
  public void printInfo() {
  int a = 300;
  // System.out.println(a);
  }
  public static void main(String[] args) {
  for (int i = 0; i <= 100; i++) {
    System.out.println(i);
  }
  // System.out.println(i);
  }
}



相关文章
|
2天前
|
监控 安全 Java
Java中的多线程编程:从入门到实践####
本文将深入浅出地探讨Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的摘要形式,本文将以一个简短的代码示例作为开篇,直接展示多线程的魅力,随后再详细解析其背后的原理与实现方式,旨在帮助读者快速理解并掌握Java多线程编程的基本技能。 ```java // 简单的多线程示例:创建两个线程,分别打印不同的消息 public class SimpleMultithreading { public static void main(String[] args) { Thread thread1 = new Thread(() -> System.out.prin
|
8天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
41 4
|
19天前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
39 17
|
8天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
14天前
|
存储 安全 Java
🌟Java零基础-反序列化:从入门到精通
【10月更文挑战第21天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
49 5
|
11天前
|
安全 Java 调度
Java中的多线程编程入门
【10月更文挑战第29天】在Java的世界中,多线程就像是一场精心编排的交响乐。每个线程都是乐团中的一个乐手,他们各自演奏着自己的部分,却又和谐地共同完成整场演出。本文将带你走进Java多线程的世界,让你从零基础到能够编写基本的多线程程序。
26 1
|
12天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
18 2
|
11天前
|
Java 程序员 数据库连接
Java执行顺序大揭秘:静态块、非静态块和构造方法谁先谁后?
本文详细介绍了Java中的初始化块,包括静态初始化块和非静态初始化块的概念、执行顺序和实际应用场景。通过具体示例,帮助读者理解这两种初始化块的区别和使用场景,让面试官对你刮目相看。
22 0
Java执行顺序大揭秘:静态块、非静态块和构造方法谁先谁后?
|
18天前
|
Java 数据处理 开发者
Java多线程编程的艺术:从入门到精通####
【10月更文挑战第21天】 本文将深入探讨Java多线程编程的核心概念,通过生动实例和实用技巧,引导读者从基础认知迈向高效并发编程的殿堂。我们将一起揭开线程管理的神秘面纱,掌握同步机制的精髓,并学习如何在实际项目中灵活运用这些知识,以提升应用性能与响应速度。 ####
41 3
|
19天前
|
Java
Java中的多线程编程:从入门到精通
本文将带你深入了解Java中的多线程编程。我们将从基础概念开始,逐步深入探讨线程的创建、启动、同步和通信等关键知识点。通过阅读本文,你将能够掌握Java多线程编程的基本技能,为进一步学习和应用打下坚实的基础。