java-类和对象

1.面向对象

1.1 区分面向对象与面向过程

举个例子:

在传统的洗衣服过程中,需要经历防水,放衣服,放洗衣粉,搓洗,换水......多个步骤,每个过程都是不可或缺的,关注的是过程.

而现在的洗衣服过程,就需要我们把衣服,洗衣粉放入洗衣机,启动洗衣机即可,并不需要关注洗衣机是如何运行的(即不需要关注洗衣过程).整个过程主要是:人,洗衣粉,衣服,洗衣机四个对象之间交互完成的.

2.类的定义和使用

2.1 类的定义格式

①需要用到class关键字

②类名采用大驼峰定义

③成员前写法统一为public

④public修饰的类必须要与文件名相同

⑤main方法所在的类一般使用public修饰

public class PetDog {public String name;public String color;public int age;public void barks(){System.out.println(name+ ":汪汪汪");}public void wag(){System.out.println(name+ ":摇尾巴");}
}

其中,属性称为类的成员变量,功能称为类的成员方法.

3.类的实例化

3.1 概念

  • 之前我们使用int,double来定义类型,而定义了一个类,就相当于定义了一种新的类型,同int等类似,而这些类可以定义实例(对象).
  • 用类类型创建对象的过程,成为类的实例化.Java中采用new关键字,配合类名来实例化对象.
public class PetDog {public String name;public String color;public int age;public void barks(){System.out.println(name+ ":汪汪汪");}public void wag(){System.out.println(name+ ":摇尾巴");}public static void main(String[] args) {PetDog petDog = new PetDog();petDog.name = "xxx";petDog.color = "黄色";petDog.age = 10;petDog.barks();petDog.wag();}
}

注意:同一个类可以创建多个实例.

4.this引用

4.1 引入

先看此代码:

public class Date {public int year;public int month;public int day;public void setDay(int y, int m, int d){year = y;month = m;day = d;}public void printDate(){System.out.println(year+"/"+month+"/"+day);}public static void main(String[] args) {Date d1 = new Date();Date d2 = new Date();Date d3 = new Date();d1.setDay(2020,4,7);d2.setDay(2021,6,8);d3.setDay(2022,1,2);d1.printDate();d2.printDate();d3.printDate();}
}

结果为:

思考:

①如果形参名和成名变量名相同呢?

此时并不会给成员变量赋值,而是形参赋给了形参.

②三个对象都在调用setDate和printDate函数,但是两个函数中并没有任何有关对象的说明,那么这两个函数如何知道设置和打印的是哪个对象的数据呢?

4.2 this引用的使用

this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过改引用去访问.

注意:

①this只能在成员方法中使用

②在成员方法中,this只能引用当前对象,不能再引用其它对象

5.对象的构造及初始化

5.1 初始化对象

我们都知道,在方法内部定义个局部变量式,必须要初始化,否则编译失败:

如果是对象:

那么我们思考:

①每次对象创建好后调用方法设置具体日期,很麻烦,那么对象该如何初始化

②局部变量必须初始化才能使用,为什么字段声明之后没有给值就可以使用?

5.2 构造方法

①构造方法的作用是对对象中的成员进行初始化,并不负责为对象开辟空间.

②名字必须与类名相同,没有返回值类型,void也不行

③一般情况下用public修饰

④在创建对象时,由编译器自动调用,在整个对象的生命周期内只调用一次

⑤构造方法可以重载(名字相同,参数列表不同)

⑥当然,如果用户没有显示定义,编译器默认生成无参构造方法,一旦用户定义,编译器则不再生成

⑦在构造方法中,可以通过this调用其它构造方法简化代码,在无参构造方法中通过this调用带有三个参数的构造方法

⑧不能形成环

5.3 默认初始化

思考:为什么局部变量在使用时必须初始化,而成员变量不用呢?

这是因为对象空间被申请好之后,对象中包含的成员以及设置好了初始值.

5.4 就地初始化

在声明成员变量时,就直接给出初始值

这种方法没什么作用,之后还要进行赋值......

6. static成员

6.1 再谈学生类

  • 如果三个同学是同一个班的,那么他们上课肯定是在同一个教室,那能否给类中再加一个成员变量,来保存同学上课时的教室呢?不行!!!
  • 之前在Student类中定义的成员变量,每个对象中都会包含一份(称之为实例变量),因为需要使用这些信息来描述具体的学生。而现在要表示学生上课的教室,这个教室的属性并不需要每个学生对象中都存储一份,而是需要让所有的学生来共享。

6.2 static修饰成员变量

static修饰的成员变量,称为静态成员(类成员)变量.

【静态成员变量特性】

1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中

