【Java】类和对象

2023-11-06

前言

面向对象编程的特性:封装,继承,多态
在Java中,最基本的封装单元是类,一个类的定义为具有相似特征对象的一种抽象,根据类的继承,父类只定义各子类所需的属性和方法,多态是类中同一名称的行为,可以有多种不同的功能

一,类的定义

1,定义成员变量

定义格式:
[修饰符] 类型 成员变量名列表;
类中所有方法可直接访问成员变量,成员变量修饰符(public,protected,private,final,static)
例如

// 创建类
class <class_name>{  
    field;//成员属性
    method;//成员方法
}

:class为定义类的关键字,Class-name为类的名字,{}中为类的主体。
类中的元素称为:成员属性。类中的函数称为:成员方法

2,定义成员方法

定义格式:
[修饰符] 返回值类型 方法名(参数列表)
{
方法体
}
例如定义点point和基本方法:

class point {//点类
  int x =0;
  int y =0;
  public void move(int dx ,int dy)//定义移动点坐标方法
  {
   x = x + dx;
   y = y + dy;
  }

注意事项
使用 . 访问对象的字段.
“访问” 既包含读, 也包含写.
对于一个对象的字段如果没有显式设置初始值, 那么会被设置一个默认的初值

二,对象的创建和使用

1,实例化对象

用类类型创建对象的过程,称为类的实例化
1.类只是一个模型一样的东西,限定了类有哪些成员.
2. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
3. 做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东
西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间
语句格式:
类名 对象名 = new 类名(参数列表);

class Person {
    public int age;//成员属性 实例变量
    public String name;
    public String sex;
    public void eat() {//成员方法
       System.out.println("吃饭!");  
   }
    public void sleep() {
       System.out.println("睡觉!");  
   }
}
public class Main{
 public static void main(String[] args) {
        Person person = new Person();//通过new实例化对象
        person.eat();//成员方法调用需要通过对象的引用调用
        person.sleep();
        //产生对象     实例化对象
        Person person2 = new Person();
        Person person3 = new Person();
 }
}

在这里插入图片描述

2,关键字new为对象分配一片内存区域,并返回该对象的引用

比较s1和s2

Student  s1 =new Student ();
Student  s2 =new Student ();
s1 == s2;//false,比较s1,s2的地址
s1.equals(s2);//比较s1,s2的值

3,初始化对象

直接对成员变量赋初值

String name ="zhangsan";

利用构造方法初始化对象

class Student {
  int no;
  String name;
  //构造方法
  Student(int no1,String name1){
    this.no =no1;//no和name初始化
    this.name = name1;
  }

4,使用对象

格式如下:
对象名.成员变量名;
对象名.成员方法名(实参列表);

三,构造方法的定义和使用

1,基本语法

构造方法是一种特殊方法, 使用关键字new实例化新对象时会被自动调用, 用于完成初始化操作.

(1)new 执行过程

①为对象分配内存空间
②调用对象的构造方法

(2)语法规则

1.方法名称必须与类名称相同
2.构造方法没有返回值类型声明
3.每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造)

(3)注意事项

如果类中没有提供任何的构造函数,那么编译器会默认生成一个不带有参数的构造函数
若类中定义了构造方法,则默认的无参构造将不再生成.
构造方法支持重载. 规则和普通方法的重载一致

2,构造方法使用

构造方法是特殊方法,完成对象初始化
(1)若类没定义构造方法,编译器自动生成无参构造方法
(2)若自定义构造方法,系统不再生成无参构造
(3)构造方法存在重载
例如

class Person { 
 
 private String name;//实例成员变量
 private int age; 
 private String sex; 
 //默认构造函数 构造对象 
 public Person() { 
   this.name = "caocao"; 
   this.age = 10; 
   this.sex = "男"; 
 } 
 //带有3个参数的构造函数
 public Person(String name,int age,String sex) { 
   this.name = name; 
   this.age = age; 
   this.sex = sex; 
 } 
 public void show(){ 
   System.out.println("name: "+name+" age: "+age+" sex: "+sex); 
 } 
 
} 
public class Main{ 
 public static void main(String[] args) { 
    Person p1 = new Person();//调用不带参数的构造函数 如果程序没有提供会调用不带参数的构造函数
    p1.show(); 
    Person p2 = new Person("zhangfei",80,"男");//调用带有3个参数的构造函数
    p2.show(); 
 } 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Java】类和对象 的相关文章

