【Java语言】类和对象

是用来对一个对象进行描述的,主要描述这个对象哪些属性。

类需要class进行修饰,一个Java文件中可以存在多个类,但是只能存在一个public类且必须与Java文件名相同。eg:有一个Demo.Java文件,在文件中只能存在public class Demo{},但是可以有多个class ...;下面是构建的一个学生类:

类的实例化

类的实例化 就是上面这个图中创建的s这个对象,用类类型创建对象的过程;

  • new 关键字用于创建一个对象的实例.
  • 使用 . 来访问对象中的属性和方法.
  • 同一个类可以创建对个实例.

类里面放着成员变量、成员方法、构造方法 等 ,都需要关键字进行修饰(public、private、default、protect);

  • 成员变量:描述类的属性;在没有赋值的情况下,它有默认的初值
  1. 整型默认为0,字符串(引用变量)默认null;
  2. 字符型默认"\u0000";
  3. 布尔类型默认flase;
  4. double型默认0.0,float型默认0.0f;
  • 成员方法:描述类的功能
  1. 方法中 的创建的变量都局部变量必须都要初始化否则会出现编译错误;
  • 构造方法: 特殊的成员方法
  1. 构造方法必须与类名一致,在创建实例对象是就调用了构造方法,并且在s这个对象中只能调用一次;
  2. 没有返回类型,void也不行;
  3. 参数没有强制要求根据实例对象的需求而实现,如果有参数可以用this调用;eg:this.a = a
  4. 构造方法可以多个同时出现,必须满足参数个数不一样 <==> 方法重载

this引用

this引用指向当前对象(成员方法运行时调用该成员方法的对象); eg:创建一个s,用s.调用构造方法则构造方法中的this.age = age中的this .age指的就是s这个实例对象的年龄,可以说this等价于s;

这样的目的就是万一存在实例对象的成员变量与构造方法的变量相同时,区分更好确定实例对象的成员变量 ;

封装

面向对象程序的三大类:封装、继承、多态。现在主要讲讲封装,封装就是将数据和操作数的方法进行结合·,隐藏对象的属性和方法。

在Java中,有自带包和自定义包;

如果使用自带包中的类就需要import语句导入包,可能有时候不同的包中会出现相同的类名,这时就需要详细的写出类名。

自定义包就是在文件最上方加上一个package语句指定代码在哪个包中,如果没有package语句就可能放在一个默认的包中(src);写包名的时候可以com.+域名+.+包名;创建完成后就可以新建类了;

在包中使用关键字也需要注意(前面说明关键字的用法)。

static

static不能修饰局部变量 (方法中的变量) ,能修饰成员变量、成员方法等;被static修饰的成员称为静态成员,静态成员都是类成员,不属于某个具体对象,所以在访问该静态成员时一般通过类名访问,也可以通过对象访问(就是一般不建议)。

静态成员变量

被static修饰的成员变量被称为静态成员变量;静态成员变量的特点:

  • 类创建,它也创建;静态成员变量是最先创建定义的,所以在方法中定义静态变量的话,在静态成员变量中找不到事先定义的变量,就会出现编译错误;
  • 静态成员变量是所有对象共享的,所以每个对象引用后都会保存其最终的值,而且它都是存放在方法区;
  • 当类结束时,它也随着类销毁而销毁;

静态方法

被static修饰的成员方法被称为静态方法;静态方法的特点:

  • 在静态方法中不能直接访问非静态成员变量,静态成员都是最先创建的,如果先前访问就会出现变量未定义的问题;
  • 静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this引用

代码块

使用 {} 定义的一段代码称为代码块。代码块分为普通、构造、静态和同步 代码块(暂时不说同步)。执行顺序先是静态代码块,然后构造代码块,载然后构造方法

普通代码块

直接用{}定义的代码块就是普通代码块;

构造代码块

一般用于初始化实例成员变量,也叫实例代码块; 只有在创建对象的时候才会使用;

静态代码块

使用static定义的代码块叫静态代码块; 静态代码块不管调用多少次对象就只能执行一次而且也是静态成员变量创建后就执行。总而言之静态成员都是最先创建的相比其他的代码块;

打印对象

打印对象可以不用通过成员方法调用,利用toString可以通过对象直接打印。

相关推荐
NG4776 分钟前
【软件设计与体系结构】-策略设计模式
java·设计模式·软件工程
程序员天天困40 分钟前
优雅记录操作日志:从注解到 SpEL 的全链路实践与开源方案对比
java·后端
战血石LoveYY1 小时前
Integer类型超限,导致数据异常
java·算法
乐观的Terry2 小时前
1、为什么要自己造发布系统
java·spring boot·后端·spring cloud·架构
兰令水3 小时前
hot100【acm版】【2026.7.13打卡-java版本】
java·开发语言·数据结构·算法·leetcode·面试
名字还没想好☜3 小时前
用 Redis + Redisson 实现分布式锁:从踩坑到生产可用
java·redis·分布式·junit·分布式锁·redisson
谙忆3 小时前
图片CDN与边缘优化实战:缓存策略、图片处理型CDN与动态裁剪
java·spring·缓存
ltqvibe3 小时前
怎么让本体语义变成可执行的智能体
java·人工智能·本体语义
javajenius4 小时前
Masslynx 4.1安装包免费下载及详细安装教程
java·服务器·前端·其他
程序员吕洞宾4 小时前
开源多维表格SmartTable V1.6.1:工作流画布,让自动化工作流配置更直观、更方便
java·开源·自动化