浅谈JAVA类与对象

举报
运气男孩 发表于 2021/11/25 23:46:33 2021/11/25
【摘要】 类与对象先来用一张图来说说类与对象包括什么:类:类的定义、包、变量、权限修饰符、方法重载、参数传值、this关键字对象:对象的定义、对象的创建格式及区别、对象属性和行为的访问、对象的引用比较和销毁类类是一组具有相同属性和行为的对象的抽象举例看看:public class Heroes { private String name; private String role; s...

类与对象

先来用一张图来说说类与对象包括什么:

:类的定义、包、变量、权限修饰符、方法重载、参数传值、this关键字

对象:对象的定义、对象的创建格式及区别、对象属性和行为的访问、对象的引用比较和销毁

是一组具有相同属性和行为的对象的抽象

举例看看:

public class Heroes {
    private String name;
    private String role;
    static int roleId;
    final static double PI = 3.1415926;
    public Heroes(String name, String role) {
        this.name = name;
        this.role = role;
    }
    public Heroes() {
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getRole() {
        return role;
    }
    public void setRole(String role) {
        this.role = role;
    }
    public void fight(String message) {
        int id = 0;
        System.out.println("fight..." + id + ":" + message);
    }
    public static void bloodReturning(String home) {
        System.out.println("回血:" + home);
    }
}

        Java 中使用 package 语句定义包,package 语句应该放在源文件的第一行,在每个源文件中只能有一个包定义语句,并且 package 语句适用于所有类型(类、接口、枚举和注释)的文件。定义包语法格式如下: 

包的命名

Java包的命名规则如下:

  • 包名全部由小写字母(多个单词也全部小写)
  • 如果包名包含多个层次,每个层次用“.”分割
  • 包名一般由倒置的域名开头,比如com. baidu,不要有www
  • 自定义包不能以 java开头

包的使用

  • 在要引用的类名前带上包名作为修饰符
    com.dingli.edu.Person person = new com.dingli.edu.Person();
  • 在文件开头使用import引用包中的类
    import com.dingli.edu.Person;
  • 在文件前使用import引用整个包
    import com.dingli.edu.*;

这里列举一下java文档里的常用包

说明

java.lang

Java 的核心类库,包含运行 Java 程序必不可少的系统类,如基本数据类型、基本数学函数、 字符串处理、异常处理和线程类等,系统默认加载这个包

java.io

Java 语言的标准输入/输出类库,如基本输入/输出流、文件输入/输出、过滤输入/输出流等

java.util

包含如处理时间的 Date 类,处理动态数组的 Vector 类,以及 Stack 和 HashTable 

java.awt

构建图形用户界面(GUI)的类库,低级绘图操作 Graphics 类、图形界面组件和布局管理 (如 Checkbox 类、Container 类、LayoutManger 接口等),以及用户界面交互控制和事 件响应(如 Event 类)

java.awt.image

处理和操纵来自网上的图片的 Java 工具类库

java.wat.peer

很少在程序中直接用到,使得同一个 Java 程序在不同的软硬件平台上运行

java.net

实现网络功能的类库有 Socket 类、ServerSocket 

java.lang.reflect

提供用于反射对象的工具

java.util.zip

实现文件压缩功能

java.awt.datatransfer

处理数据传输的工具类,包括剪贴板、字符串发送器等

java.sql

实现 JDBC 的类库

java.rmi

提供远程连接与载入的支持

java. security

提供安全性方面的有关支持

成员变量、局部变量、静态变量的区别 

注意事项:

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


成员变量

局部变量

静态变量

定义的位置

类中,方法外

方法中,或者方法的形式参数

在类中,方法外

初始化值

有默认初始化值

,先定义,赋值后才能使用

有默认初始化值

调用方式

对象调用


对象调用,类名调用

存储位置

堆中

栈中

方法区

生命周期

与对象共存亡

与方法共存亡

与类共存亡

别名

实例变量


类变量

权限修饰符区别 


public 

Protected

Default

private

同一个类

同一个包


子类


不同包



方法重载 

         就是在同一个类中,方法的名字相同,参数列表不同(顺序不同、个数不同、类型不同),实现相似的功能,与修饰符、返回值类型无关。我们会觉得方法调用的时候就像调用一个方法一样 。

       看看下面的第一个sum()静态方法,里面的形参是int类型; 第二个重载就是都变了方法,形参是double类型;第三个是混合的参数类型。

public class OverLoad {
    public static void main(String[] args) {
        sum(5, 8);
        sum(4.5, 6.5);
        sum(1, 5, 2.3);
    }
    public static void sum(int a, int b) {
        int sum = a + b;
        System.out.println(sum);
    }
    public static void sum(double c, double d) {
        double sum = c + d;
        System.out.println(sum);
    }
    public static void sum(int e, int f, double g) {
        double sum = e + f + g;
        System.out.println(sum);
    }
}

参数传值 

         8大基本数据类型,参数传递过程采用值拷贝的方式 

public class Demo {
    public static void main(String[] args) {
        int a = 10;
        change(a);
        System.out.println("main方法中a的值:" + a);
    }

    public static void change(int a) {
        a = a * 2;
        System.out.println("change方法中a的值:" + a);
    }

}

参数类型为引用类型,参数传递的过程采用引用拷贝的方式 

public class Demo {
    public static void main(String[] args) {
        Test test = new Test(10);
        change(test);
        System.out.println("main方法中a的值:" + test.a);
    }

    public static void change(Test test) {
        test.a = test.a * 2;
        System.out.println("change方法中a的值:" + test.a);
    }

}

class Test {
    public int a;
    public Test(int a) {
        this.a = a;
    }
}

this关键字 

关键字this表示当前对象,引用对象自身。 可以用于访问实例的数据域, 尤其是实例变量和局部变量同名时,进行分辨。除此之外,可以在构造方法内部调用同一个类的其他构造方法 。

public class ThisTest {
    public String name;
    public int age;
    public ThisTest(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void say() {
        String name = “tom";
        System.out.println("name:" + this.name);
    }
    public static void main(String[] args) {
        ThisTest thisTest = new ThisTest("1810", 20);
        thisTest.say();
    }
}

对象

对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象 

对象的创建格式

格式一:声明并实例化对象
          类名称对象名称=new类名称();

格式二:先声明对象,然后实例化对象
              类名称对象名称=null;
               对象名称=new类名称();

   引用数据类型与基本数据类型最大的不同在于:引用数据类型需要内存的分配和使用。所以,关键字new的主要功能就是分配内存空间,也就是说,只要使用引用数据类型,就要使用关键字new来分配内存空间 

两种对象创建格式的区别从内存角度来分析
(1)堆内存(heap):保存对象的属性内容。堆内存需要用new关键字来分配空间
(2)栈内存(stack):保存的是堆内存的地址

访问对象的属性和行为 

public class Demo {
    int id = 12;

    public Demo() {
    }
    public void changeId() {
        id *= 2;
        System.out.println(id);
    }
    public static void main(String[] args) {
        Demo demo1 = new Demo();
        Demo demo2 = new Demo();

        demo2.id = 20;

        System.out.println("demo1的属性值:" + demo1.id);
        demo1.changeId();

        System.out.println("demo2的属性值:" + demo2.id);
        demo2.changeId();
    }
}

对象的引用、比较和销毁 

对象引用语法格式:类名引用对象名称
对象的比较:1、==运算符2、equals()方法
对象的销毁:对象的销毁利用的是Java中的垃圾回收机制

(1)对象引用超过其作用范围
(2)将对象赋值为null

关于JAVA类与对象大概就介绍到这里了,感恩能与大家在华为云遇见!希望能与大家一起在华为云社区共同成长。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。