• 学习Java的第十六天。。。(构造方法、方法重载、this、局部变量和成员变量)


    构造方法

    什么是构造方法

    1.构造方法就是类构造对象是调用的方法,对于对象的初始化工作
    2.构造方法是实例化一个类的对象,也就是new的时候,最先调用的方法                                          (用来创建对象及对象的初始化)

    构造方法的定义

      构造方法是在类中定义的,构造方法的定义格式:方法名与类名称相同无返回值类型的声明
      对象的实例化语句:Dog dog=new Dog();//new dog后面有一个括号,带括号表示调用方法,此时调用的方法是构造方法

    访问权限修饰符   构造方法名(){
            //初始化代码
    }

    不写构造方法,系统会提供默认的无参构造方法

    写了构造方法,就会替换掉默认的无参构造方法

    自定义构造方法  方法名相同,参数不同,返回值不同

    构造方法之间的相互调用

    可以使用this关键字调用构造方法

    1. class Dog{
    2. //默认构造方法
    3. public Dog(){
    4. //System.out.println("构造方法执行了");
    5. }
    6. /*
    7. * 注意:如果在一个类中,已经有了其他的带参数的构造方法,
    8. * 那么默认的构造方法将不起作用,如果要起作用就必须显示的给它写出来
    9. *
    10. */
    11. public Dog(String name){
    12. this.name=name;
    13. System.out.println("带一个参数的构造方法实现了");
    14. }
    15. public Dog(String name,int age){
    16. this(name);//构造方法之间可以相互调用,比如把下面一行注释掉,然后可以使用this关键字调用只带了那么这个参数的构造方法
    17. //调用其他方法是此语句需要在第一句,也就是限制了不能调用多个
    18. //注意:在构造方法相互调用时必须要有出口
    19. // this.name=name;
    20. this.age=age;
    21. System.out.println("带两个参数的构造方法执行了");
    22. }
    23. private String name;
    24. private int age;
    25. public void setName(String name){
    26. this.name=name;
    27. }
    28. public String getName(){
    29. return name;
    30. }
    31. public void setAge(int age){
    32. this.age=age;
    33. }
    34. public int getAge(){
    35. return age;
    36. }
    37. }
    1. public static void main(String[] args) {
    2. // TODO Auto-generated method stub
    3. Dog dog=new Dog();
    4. Dog dog1=new Dog("旺财",2);
    5. }

    注意:在构造方法相互调用的时候必须要有出口

     方法重载

    在同一个类中,出现多个方法的方法名相同,参数列表不同(参数的个数、参数的类型、参数顺序)的现象

    1. 在同一个类中
    2. 方法名相同
    3. 参数列表不同
    4. 与返回值类型、访问权限修饰符无关
    1. //定义几个普通方法
    2. public int sum(int num1,int num2){
    3. return num1+num2;
    4. }
    5. public double sum(double num1,double num2){
    6. return num1+num2;
    7. }
    8. public double sum(int num1,double num2){
    9. return num1+num2;
    10. }
    11. public double sum(double num1,int num2){
    12. return num1+num2;
    13. }

    this关键字

    调用类中的属性 
    调用类中的方法或构造方法 
    表示当前对象:在方法被调用的过程中,哪个对象调用了方法,在方法内的this就表示谁
    可以通过类名.this来表示谁的对象

    1. class Cat {
    2. private String name;
    3. private int age;
    4. public void setName(String name) { //name="咪咪"
    5. this.name = name;//this代表的是当前对象,谁调用了这个方法,谁就是当前对象
    6. }
    7. public String getName() {
    8. return name;
    9. }
    10. public void setAge(int age) {
    11. this.age = age;
    12. }
    13. public int getAge() {
    14. return age;
    15. }
    16. public void eat(){
    17. //在方法中使用this调用类中的其他方法或属性,this可以省略,this前面可以使用当前的类名.this
    18. //在后面的内部类知识点中会涉及到嵌套
    19. System.out.println("我是"+this.getName());//调用类中的方法,这里也可以不写,这里的getName()是默认的
    20. System.out.println("我是"+this.name);
    21. System.out.println("我是"+Cat.this.getName());
    22. }
    23. }
    1. public static void main(String[] args) {
    2. Cat mimi=new Cat();
    3. mimi.setName("咪咪");
    4. mimi.setAge(3);
    5. mimi.eat();
    6. }

    局部变量和成员变量

    变量作用域

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

    成员变量

    作用类在其他结构外的变量
    成员变量的作用范围是整个类中都可以使用(在静态方法中不能使用非静态的成员变量,可以式样静态的成员变量)
    成员变量系统会给它赋值一个默认值
    在同一个类中,不能有同名的全局变量,全局变量和局部变量可以同名,在使用的时候局部变量具有更高的优先级

    局部变量

    作用方法或者其他结构内的变量
    局部变量的作用范围只限于定义局部变量的结构中
    局部变量没有默认值,在使用之前要进行赋值,否则会报错
    在不同的方法内(获取其他结构内)可以有相同名称的局部变量,在同一个方法或者结构内不能有同名的局部变量

    局部变量名称可以和成员变量一样,在方法中使用的时候,就是采用就近原则

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

    1.在类中的位置不同
            成员变量:在类中定义
            局部变量:在方法中定义或者方法的参数
    2.在内存中的位置不同
            成员变量:在堆内存中(成员变量属于对象,对象进堆内存)
            局部变量:在栈内存中(局部变量属于方法,方法进栈内存)
    3.生命周期不同
            成员变量:随着对象的创建而存在,随着对象的销毁而消失
            局部变量:随着方法的调用而存在,随着方法调用的完毕而消失
    4.初始化值不同
            成员变量:有默认初始化值,引用类型默认为null
            局部变量:没有默认初始化变量,必须定义,赋值,然后才能使用

    构造方法小结
    1.构造方法的名称与类名相同,没有返回值声明(包括void)
    2.构造方法用于初始化数据(属性)
    3.每一个类中都会有一个默认的无参构造方法
    4.如果类中有显示的构造方法,那么默认的构造方法将无效
    5.如果有显式的构造方法,还想保留默认构造方法要显式的写出来
    6.构造方法可以有多个,但参数不一样,成为构造方法的重载
    7.在构造方法中调用另一个构造方法,使用this(…),该句代码必须在第一句。
    8.构造方法之间的调用,必须要有出口
    9.给对象初始化数据可以使用构造方法或setter方法,通常情况下,两者都会保留
    10.一个好的编程习惯是要保留默认的构造方法。(为了方便一些框架代码使用反射来创建对象)
    11.private Dog(){},构造方法私有化,当我们的需求时为了保证该类只有一个对象时,就会使用构造方方法私有化。什么时候一个类只需要一个对象?比如,工具类(没有属性的类,只有行为)并且该工具对象被频繁使用。权衡只用一个对象与产生多个对象的内存使用,来确定该类是否定义为只需要一个对象

  • 相关阅读:
    基于asp.net mvc加mysql开发的网上书店
    2021 RoboCom 世界机器人开发者大赛-高职组(复赛)
    MySQL CASE表达式简单使用
    excel怎么设置任意选一个单元格纵横竖横都有颜色
    Go语言map底层分析
    TypeScript与js对比介绍
    ubuntu20下安装nginx插件geoip2查询ip信息
    PHP 共享茶室棋牌室无人软硬件结合开发小程序系统的开发优势
    IP 摄像机移动应用 SDK 开发入门教程(安卓版)
    在微信小程序中安装和使用vant框架
  • 原文地址:https://blog.csdn.net/qihaojinqiuma/article/details/126108110