  • Java - 因内存不足错误而关闭

    关于如何最好地处理这个问题 我听到了非常矛盾的事情 并且陷入了以下困境 OOME 会导致一个线程崩溃 但不会导致整个应用程序崩溃 我需要关闭整个应用程序 但不能 因为线程没有剩余内存 我一直认为最佳实践是让它们离开 这样 JVM 就会死掉
  • 使用 JDBC 获取 Oracle 11g 的最后插入 ID

    我是使用 Oracle 的新手 所以我将放弃之前已经回答过的内容这个问题 https stackoverflow com questions 3131064 get id of last inserted record in oracle
  • 使用 WebDriver 单击新打开的选项卡中的链接

    有人可以在这种情况下帮助我吗 场景是 有一个网页 我仅在新选项卡中打开所有指定的链接 现在我尝试单击新打开的选项卡中的任何一个链接 在下面尝试过 但它仅单击主 第一个选项卡中的一个链接 而不是在新选项卡中 new Actions drive
  • 当路径的点超出视野时,Android Canvas 不会绘制路径

    我在绘制路径时遇到了 Android Canvas 的一些问题 我的情况是 我有一个相对布局工作 如地图视图 不使用 google api 或类似的东西 我必须在该视图上绘制一条路径 canvas drawPath polyPath bor
  • HAProxy SSL终止+客户端证书验证+curl/java客户端

    我希望使用我自己的自签名证书在 HAProxy 上进行 SSL 终止 并使用我创建的客户端证书验证客户端访问 我通过以下方式创建服务器 也是 CA 证书 openssl genrsa out ca key 1024 openssl req
  • 从 MS Access 中提取 OLE 对象(Word 文档)

    我有一个 Microsoft Access 数据库 其中包含一个包含 Microsoft Word 文档的 OLE 对象字段 我试图找到代码来检索保存在 OLE 对象中的文件 以便用户可以从我的 JavaFx 应用程序中的按钮下载它 但没有
  • Logback:SizeAndTimeBasedRollingPolicy 不遵守totalSizeCap

    我正在尝试以一种方式管理我的日志记录 一旦达到总累积大小限制或达到最大历史记录限制 我最旧的存档日志文件就会被删除 当使用SizeAndTimeBasedRollingPolicy在 Logback 1 1 7 中 滚动文件追加器将继续创建
  • 为自定义驱动程序创建 GraphicsDevice

    我正在开发一个在嵌入式系统中使用 Java 的项目 我有用于屏幕和触摸输入的驱动程序 以及用于文本输入的虚拟键盘 我的屏幕驱动程序有一个Graphics2D您可以绘制的对象和repaint Rectangle 更新方法 类似地 触摸驱动器能
  • 如何检测图像是否像素化

    之前有人在 SO 上提出过这样的问题 在Python中检测像素化图像 https stackoverflow com questions 12942365 detecting a pixelated image in python还有关于q
  • org/codehaus/plexus/archiver/jar/JarArchiver(不支持的major.minor版本49.0)-Maven构建错误

    下午大家 我在尝试构建项目时收到上述错误 我很确定这与使用 Java 1 6 编译的 Maven 最新更新有关 而我们尝试构建的项目是 1 4 项目 在此之前的插件工作没有问题 因此我将以下内容添加到 POM xml 文件中以尝试强制使用现
  • Java:如何确定文件所在的驱动器类型?

    Java 是否有一种独立于平台的方法来检测文件所在的驱动器类型 基本上我有兴趣区分 硬盘 可移动驱动器 如 USB 记忆棒 和网络共享 JNI JNA 解决方案不会有帮助 可以假设 Java 7 您可以使用 Java 执行 cmd fsut
  • 如何从日期中删除毫秒、秒、分钟和小时[重复]

    这个问题在这里已经有答案了 我遇到了一个问题 我想比较两个日期 然而 我只想比较年 月 日 这就是我能想到的 private Date trim Date date Calendar calendar Calendar getInstanc
  • 寻找局部最小值

