JavaSE:5、类与对象

news2024/12/23 10:39:24

1、类的定义与对象的创建

 定义属性

创建对象

2、对象的使用

使用一个变量来指代某个对象,只不过引用类型的变量,存储的是对象的引用,而不是对象本身
public class Main {
    public static  void main(String [] argv)
    {
      Person p1=new Person();
      Person p2=p1;
      Person p3=new Person();
      //等号判断两个对象存的是不是同一个对象的引用
      System.out.println(p1==p2);  //true
      System.out.println(p1==p3);   //false
    }
}
类使用的都是引用类型。
可以由此访问对象的属性,不同对象修改不互相影响
public class Main {
    public static  void main(String [] argv)
    {
      Person p1=new Person();
      Person p2=p1;
      Person p3=new Person();
       p1.name="1";
       p2.name="2";
       p3.name="3";

      System.out.println(p1.name);  //2
      System.out.println(p3.name);   //3
    }
}
引用类型变量初始可以为空,但调用成员时会运行异常
//空指针异常
public class Main {
    public static  void main(String [] argv)
    {
      Person p1=null;
     p1.name="a";
      System.out.println(p1.name);
    //NullPointerException: Cannot assign field "name" because "p1" is null
        //	at Main.main(Main.java:5)
    }
}
对象建立但未初始化,引用类型为null,基本类型为0
public class Main {
    public static  void main(String [] argv)
    {
      Person p1=new Person();
      System.out.println(p1.name);  //null
    System.out.println(p1.age);    //0
    }
}

3、方法创建与使用

返回值类型 方法名称() { 方法体... } 
public class Person {
    String name;
    int age;
    void hello(String n,int a)
    {
        name=n;
        age=a;
        System.out.println("我的名字:"+n+",我的年龄:"+a);
        return ;
      //  System.out.println();   ERROR ,不可达语句
    }
}
public class Main {
    public static  void main(String [] argv)
    {
      Person p1=new Person();
      p1.hello("小明",18);
      //  我的名字:小明,我的年龄:18
    }
}
return 语句后面为不可达语句,除void外,其它返回类型必须要return。
函数参数传递为开辟新空间拷贝,基本类型拷贝值,引用类型拷贝地址
public class Main {
    public static  void main(String [] argv)
    {
      Person p1=new Person();
      String  a="8",b="6";
      p1.swap(a,b);
      System.out.println(a+" "+b);//8 6
        //因为引用传递本质是开辟新空间拷贝地址,
        //而我们没法从指针修改String的对象
      p1.name="小红";
      p1.test(p1);
      System.out.println(p1.name);//小明
        //此处test通过指针找到该对象存的位置直接修改该对象
        //所以能影响到外部
    }
}
public class Person {
    String name;
    int age;
    void swap(String a,String b)
    {
        String t=a;
        a=b;
        b=t;
    }
    void test(Person p)
    {
        p.name="小明";
    }
}

4、方法进阶使用

使用this来处理重名情况
public class Person {
    String name;
    int age;

    void test(String name)
    {
        this.name=name;
    }
}
public class Main {
    public static  void main(String [] argv)
    {
      Person p1=new Person();

      p1.name="小红";
      p1.test("小明");
      System.out.println(p1.name);//小明
    }
}
方法重载:根据参数类型,数量来区分,不依靠返回类型区分
方法之间可以相互调用
public class Person {
    String name;
    int age;

    int add(int a,int b)
    {
        System.out.println("intadd");
        return a+b;
    }
  //  double add(int a,int b)   ERROR
    double add(double a,double b)
    {
        System.out.println("doubleadd");
        return a+b;
    }
}
public class Main {
    public static  void main(String [] argv)
    {
      Person p1=new Person();
     int a=3,b=5;
     System.out.println(p1.add(a,b));
      //  intadd
      //  8
     double c=9.0,d=35.6;
     System.out.println(p1.add(c,d));
     //   doubleadd
     //   44.6
    }
}

5、构造方法

