美文网首页
Java 面向对象-类和对象

Java 面向对象-类和对象

作者: 持续5年输出bug | 来源:发表于2021-08-19 19:51 被阅读0次

    一、类和对象的概念:

    对象:是类的实例化表现,有状态和行为;
    :是一个模版,描述一类对象的行为和状态,用来确定对象将会拥有何种属性和方法

    从计算机世界角度看所有的信息都是数据,所以也可以理解对象是一种特定的数据类型,而类就是对象的类型。

    一个类可以拥有多个方法,也可包含以下类型的变量:
    在下面的例子中:test()、Demo()(无参构造方法)都是 Demo 类的方法。

    • 局部变量 在方法、构造方法、语句块中定义的变量叫做局部变量,局部变量声明和初始化都在方法(语句块)中,方法(语句块)结束后,变量就自动销毁。
    // java 代码示例
    public class Demo {
       public void Test(){
           String name= "方法中的局部变量"; // 局部变量,定义在 test() (普通)方法中
       }
    
        public Demo(){
           String name="构造方法中的局部变量"; // 局部变量,定义在(无参)构造方法 Demo 中
        }
    
        {
          String name="代码块中的局部变量"; 
         // System.out.println("我是一段代码块")
        }
    }
    
    • 成员变量 定义在类中,方法体之外的变量,成员变量可以被类中的方法、构造方法和特定类的语句块访问,成员变量在创建对象时实例化。

    注:类的5种成员:成员变量、方法、构造器、初始化块、内部类(包括接口、枚举)

    // java 代码示例
    public class Demo {
     String name; // 成员变量,定义在 test() 方法体之外,在 Demo 这个 class 中
       public void Test(){
          // 代码
       }
    }
    
    • 类变量 类变量也声明在类中,方法体之外,但是必须声明为 static 类型
    // java 代码示例
    public class Demo {
    static name ch='c';; // 类变量,定义在 test() 方法体之外,在 Demo 这个 class 中且类型是 static
       public void Test(){
          // 代码
       }
    }
    

    二、创建类和实例化类:

    包名的规范:英文字母小写,域名倒叙+功能模块名。如:com.company.demo
    单一职责原则:一个类有且只有一个引起功能变化的原因,即一个类只负责一个功能,一个类中承载的功能越多,被复用的可能性就越低,耦合性就越差。

    package com.company.demo; // 包名 必须在第一行
    // java 代码示例
    public class Demo{
    String name; // 成员属性
      public void name(){ // 成员方法
        // 代码
      }
    }
    
    // 注意 根据单一职责(功能)原则 前后两段代码不是在同一个类中的
    package com.company.demo; // 包名 必须在第一行
    
    public class DemoTest(){ // 这个类名叫做 DemoTest
         public static void main(String[] args){ //主方法
            Demo demo = new Demo(); // 实例化对象
          }
    }
    
    

    以上代码 Demo demo = new Demo(); 实际上是对象创建的过程,包括声明和实例化对象两个部分:
    1.Demo demo 声明对象,这个过程是在栈中开辟了一块区域 叫做 demo
    2.new Demo() 实例化对象 这个过程是在内存的堆空间开辟了一块空间完成了对象具体的初始化
    3.最后通过 = 将两者进行关联,即将堆空间的地址放到了栈demo里。
    注意:java中每次实例化对象即使实例化完全相同 都在是堆中开辟一块全新的区域。即修改其中任何一个对象的属性值,不会影响另外一个的属性值,代码如下:

    package com.company.demo;
    public class Demo {
        String name ;
    }
    
    package com.company.demo;
    public class DemoTest {
        public  static  void main(String [] args){
            Demo demo1 = new Demo();
            demo1.name="第一个name";
            System.out.println(demo1.name);
    
            System.out.println("---------------");
            Demo demo2 = new Demo();
            demo2.name="第二个name";
            System.out.println(demo2.name);
        }
    }
          打印结果如下
          第一个name
          ---------------
          第二个name
    
    

    当修改demo2.name的值时,demo1.name并不会一起变化

    package com.company.demo;
    public class DemoTest {
        public  static  void main(String [] args){
            Demo demo1 = new Demo();
            demo1.name="第一个name";
            System.out.println(demo1.name);
    
            System.out.println("---------------");
            Demo demo2 = new Demo();
            demo2.name="第二个name,但是我改变了";
            System.out.println(demo2.name);
        }
    }
          // 打印结果如下:
          第一个name
          ---------------
          第二个name,但是我改变了
    
          // 如果要让demo2的值等于demo1,直接赋值即可
           Demo demo1 = new Demo();
           Demo demo2 = demo1;
    

    相关文章

      网友评论

          本文标题:Java 面向对象-类和对象

          本文链接:https://www.haomeiwen.com/subject/xsyabltx.html