2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问

3. 类变量存储在方法区当中

4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)

public class Student{public String name;public String gender;public int  age;public double score;public static String classRoom = "Bit306";// ...public static void main(String[] args) {// 静态成员变量可以直接通过类名访问System.out.println(Student.classRoom);Student s1 = new Student("Li leilei", "男", 18, 3.8);Student s2 = new Student("Han MeiMei", "女", 19, 4.0);Student s3 = new Student("Jim", "男", 18, 2.6);// 也可以通过对象访问:但是classRoom是三个对象共享的System.out.println(s1.classRoom);System.out.println(s2.classRoom);System.out.println(s3.classRoom);}
}

6.3 static修饰成员方法

一般类中的数据成员都设置为private,而成员方法设置为public,那设置之后,Student类中classRoom属性如何在类外访问呢?

Java中,被static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。静态成员一般是通过静态方法来访问的

【静态方法特性】

1. 不属于某个具体的对象,是类方法

2. 可以通过对象调用,也可以通过类名.静态方法名(...)方式调用,更推荐使用后者

3. 不能在静态方法中访问任何非静态成员变量

4. 静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this引用

补充:

①引用不可以指向引用

引用只能指向对象,下述代码的意思是:student2这个引用指向了student1这个引用所指向的对象

②一个引用不能指向多个对象——海王??

③Person p = null表示不指向任何对象 

student不指向任何对象,room不属于对象,是类的,所以不存在空指针异常

④ 静态方法中不能调用任何非静态方法,因为非静态方法依赖对象

public class Test2 {public static void main(String[] args) {Student.funcStatic();}
}class Student{public String name;public int age;//普通成员变量//类方法 不依赖对象public static void funcStatic(){System.out.println("funcStatic()......");}
}

 

 

 在静态方法中调用时候无法传递this引用

6.4 static成员变量初始化

1.就地初始化

2.静态代码块初始化

......

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React-嵌套路由

1.概念 说明&#xff1a;在一级路由中又内嵌了其他路由&#xff0c;这种关系就叫做嵌套路由&#xff0c;嵌套至一级路由内的路由又称作二级路由。 2.实现步骤 说明&#xff1a;使用childen属性配置路由嵌套关系&#xff0c;使用<Outlet/>组件配置二级路由渲染的位置。…

事务【MySQL】

事务的概念 引入 在 A 转账 100 元给 B 的过程中&#xff0c;如果在 A 的账户已经减去了 100 元&#xff0c;B 的账户还未加上 100 元之前断网&#xff0c;那么这 100 元将会凭空消失。对于转账这件事&#xff0c;转出和转入这两件事应该是绑定在一起的&#xff0c;任意一个动…

B3620 x 进制转 10 进制(详解)

题目 思路 八进制数567怎么转化为十进制数。首先八进制就是逢八进一&#xff0c;也就是说这里面最大的数也就7&#xff0c;没有≥8的数。下面我们就讲一下567怎么转化为十进制&#xff1a;首先7是个位&#xff0c;可以直接写成十进制的7&#xff0c;6是十位&#xff0c;它是通…

Java项目企业设备管理系统

java项目企业设备管理系统javaweb项目ssm框架项目 运行环境:idea/eclipse tomcat jdk mysql navicat 系统用户分为员工和管理员两类用户。两类用户都可以进行系统的登录&#xff0c;虽然进入的系统主页结构相似&#xff0c;但是在功能上有不同。员工的密码可以自己进入系统后…

城乡居民基本医疗信息管理系统|基于Springboot的城乡居民基本医疗信息管理系统设计与实现(源码+数据库+文档)

城乡居民基本医疗信息管理系统目录 目录 基于Springboot的城乡居民基本医疗信息管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、病例管理 2、医院资讯信息管理 3、医院资讯类型管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选…

蓝桥杯历年真题省赛java b组2016年第七届

一、题目 取球博弈 两个人玩取球的游戏。 一共有N个球&#xff0c;每人轮流取球&#xff0c;每次可取集合{n1,n2,n3}中的任何一个数目。 如果无法继续取球&#xff0c;则游戏结束。 此时&#xff0c;持有奇数个球的一方获胜。 如果两人都是奇数&#xff0c;则为平局。 假设双…

BugKu刷题日记(web)一

文章目录 lfi题目页面恶意构造解题思路 Whois题目页面恶意构造解题思路 lfi 来源&#xff1a;https://ctf.bugku.com/challenges/detail/id/429.html 漏洞类型&#xff1a;文件包含漏洞 同类型BugKu&#xff1a;baby ifi、baby ifi 2 题目页面 恶意构造 http://example.com/…

程序人生——Java数组和集合使用建议(1)

