• 构造方法、方法重载、全局变量与局部变量


    构造方法

            构造方法是类中的一种特殊方法,当程序用类创建对象时需使用它的构造方法。

            语法规则:访问权限修饰符 类名(参数列表){ 方法体 }               

            类中的构造方法的名字必须与它所在的类的名字完全相同,而且没有类型。允许在一个类中编写若干个构造方法,但必须保证它们的参数不同,参数不同是指:参数的个数不同,或参数个数相同,但参数列表中对应的某个参数的类型不同。

            需要注意的是,如果类中没有编写构造方法,系统会默认该类只有一个构造方法,该默认的构造方法是无参数的,且方法体重没有语句。

    1. public class Student {
    2. // 定义属性
    3. String name;
    4. int age;
    5. char gender;
    6. double height;
    7. double weight;
    8. String address;
    9. double score;
    10. long phoneNumber;
    11. // Student类中有一个默认的无参构造函数,只是隐藏起来了,不显示而已
    12. /*
    13. * 访问权限修饰符 类名(参数列表){ 方法体 }
    14. */
    15. // 声明一个有参构造函数来创建对象
    16. public Student() {
    17. }
    18. public Student(String name, int age, char gender, double height, double weight, String address,
    19. double score, long phoneNumber) {
    20. //this表示当前调用此方法的对象,谁调用这个方法this就表示谁
    21. this.name = name;
    22. this.age = age;
    23. this.gender = gender;
    24. this.height = height;
    25. this.weight = weight;
    26. this.address = address;
    27. this.score = score;
    28. this.phoneNumber = phoneNumber;
    29. }
    30. // 声明一个方法来输出对象的所有信息
    31. public void printInfo() {
    32. System.out.println("姓名:" + this.name + ",年龄:" + this.age + ",性别:" + this.gender
    33. + ",身高:" + this.height + ",体重:" + this.weight + ",地址:" + this.address + ",分数:"
    34. + this.score + ",电话:" + this.phoneNumber);
    35. }
    36. }
    1. public class StudentTest {
    2. public static void main(String[] args) {
    3. //使用Student类里的无参构造函数创建对象
    4. Student stu = new Student();
    5. //给对象属性赋值
    6. stu.name = "张三";
    7. stu.age = 22;
    8. stu.gender = '男';
    9. stu.height = 170;
    10. stu.weight = 140;
    11. stu.address = "安徽合肥";
    12. stu.phoneNumber = 13012341234L;
    13. stu.score = 99.5;
    14. stu.printInfo();
    15. //上面对象的属性是一个一个进行赋值,比较麻烦,能不能在创建对象的时候一次性赋值?-->通过有参构造函数来实现
    16. Student stu2 = new Student("李四", 21, '男', 175.5, 135.8, "安徽安庆", 98.5, 13878784646L);
    17. stu2.printInfo();
    18. }
    19. }
    1. public class Teacher {
    2. String name;
    3. int age;
    4. char gender;
    5. double height;
    6. double weight;
    7. String address;
    8. double score;
    9. long phoneNumber;
    10. //添加无参构造方法
    11. public Teacher() {
    12. }
    13. //添加有参构造方法
    14. public Teacher(String name, int age, char gender, double height,
    15. double weight, String address, double score, long phoneNumber) {
    16. this.name = name;
    17. this.age = age;
    18. this.gender = gender;
    19. this.height = height;
    20. this.weight = weight;
    21. this.address = address;
    22. this.score = score;
    23. this.phoneNumber = phoneNumber;
    24. }
    25. }
    1. public class Penguin {
    2. String name;
    3. int health;
    4. char sex;
    5. //注意:下面这个方法不是构造方法,只是方法名没有按照规范命名,方法名正好是类名而已
    6. public void Penguin(){
    7. health=10;
    8. sex='雄';
    9. System.out.println("这不是构造方法");
    10. }
    11. public void print(){
    12. System.out.println("企鹅的名字是:"+name+",健康度:"+health+",性别是:"+sex);
    13. }
    14. public static void main(String[] args) {
    15. /*
    16. * 这个Penguin()是默认的无参构造方法,默认无参构造方法的方法体内没有做任何操作
    17. * 所以,通过默认的无参构造方法创造对象,对象的所有属性的属性值都是默认值
    18. * 整数类型的默认值都是0,浮点类型的默认值都是0.0,char类型的默认值都是空格,
    19. * 布尔类型的默认值都是false,引用类型的默认值都是null,
    20. *
    21. */
    22. Penguin pgn3=new Penguin();
    23. pgn3.print();
    24. }
    25. }

     方法重载

            Java中存在两种多态:重载(overload)和重写(override),重写是与继承有关的多态;

            所谓功能多态性,是指可以向功能传递不同的消息,以便让对象根据相应的消息来产生相应的行为。对象的行为通过类中的方法来体现,那么行为的多态性就是方法的重载。

            方法重载:在同一个类中,出现多个方法的方法名相同,参数列表不同(参数的个数,参数类型,参数顺序;必须满足以上三个条件中的一个)的现象

            1)在同一个类中

            2)方法名相同

            3)参数列表不同

            4)与返回值类型,访问权限修饰符无关

    1. public class Dog {
    2. //定义属性
    3. String name;
    4. int age;
    5. String gender;
    6. String color;
    7. String brand;
    8. String weight;
    9. //默认无参构造方法
    10. public Dog(){
    11. }
    12. //有参构造方法
    13. public Dog(String name, int age, String gender) {
    14. this.name = name;
    15. this.age = age;
    16. this.gender = gender;
    17. }
    18. public Dog(String name, int age, String gender, String color, String brand,
    19. String weight) {
    20. this.name = name;
    21. this.age = age;
    22. this.gender = gender;
    23. this.color = color;
    24. this.brand = brand;
    25. this.weight = weight;
    26. }
    27. //定义几个普通方法
    28. public int sum(int num1,int num2){
    29. return num1+num2;
    30. }
    31. public double sum(double num1,double num2){
    32. return num1+num2;
    33. }
    34. public double sum(int num1,double num2){
    35. return num1+num2;
    36. }
    37. public double sum(double num1,int num2){
    38. return num1+num2;
    39. }
    40. public int sum(int num1,int num2,int num3){
    41. return num1+num2+num3;
    42. }
    43. public void test(){
    44. System.out.println("test()");
    45. }
    46. public void demo(){
    47. this.test();
    48. }
    49. }

     this关键字

            this是Java的一个关键字,表示某个对象。this可以出现在实例方法和构造方法中,但不可以出现在类方法中。

    this关键字出现在类的构造方法中时,代表使用该构造方法所创建的对象。

    声明方法时,方法类型前面不使用static修饰的是实例方法,用static修饰的是类方法,也称类方法。与实例无关

    实例方法只能通过对象来调用,不能用类名来调用。当this关键字出现在实例方法中时,this就代表正在调用该方法的当前对象。

    this表示当前对象,存在于构造方法中或其它方法中,谁调用该方法,this就指向谁
    this在构造方法中调用其它构造方法,需要写在第一行

    this可以调用属性、其它方法、构造方法

    全局变量与局部变量

            变量作业域:变量按照其所在的位置,可以分为成员变量(全局变量),局部变量两大类 变量作业域:变量按照其所在的位置,可以分为成员变量(全局变量),局部变量两大类

            成员变量:

                    作用类中其它结构外的的变量,

                    成员变量的作用范围是整个类中都可以使用( 在静态方法中不能使用非静态的成员变量,可以使用静态的成员变量)

                    成员变量未赋值时,系统会给它复制一个默认值

                    在同一个类中,不能有同名的全局变量,全局变量和局部变量可以同名,使用时,局部变量比全局变量具有更高的优先级

            局部变量:

                    作用方法中或者其它结构内的变量

                    局部变量的作用范围只限于定义局部变量的结构中

                    局部变量没有默认值,在使用之前要进行赋值,否则会报错

                    在不同的方法内(或者其它结构内)可以有相同名称的局部变量,在一个方法或者同一个结构内不能有同名的局部变量

            成员变量和局部变量的区别

                    1)作用域不同

                    局部变量的作用域仅限于定义它的方法

                    成员变量的作用域在整个类内部都是可见的

                    2)初始值不同

                    Java会给成员变量(其未赋值时)一个初始值

                    Java不会给局部变量赋予初始值

    1. public class Demo01 {
    2. String name;
    3. // String name;
    4. int num1=1000;
    5. public void test(){
    6. int num1;
    7. System.out.println(name);
    8. num1=100;
    9. //局部变量在使用之前一定要赋值
    10. System.out.println(num1);
    11. }
    12. public void demo(){
    13. System.out.println(num1);
    14. int num1=100;
    15. System.out.println(num1);
    16. }
    17. public static void ttt(){
    18. //静态方法内不能使用非静态的成员变量
    19. // System.out.println(name);
    20. }
    21. public static void main(String[] args) {
    22. for (int i = 0; i <=10; i++) {
    23. System.out.println(i);
    24. }
    25. //System.out.println(i);
    26. //System.out.println(name);//非静态
    27. //创建Demo01对象
    28. Demo01 d=new Demo01();
    29. d.test();
    30. }
    31. }

  • 相关阅读:
    计算机毕业设计Java牙科诊所管理系统(源码+系统+mysql数据库+Lw文档)
    Spring Boot DTO 验证示例
    第18章Swing程序设计
    【实验】Hadoop-2.7.2+zookeeper-3.4.6完全分布式环境搭建(HDFS、YARN HA)转载
    点到平面的距离公式
    JAVA总结笔记
    es6运算符
    C const
    模拟可执行的四旋翼模型——在未知环境下运动规划应用研究(Matlab代码实现)
    《YOLO医学影像检测》专栏介绍 & CSDN独家改进实战
  • 原文地址:https://blog.csdn.net/qq_51810428/article/details/126104688