构造方法不需要填写返回值,并且方法名称与类名相同,默认情况下每个类都会自带一个没有任何参数的无参构造方法,在对象建立的时候会执行
在我们自己定义一个构造方法之后,会覆盖掉默认的那一个无参构造方法,除非我们手动重载一个无参构造
构造对象顺序:成员变量初始化和代码块,构造函数
前者从上到下执行,若代码块调用了成员变量,而成员变量为初始化则会报错
public class Person {
 //   {
   //     System.out.println(name);
        //无法在定义字段 'name' 之前读取它的值
 //   }
    Person(String name,int age)
    {
        this.name=name;
        this.age=age;
        System.out.println("我是构造函数");
    }
    {
        System.out.println("我是代码块2");
    }
    String name="name";
    int age=-1;

    {
        System.out.println("名字:"+name);
    }
}
public class Main {
    public static  void main(String [] argv)
    {
      Person p1=new Person("小红",18);
       // 我是代码块2
       // 名字:name
       // 我是构造函数
    }
}

6、静态变量与静态方法

静态的内容,我们可以理解为是属于这个类的,也可以理解为是所有对象共享的内容。
有静态变量,静态代码块,静态函数
创建对象执行顺序:静态变量和代码块、变量和代码块、构造函数
前两者分别从上往下执行
可以直接通过类调用静态函数和变量
public class Person {
   // static {
     //   System.out.println(str);
       // 无法在定义字段 'str' 之前读取它的值
   // }
    {
        System.out.println(str);
    }
    Person(String name,int age)
    {
        this.name=name;
        this.age=age;
        System.out.println("我是构造函数");
    }

    {
        System.out.println("我是代码块2");
    }

    String name="name";
    int age=-1;
     static String  str;

    static void test()
    {
        System.out.println("我是静态函数");
    }
    static
    {
        System.out.println("我是静态代码块");
    }
}
public class Main {
    public static  void main(String [] argv)
    {
      Person p1=new Person("小红",18);
    Person.test();
    /*
我是静态代码块
null
我是代码块2
我是构造函数
我是静态函数
     */
    }
}
静态方法无法使用this关键字,且只能使用类的静态变量
我们在Java中使用一个类之前,而是在需要时才会去加载(优化)一般遇到以下情况时才会会加载类
  • 访问类的静态变量,或者为静态变量赋值
  • new 创建类的实例(隐式加载)
  • 调用类的静态方法
  • 子类初始化时
还有一些情况在反射那部分会讲到 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2134874.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle发送邮件功能:配置自动化发信指南?

Oracle发送邮件服务设置方法?怎么用Oracle数据库发信? Oracle数据库作为企业级应用的核心,其内置的发送邮件功能为企业提供了强大的自动化工具。AokSend将详细介绍如何配置Oracle发送邮件功能,以实现自动化发信,从而提…

C和指针:指针

内存和地址 程序视角看内存是一个大的字节数组,每个字节包含8个位,可以存储无符号值0至255,或有符号值-128至127。 多个字节可以合成一个字,许多机器以字为单位存储整数,每个字一般由2个或4个字节组成。 由于它们包含了更多的位&…

react native(expo)多语言适配