目录 引出数组和集合建议60&#xff1a;性能考虑&#xff0c;数组是首选建议61&#xff1a;若有必要&#xff0c;使用变长数组建议62&#xff1a;警惕数组的浅拷贝 建议63&#xff1a;在明确的场景下&#xff0c;为集合指定初始容量建议64&#xff1a;多种最值算法&#xff0c;…

C++ 作业 24/3/14

1、成员函数版本实现算术运算符的重载&#xff1b;全局函数版本实现算术运算符的重载 #include <iostream>using namespace std;class Test {friend const Test operator-(const Test &L,const Test &R); private:int c;int n; public:Test(){}Test(int c,int n…

算法的时间复杂度和空间复杂度(数据结构)

本博客讲解算法的时间复杂度和空间复杂度的来源及定义&#xff0c;时间复杂度的表示及练习。空间复杂度的计算会在后续博客讲解 算法的复杂度 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏&#xff0c;一般是从时…

DHCP-SNOOPING-嗅探/窥探

DHCP-SNOOPING 私接设备了&#xff0c;非终端收到了报文 所有接口设置为非信任&#xff0c;然后单独配置其中一个接口为信任

ansible 部署FATE集群单边场景

官方文档&#xff1a; https://github.com/FederatedAI/AnsibleFATE/blob/main/docs/ansible_deploy_FATE_manual.md https://github.com/FederatedAI/AnsibleFATE/blob/main/docs/ansible_deploy_two_sides.md gitee详细文档&#xff1a; docs/ansible_deploy_one_side.md…

第N4周:中文文本分类-Pytorch实现

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/rbOOmire8OocQ90QM78DRA) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制](https://mtyjkh.blog.csdn.net/)** # -*- coding: utf-8 -…

数据集成工具 ---- datax 3.0

1、datax: 是一个异构数据源离线同步工具&#xff0c;致力于实现关系型数据库&#xff08;mysql、oracle等&#xff09;hdfs、hive、hbase等各种异构数据源之间的数据同步 2、参考网址文献&#xff1a; https://github.com/alibaba/DataX/blob/master/introduction.mdhttps:/…

Redis:持久化、线程模型、大 key

Redis持久化方式有什么方式&#xff1f; Redis 的读写操作都是在内存中&#xff0c;所以 Redis 性能才会高&#xff0c;但是当 Redis 重启后&#xff0c;内存中的数据就会丢失&#xff0c;那为了保证内存中的数据不会丢失&#xff0c;Redis 实现了数据持久化的机制&#xff0c…

【CenterFusion】CenterFusion网络架构概述

一、CenterFusion 概述 这个项目&#xff0c;重点研究毫米波雷达和相机传感器融合的方法利用毫米波雷达传感器数据和相机传感器数据进行 3D 目标检测并在 NuScenes 数据集上面进行评估CenterFusion 网络架构&#xff1a; CenterFusion 网络架构首先利用全卷积骨干网提取目标物…

【ArcGIS】栅格数据进行标准化(归一化)处理

栅格数据进行标准化&#xff08;归一化&#xff09;处理 方法1&#xff1a;栅格计算器方法2&#xff1a;模糊分析参考 栅格数据进行标准化(归一化)处理 方法1&#xff1a;栅格计算器 栅格计算器&#xff08;Raster Calculator&#xff09; 计算完毕后&#xff0c;得到归一化…

谷粒商城——分布式基础(全栈开发篇第一部分)

文章目录 一、服务治理网路数据支撑日志处理ELK应用监控集成工具开发工具 二、环境创建1、虚拟机创建2、虚拟机安装docker等1. 安装docker1. 配置阿里docker3.docker安装mysql错误 4、docker安装redis 3、软件1.Maven 阿里云镜像1.8jdk2、idea lombokmybatisX &#xff0c;3、 …

[LVGL]:MACOS下使用LVGL模拟器

如何在MACOS下使用lvgl模拟器 1.安装必要环境 brew install sdl2查看sdl2安装位置&#xff1a; (base) ➜ ~ brew list sdl2 /opt/homebrew/Cellar/sdl2/2.30.1/bin/sdl2-config /opt/homebrew/Cellar/sdl2/2.30.1/include/SDL2/ (78 files) /opt/homebrew/Cellar/sdl2/2.3…

Vue3基础笔记(1)模版语法 属性绑定 渲染

Vue全称Vue.js是一种渐进式的JavaScript框架&#xff0c;采用自底向上增量开发的设计&#xff0c;核心库只关注视图层。性能丰富&#xff0c;完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用&#xff0c;适用于场景丰富的web前端框架。灵活性和可逐步集成…