zoukankan      html  css  js  c++  java
  • 变量、对象、封装、构造方法、static

    1.成员变量和局部变量
    一个实例

    class Varialbe {
    //成员变量
    //int num = 10;
    int num; //0
    
    public void show() {
      //int num2 = 20; //局部变量
      //可能尚未初始化变量num2
      //int num2; //没有默认值
       int num2 = 20;
       System.out.println(num2);
    
       //int num = 100;
       System.out.println(num);
      }
    }
    
     
    
    
    class VariableDemo {
    public static void main(String[] args) {
          Varialbe v = new Varialbe();
    
          System.out.println(v.num); //访问成员变量
    
          v.show(); 
    
       }
    }

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

    A:在类中的位置不同
    成员变量:在类中方法外
    局部变量:在方法定义中或者方法声明上
    B:在内存中的位置不同
    成员变量:在堆内存
    局部变量:在栈内存
    C:生命周期不同
    成员变量:随着对象的创建而存在,随着对象的消失而消失
    局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
    D:初始化值不同
    成员变量:有默认初始化值
    局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。
    注意事项:
       局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
    例如,上面关于num的输出问题

    2.形式参数的问题:
    基本类型:形式参数的改变不影响实际参数(值传递)
    引用类型:形式参数的改变直接影响实际参数(引用传递)

    类作为形式参数的问题?

    如果你看到一个方法需要的参数是一个类名,就应该指定这里实际需要的是一个具体的对象。

    3.匿名对象
    匿名对象:就是没有名字的对象。
    匿名对象的应用场景:
    A:调用方法,仅仅只调用一次的时候。
    注意:调用多次的时候,不适合。
    那么,这种匿名调用有什么好处吗?
    有,匿名对象调用完毕就是垃圾。可以被垃圾回收器回收。
    B:匿名对象可以作为实际参数传递

    4.封装

    private:私有的。可以修饰成员变量和成员方法。
    注意:被private修饰的成员只能在本类中访问。
    (1)封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
    (2)好处:

    • 隐藏实现细节,提供公共的访问方式
    • 提高代码的复用性
    • 提高代码的安全性

    (3)设计原则

                 把不想让外界知道的实现细节给隐藏起来,提供公共的访问方式。

    (4)private是封装的一种体现

                封装:类,方法,private修饰成员变量

    5.封装和private的应用:
    A:把成员变量用private修饰
    B:提高对应的getXxx()和setXxx()方法

    6.this关键字
    this:是当前类的对象引用。简单的记,它就代表当前类的一个对象。
    注意:谁调用这个方法,在该方法内部的this就代表谁。
    this的场景:
            解决局部变量隐藏成员变量

    this:哪个对象调用那个方法,this就代表那个对象

    7.构造方法
    构造方法:
    给对象的数据进行初始化

    格式:

    1. 方法名与类名相同
    2. 没有返回值类型,连void都没有
    3. 没有具体的返回值

    构造方法的注意事项:
    A:如果我们没有给出构造方法,系统将自动提供一个无参构造方法。

    图解反编译前

    反编译后

    通过反编译可知

    主要是new Student()引发的构造方法Student(反编译中的图解)public 为默认所以上图不显示

    B:如果我们给出了构造方法,系统将不再提供默认的无参构造方法。(构造方法也可以重载,即带不同参数--默认不带参数)
    注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法

    8.类的组成:成员变量,成员方法
    今天我们又加入了一个新的成员:构造方法。
    以后再提类的组成:

    • 成员变量
    • 构造方法
    • 成员方法

    图解

    9.import必须出现在所有的class前面
    例如

     import java.util.Scanner;
     class ……
     {
     
     }
     class ……
     {
     
     }

    10.static
    static的特点:(它可以修饰成员变量,还可以修饰成员方法)
    A:随着类的加载而加载
          回想main方法。
    B:优先于对象存在
    C:被类的所有对象共享
    举例:咱们班级的学生应该共用同一个班级编号。
    其实这个特点也是在告诉我们什么时候使用静态?
    如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。
    举例:
    饮水机(用静态修饰)(饮水机可以多人共享使用)
    水杯(不能用静态修饰)(水杯只能自己一个人用,原则上不可以共享,每个人都有一个)
    D:可以通过类名调用
    其实它本身也可以通过对象名调用。
    推荐使用类名调用。

    静态修饰的内容一般我们称其为:与类相关的,类成员
    静态变量也可以通过类名调用.png

     
    static的内存图解

    11.static关键字注意事项
    A:在静态方法中是没有this关键字的
    如何理解呢?
    静态是随着类的加载而加载,this是随着对象的创建而存在。
    静态比对象先存在。
    B:静态方法只能访问静态的成员变量和静态的成员方法
    静态方法:
    成员变量:只能访问静态变量
    成员方法:只能访问静态成员方法
    非静态方法:
    成员变量:可以是静态的,也可以是非静态的
    成员方法:可是是静态的成员方法,也可以是非静态的成员方法。
    简单记:
    静态只能访问静态。(非静态可以访问一切)
    例子

     1 class Teacher {
     2 public int num = 10;
     3 public static int num2 = 20;
     4 
     5 public void show() {
     6 System.out.println(num); //语句1,隐含的告诉你访问的是成员变量
     7 System.out.println(this.num); //语句2,明确的告诉你访问的是成员变量,与语句1相同效果
     8 System.out.println(num2);
     9 
    10 //function();
    11 //function2();
    12 }
    13 
    14 public static void method() {
    15 //无法从静态上下文中引用非静态 变量 num
    16 //System.out.println(num);
    17 System.out.println(num2);
    18 
    19 //无法从静态上下文中引用非静态 方法 function()
    20 //function();
    21 function2();
    22 }
    23 
    24 public void function() {
    25 
    26 }
    27 
    28 public static void function2() {
    29 
    30 }
    31 }
    32 
    33 class TeacherDemo {
    34 public static void main(String[] args) {
    35 //创建对象
    36 Teacher t = new Teacher();
    37 t.show();
    38 System.out.println("------------");
    39 t.method();
    40  }
    41 }

    12.静态变量和成员变量的区别
    所属不同
    静态变量属于类,所以也称为为类变量。
    成员变量属于对象,所以也称为实例变量(对象变量)。
    内存中位置不同
    静态变量存储于方法区的静态区。
    成员变量存储于堆内存。
    内存出现时间不同
    静态变量随着类的加载而加载,随着类的消失而消失。
    成员变量随着对象的创建而存在,随着对象的消失而消失。
    调用不同
    静态变量可以通过类名调用,也可以通过对象调用。
    成员变量只能通过对象名调用。
    13.main方法的格式讲解
    public static void main(String[] args) {...}

    • public:公共的,访问权限是最大的。由于main方法是被jvm调用,所以权限要够大。
    • static:静态的,不需要创建对象,通过类名就可以。方便jvm的调用。
    • void:因为我们曾经说过,方法的返回值是返回给调用者,而main方法是被jvm调用。你返回内容给jvm没有意义。
    • main:是一个常见的方法入口。我见过的语言都是以main作为入口。
    • String[] args:这是一个字符串数组。值去哪里了?

    这个东西到底有什么用啊?怎么给值啊?
    这个东西早期是为了接收键盘录入的数据的。
    格式是:
    java MainDemo hello world java

    例子

    1 class MainDemo {
     2   public static void main(String[] args) {
     3   //System.out.println(args); //[Ljava.lang.String;@175078b
     4   //System.out.println(args.length); //0
     5   //System.out.println(args[0]); //ArrayIndexOutOfBoundsException
     6 
     7   //接收数据后
     8   System.out.println(args); 
     9   System.out.println(args.length); 
    10   //System.out.println(args[0]); 
    11     for(int x=0; x<args.length; x++) {
    12       System.out.println(args[x]);
    13     }
    14   }
    15 }

    补充:
    private是封装的一种表现。
    思考题:构造方法中可不可以有return语句呢?
    可以。而是写成这个样子:return;

  • 相关阅读:
    jQuery实现DropDownList(MVC)
    解决MVC应用程序数据重复加载问题
    MVC应用程序使用jQuery接收Url的参数
    openstack上创建vm实例后,状态为ERROR问题解决
    分布式监控系统Zabbix--完整安装记录-批量添加主机和自动发现端口
    LInux下设置账号有效时间 以及 修改用户名(同时修改用户组名和家目录)
    Rsync+Inotify实时同步环境部署记录
    Shell+Curl监控网站页面访问状态,利用SendEmail发邮件通知
    Shell脚本字符串匹配及日常命令工具
    分布式监控系统Zabbix-3.0.3-完整安装记录(6)-微信报警部署
  • 原文地址:https://www.cnblogs.com/crazypokerk/p/9005352.html
Copyright © 2011-2022 走看看