项目基于 expo框架 开发。请先配置好 expo 开发环境 1.引入i18n-js npx expo install i18n-js 2.新建languages文件夹,其中包括英文、中文等语种目录。结构如下: *.json文件为语种翻译后的json键值对,用于UI中引用; { "appName&q…

【C语言】(指针系列3)数组指针+函数指针+typedef+函数数组指针+转移表

前言:前言:开始之前先感谢一位大佬,清风~徐~来-CSDN博客,由于是时间久远,博主指针的系列忘的差不多了,所以有顺序部分借鉴了该播主的,同时也加入了博主自己的理解,有些地方如果解释的…

MySQL语句案例编写复习

先看我的表数据和结构 1.查询年龄为16,17,18,19岁的女性员工信息。 select * from emp where gender 女 and age in(16,17,18,19); 2.查询性别为 男 ,并且年龄在 20-40 岁(含)以内的姓名为三个字的员工。 select * from emp where gender 男 and age between …

猫罐头多久喂一次?营养健康的罐头推荐

一.猫罐头多久喂一次 猫咪长期只食用干粮,容易饮水不足,从而引发上尿道或膀胱结石、堵塞等问题,所以最好每周喂至少2个猫罐头,帮助猫咪补充水分。如果条件允许,全罐喂养,每天都给猫咪吃猫罐头是…

车机中 Android Audio 音频常见问题分析方法实践小结

文章目录 前言1. 无声2. 断音3. 杂音4. 延迟播放5. 焦点问题6. 无声问题(连上 BT )其他完善中…… 前言 本文主要总结了一下车机开发中遇到的 Audio 有关的问题,同时参考网上的一案例,由于Audio 模块出现音频问题的场景很多,对每一个出现的问…

Blender渲染太慢怎么办?blender云渲染已开启

动画行业蓬勃发展,动画制作软件亦持续推陈出新,当制作平台日益丰富,创作难度降低,创作效率提升,如何高效完成复杂动画的渲染就成了从业者更关心的问题。 云渲染技术的出现,无疑为动画制作者提供了前所未有…

家庭理财管理系统

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 家庭理财管理系统拥有多种角色,可以自行设置权限和用户等,主要功能有: 收入管理、支付管理、资产管理、负债详情、统计报表、家庭成员管理、用户管理等…

JavaSE - 易错题集 - 006

1. 哪个正确 A abstract类只能用来派生子类,不能用来创建abstract类的对象。 B final类不但可以用来派生子类,也可以用来创建final类的对象。 C abstract不能与final同时修饰一个类。 D abstract类定义中可以没有abstract方法。 正确答案&#xff1…

决策树算法上篇

决策树概述 决策树是属于有监督机器学习的一种,起源非常早,符合直觉并且非常直观,模仿人类做决策的过程,早期人工智能模型中有很多应用,现在更多的是使用基于决策树的一些集成学习的算法。 示例一: 上表根据…

1.C++中程序的基本结构

在教孩子的学习过程中,使用的开发IDE为小熊猫Dev-C 6.7.5版本,以后的复杂截图,基本上都是基于此版本进行的,同时在适当的时候,录制视频也会基于此版本来完成。 以下为一个最基本的C程序 int main() {// 程序主体retur…

无痛生娃,00后当妈啦

姐妹们,你们家开始催婚了吗?我是00后,大学也才毕业一年啊,我妈已经开始给我物色对象,过年让我去相亲了!大学的时候不让谈,说怕异地以后感情不稳定,结果呢,一毕业要我结婚…

频域滤波为什么使用psf2otf函数?线性卷积和循环卷积等效的条件

线性卷积和循环卷积是本质不同的运算。然而,在某些条件下,线性卷积和循环卷积是等效的。建立这种等效关系具有重要意义。对于两个向量 x 和 y,循环卷积等于二者的离散傅里叶变换 (DFT) 之积的逆 DFT 变换。 禹晶、肖创柏、廖庆敏《数字图像处…

基于python+django+mysql+Nanodet检测模型的水稻虫害检测系统

博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…

『功能项目』项目优化 - 框架加载资源【41】

我们打开上一篇40播放动画时禁止点击移动的项目, 本章要做的事情是搭建一个资源加载框架,让UI界面,人物模型以及场景都存放在资源文件夹中在运行时加载出来 首先在资源商店加载资源 将怪物模型放置场景中 将普通管线模型切换成URP 重命名为…

重学SpringBoot3-集成RocketMQ(二)

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成RocketMQ(二) 1. 基础概念2. 准备工作3. 实现事务消息的生产者4. 事务监听器实现5. 消费者示例6. 发送事务消息7. 测试7.1 模…

rust学习——关联类型

什么是关联类型 关联类型是Rust中一种特殊的泛型抽象机制。在trait中,可以定义一个或多个关联类型,这些关联类型与trait的实现类型相关联。关联类型允许我们在trait中使用泛型,但不需要提前指定具体的类型。 不使用关联类型存在的问题 tra…

AI生成头像表情包,一次十分钟,就能实现月入过万的玩法,无脑操作

今天给大家带来的项目是AI生成表情包和头像,这个项目对于我们做ip来说是真心不错,就比如我这个头像。 为什么说每天只需要10分钟呢,那么我们继续往下看。 "项目介绍 这个项目的核心其实就是使用AI生成表情包或者说生成头像&#xff0c…

华为HCIA、HCIP和HCIE认证考试明细

华为认证体系包括三个主要等级:HCIA(华为认证ICT助理)、HCIP(华为认证ICT高级工程师)和HCIE(华为认证ICT专家)。每个等级的认证都有其特定的考试内容和费用。 HCIA(华为认证ICT助理…