    下面的代码正确地找到了数组的局部最大值 但未能找到局部最小值 我已经进行了网络搜索 以找到找到最小值的最佳方法 并且根据这些搜索 我认为我正在使用下面的正确方法 但是 在几天的时间里多次检查每一行之后 下面的代码中有一些我仍然没有看到的错误
  • JAVA中遍历JSON数据

    我是 JSON 新手 我使用 HTTPUrlConnections 并在 JAVA 程序中获得一些响应 响应数据将类似于 data id 1 userId 1 name ABC modified 2014 12 04 created 201
  • IntelliJ 组织导入

    IntelliJ 是否具有类似于 Eclipse 中的组织导入功能 我拥有的是一个 Java 文件 其中多个类缺少导入 例子 package com test public class Foo public Map map public J
  • 如何在Java中对对象数组进行字段级别排序以进行等级比较?

    In Java Class StudentProgress String Name String Grade CTOR goes here main class main method StudentProgress arrayofObje
  • 源值 1.5 的错误已过时,将在未来版本中删除

    我使用 scala maven plugin 来编译包含 scala 和 java 代码的项目 我已经将源和目标设置为1 7 但不知道为什么maven仍然使用1 5 这是我在 pom xml 中的插件
  • 使用 Java https 上传到 Imgur v3 错误

    我目前正在尝试使用他们当前的 API v3 上传到 imgur 但是我不断收到错误 错误 javax net ssl SSLException 证书中的主机名不匹配 api imgur com imgur com OR imgur com
  • 检查应用程序是否在 Android Market 上可用

    给定 Android 应用程序 ID 包名称 如何以编程方式检查该应用程序是否在 Android Market 上可用 例如 com rovio angrybirds 可用 而 com random app ibuilt 不可用 我计划从
  • 如何使用通配符模拟泛型方法的行为

    我正在使用 EasyMock 3 2 我想基于 Spring Security 为我的部分安全系统编写一个测试 我想嘲笑Authentication http docs spring io autorepo docs spring secu

随机推荐

  • 解决choice金融终端Excel/Wps插件修复visual basic异常

    注意 如下情况无解 注意 Excel要用专业版 家庭版的Excel无法修复 WPS要用企业版 个人版的Wps无法修复 解决方法 下面是安装Office专业版的教程 进入网站https msdn itellyou cn 下载office专业版
  • Unity自定义输入方式(通过可视化面板进行输入)

    去年某个时间段做VR功能预研 利用Pico一体机做开发 当时通过Unity内置Inputfield组件实现外部输入 该组件貌似是调用系统内置输入方式 Pico一体机那个时候的输入方式简则是蛋疼得很 因为一调用该输入法就是双目模式 这就算了
  • Matlab程序设计(六)----创建函数(function)

    本部分Matlab中的函数创建非常重要 主要分为三个小部分 本部分主要参考了Matlab文件的讲述 https ww2 mathworks cn help matlab function basics html 一 函数基本知识 funct
  • Elasticsearch专栏-8.es读写性能及优化

    es读写性能及优化 写入性能 服务器资源 单机写入性能 写入性能优化 查询性能 资源占用情况 写入性能 服务器资源 资源 数值 服务器 华为 系统 centos7 9 cpu Intel Core i5 10500 CPU 3 10GHz
  • C#控制台应用程序生成10个随机数,并且保证他们不重复

    1 这个和上面那个代码不同 随机生成的10个随机数是会重复的 因为它不确定 所有我们在函数中加了一个判断函数 将重复的数去掉就可以了 using System using System Collections using System Co
  • UML建模与软件开发设计(四)——包图设计

    包图清晰地表达了包间关系 对于大型项目而言 良好的代码组织 对软件的可维护性至关重要 软件的架构设计 思路遵循由大到小 因此大型项目的结构往往从子系统 模块 包开始进行设计 与类图 Class Diagram 相比 包图 Package D
  • linux top命令查看内存及多核CPU的使用讲述

    查看多核CPU命令 mpstat P ALL 和 sar P ALL 说明 sar P ALL gt aaa txt 重定向输出内容到文件 aaa txt top命令 经常用来监控linux的系统状况 比如cpu 内存的使用 程序员基本都知
  • elasticsearch启动报错

    系统 操作centos7 虚拟机 bin elasticsearch 启动报错 es1 es1 software elasticsearch 6 3 1 bin elasticsearch Exception in thread main
  • 误差函数erf

    1 erf误差函数介绍 erf 是误差函数 它是高斯概率密度函数的积分 性质 2 erf误差函数在matlab中实现 erf函数在matlab里面可以直接作为内置函数使用 erf 0 与下面式子等价 syms s f f exp s 2 e
  • AcWing 3375. 成绩排序

    题目 题目链接3375 成绩排序 思路 思路要求稳定排序或者特判的快排 写法一 写两个sort中的比较函数的参数cmp 写法二 直接在结构体中进行比较 写法三 归并排序 代码1 include
  • Win11 Vmware 16 Pro 启动报错 ‘0xc000007b‘

    一段时间没有使用Vmware 打开突然报错 0xc000007b 可能是因为安装了其他软件导致C 库被改变 原因 C 库改变 解决方法 windows打开控制面板 然后打开程序 卸载程序 图中左下角 然后找到图中两个C 程序 分别右键 卸载
  • YoloV8改进策略:将FasterNet与YoloV8深度融合,打造更快更强的检测网络

    文章目录 数据集 官方模型的成绩 改进一 改进二 改进三 总结 数据集 本来想选COCO数据集 但是我觉得训练相同的epoch是一种不公平的对比 因为预训练本来就是COCO数据集上得来的 这样对官方的模型有利 而我改动了模型的结构 导致了没
  • 【重点突破】—— 百度地图在React单页面应用中的使用

    重点突破 百度地图在React单页面应用中的使用 前言 百度地图是网页中使用地图的常用第三方工具 这里结合React项目中学到的应用场景总结一些使用要点 一 在网页中嵌入百度地图 搜百度地图开放平台 注册百度开发者账号 控制台 查看应用 创
  • QT的使用(初期笔记)

    signal 发送的信号 signals 自定义信号 返回值是void 只需声明 不需实现 可以有参数 可以重载 按钮 1 inherited 继承 from QAbstractButton 1 clicked bool checked f
  • idea2021版本新建web项目(详细教程)

    打开idea右上角的文件 新建项目 选中java模块 下一步 取名 下一步 打开后是个空白 到这一步 右键选中untitled打开添加框架支持 选中web应用程序 一定要勾选创建web xml 然后点击确定 接下来 找到右上角的添加配置 点
  • matplotlib绘图横坐标或纵坐标文本显示不全

    import matplotlib pyplot as plt x 1 2 3 4 y 1 4 9 6 labels Frogs Hogs Bogs Slogs plt plot x y You can specify a rotation
  • unity使用Tcp/UDP协议网络通信实现(Socket简单应用)

    一 TCP协议 服务器端 1 打开vs 创建一个c 的控制台应用程序 代码如下 记得把ip换成自己电脑ip using System using System Collections Generic using System Linq us
  • INS/GNSS组合导航(七)角速度坐标系变换与欧拉角转换

    注意 角速度与角速度率有严格区别 反映在以下两点 正交的三个角速度 角速度矢量 与欧拉角速率之间的关系如下 欧拉角速率并不是纯粹的正交矢量 而是一个与旋转顺序相关而且非正交的三个矢量 积分欧拉角速率得到的是欧拉角的大小 又称卡丹角 积分角速
  • 股票预测_机器学习预测股票

    2 机器学习技术综述 集成多种人工智能系统的机器学习技术尝试通过对历史数据的学习提取数据模式 这一过程被称为训练或学习 其目的在于实现后续基于新数据的预测 Xiao Xiao Lu and Wang 2013 pp 99 100 使用机器学
  • 【Java】类和对象

    前言 面向对象编程的特性 封装 继承 多态 在Java中 最基本的封装单元是类 一个类的定义为具有相似特征对象的一种抽象 根据类的继承 父类只定义各子类所需的属性和方法 多态是类中同一名称的行为 可以有多种不同的功能 文章目录 前言 一 类