当前位置: 首页 > news >正文

java面向对象(详细讲解)

第一章 类和对象

1.面向对象的介绍

1.面向过程:自己的事情自己做,代表语言c语言

2.面向对象:自己的事情别人做,代表语言java

3.为啥要使用面向对象思想编程:很多功能别人给我们实现好了,我们只需要拿过来用即可,减少了我们的代码量

4.什么时候使用面向对象思想编程:

        调用别人的功能时

        在一个类中想使用别的类中的成员时,就使用面向对象思想编程

        至于我们使用的功能人家怎么实现的,我们不需要关心,只需要知道怎么使用即可

5.怎么使用面向对象思想编程:

        new,new完点呀  ->点代表的是调用

        特殊:如果调用的成员带static关键字,我们不需要new ,直接类名点即可

public class Demo01Object {public static void main(String[] args) {/*我们想在Demo01Object类中使用Scanner类中的next()方法实现键盘录入字符串那么我们就需要使用面向对象思想编程对象:Scanner  ->  new出来的对象实现好的功能:next()我们只需要知道找来Scanner对象,就可以调用这个对象中实现好的next()方法至于next()方法怎么实现的,我们不需要关心* */Scanner sc = new Scanner(System.in);String data1 = sc.next();System.out.println("data = " + data1);System.out.println("=====================================");/*我们想在Demo01Object类中使用Random类中的nextInt()方法实现随机整数那么我们就需要使用面向对象思想编程对象:Random  ->  new出来的对象实现好的功能:nextInt()我们只需要知道找来Random对象,就可以调用这个对象中实现好的nextInt()方法至于nextInt()方法怎么实现的,我们不需要关心* */Random rd = new Random();int data2 = rd.nextInt();System.out.println(data2);System.out.println("=======================================");int[] arr = {1,2,3,4};
//        System.out.print("[");
//        for (int i=0; i<arr.length;i++){
//            if (i<arr.length-1){
//                System.out.print(arr[i]+",");
//            }else{
//                System.out.print(arr[i]+"]");
//            }
//        }/*Arrays就是我们找来的对象toString就是此对象中实现好的功能我们只需要调用,怎么实现我们并不关心* */System.out.println(Arrays.toString(arr));}
}

2.类和对象

2.1类(实体类)——class

1.测试类:带main方法的类,主要是运行代码的

2.实体类:是一类事物的抽象表示形式

        世间万物的分类:比如,人类 狗类 猫类  鼠标类

组成部分:

        1.属性(成员变量)这一类事物有啥

                a.定义位置:类中方法外

                b.作用范围:作用于当前类

                c.定义格式:数据类型 变量名

                d.默认值:

                        整数:0

                        小数:0.0

                        字符:‘\u0000’

                        布尔:false

                        引用:null

        2.行为(成员方法)这一类事物都能干啥

                只需要将模块六所学的方法 中的static干掉,其他的都一样

描述人类:

public class person {//属性   ->成员变量String name;int age;//行为   ->成员方法public void eat(){System.out.println("人要吃饭");}public void drink(){System.out.println("人要喝水");}
}

描述动物类:

public class Animal {String kind;//品种String color;//颜色public void eat(){System.out.println("动物也要吃饭");}public void sleep(){System.out.println("动物也要睡觉");}
}

描述手机类:

public class Phone {String kind;//型号String brand;//品牌String color;//颜色int price;//价格public void call(String name){System.out.println("给name打电话");}public String message(){return "给鹭卓发短信";}
}

2.2对象

1.概述:一类事物的具体体现

2.使用:

        a.导包:import   包名.类名

                如果两个类在同一个包下,则不需要导包

                如果两个类不在同一个包下,想要使用对方的成员则需要导包

                特殊包:java.lang   ->使用lang包下的类不需要导包,比如字符串

                友情提示:在学四种权限修饰符之前,尽量让两个类在同一个包下

        b.创建对象:想要使用哪个类中的成员,就new哪个类的对象

        类名  对象名  =  new   类名()   ->比如:Person person = new Person();

        c.调用成员(成员变量,成员方法):   ->想要使用哪个类中的成员,就用哪个类的对象去点哪个成员

        对象名.成员变量名 =值;

        对象名.方法名()   ->调用的是无参无返回值方法

        对象名.方法名(实参)   ->调用的是有参无返回值方法

        数据类型  变量名 = 对象名.方法名()   ->调用的是无参有返回值方法

        数据类型  变量名 = 对象名.方法名(实参)   ->调用的是有参有返回值方法

public class Person {//属性   ->成员变量String name;int age;//行为   ->成员方法public void eat(){System.out.println("人要吃饭");}public void drink(){System.out.println("人要喝水");}
}
public class Demo01Person {public static void main(String[] args) {Person person = new Person();person.name = "路卓豪";person.age = 29;System.out.println(person.name+"   "+person.age);person.eat();person.drink();}
}

2.3练习

需求:用代码去描述一个手机类,在测试类中为手机类中的属性赋值,并且调用手机类中的功能

手机类:

public class Phone {String kind;//型号String brand;//品牌String color;//颜色int price;//价格public void call(String name){System.out.println("给"+name+"打电话");}public String message(){return "给鹭卓发短信";}
}

测试类:

public class Demo02Phone {public static void main(String[] args) {/*用代码去描述一个手机类,在测试类中为手机类中的属性赋值,并且调用手机类中的功能* */Phone pc = new Phone();//给属性赋值pc.brand = "小米";pc.color = "橙色";pc.price = 2999;System.out.println(pc.brand);System.out.println(pc.color);System.out.println(pc.price);//调用其功能pc.call("十个勤天");String mess = pc.message();System.out.println("message = " + mess);}
}

3.匿名对象的使用

1.int i =10;

        int:指的是数据类型

        i:指的是变量名

        等号右边的10是真正的数据

2.Person p = new Person();

        等号左边的Person是对象类型

        p:对象名

        等号右边的new Person():真正的数据,一个Person对象,将这个对象真正创建出来了

1.所谓的匿名对象:其实就是没有等号左边的部分,只有等号右边的部分(对象)

2.使用:

        new 对象().成员

3.注意:

        如果我们只想单纯的调用一个方法,让方法执行,我们可以考虑使用匿名对象

        但是如果涉及到赋值,千万不要使用匿名对象

public class Person {String name;public void eat(){System.out.println("人要吃饭");}
}
public class Demo01Person {public static void main(String[] args) {//原始方式Person p = new Person();p.name = "十个勤天";System.out.println(p.name);p.eat();System.out.println("=============================");//匿名对象new Person().eat();new Person().name = "做大做强";System.out.println(new Person().name);//null}
}

第二章 成员变量和局部变量的区别

1.定义位置不同(重点)

1.成员变量:类中方法外

2.局部变量:定义在方法之中或者参数位置

2.初始化值不同(重点)

1.成员变量有默认值,所以不用手动赋值就可以直接使用

2.局部变量没有默认值,所以需要先手动赋值再使用

3.作用范围不同(重点)

1.成员变量作用于整个类

2.局部变量只作用于自己所在的方法,其他方法使不了

4.内存位置不同(了解)

1.成员变量在堆中,跟着对象走

2.局部变量在栈中,跟着方法走

5.生命周期不同(了解)

1.成员变量随着对象的创建而产生,随着对象的消失而消失

2.局部变量随着方法的调用而产生,随着方法的调用完毕而消失

public class Person {String name;//成员变量public void eat(){int i =10;//局部变量System.out.println(i);System.out.println(name);//成员变量不用手动赋值可以直接使用}public void drink(){int j;//System.out.println(j);//局部变量需要手动赋值再使用System.out.println(name);//成员变量作用于整个类System.out.println(i);//i是aet()方法的局部变量,在drink()中无法使用}
}

第三章 练习

需求:定义一个类MyData,属性有   year month  day

        在定义一个类Citizen(公民类),属性有   name(String类型)   birthday(MyData 类型)   idCard(String类型)   为这三个属性赋值,然后将值取出来

public class MyData {/*定义一个类MyData,属性有year month day在定义一个类Citizen(公民类),属性有name(String类型) birthday(MyData 类型) idCard(String类型) 为这三个属性赋值,然后将值取出来* */int year;int month;int day;}
public class Citizen {String name;MyData birthday;
//    MyData birthday = new MyData();String idCard;}
public class Test {public static void main(String[] args) {MyData myData = new MyData();myData.year = 2025;myData.month = 3;myData.day = 22;Citizen citizen = new Citizen();citizen.name = "十个勤天";//默认值null/*生日  MyData类型MyData属于自定义类型(引用数据类型)这种类型要操作之前必须要赋值怎么赋值:需要new对象赋值* */citizen.birthday = new MyData();//默认值nullcitizen.idCard = "后陡门58号";//默认值null/*citizen.birthday获取的是MyData对象再去点year获取的是MyData对象中的year链式调用* */citizen.birthday.year = 2000;citizen.birthday.month = 2;citizen.birthday.day = 17;System.out.println(citizen.name+","+citizen.birthday.year+","+citizen.idCard);}
}

给自定义(引用)的类型赋值,需要new对象,String比较特殊可以直接使用

相关文章:

java面向对象(详细讲解)

第一章 类和对象 1.面向对象的介绍 1.面向过程&#xff1a;自己的事情自己做&#xff0c;代表语言c语言 2.面向对象&#xff1a;自己的事情别人做&#xff0c;代表语言java 3.为啥要使用面向对象思想编程&#xff1a;很多功能别人给我们实现好了&#xff0c;我们只需要拿过…...

代码随想录二刷|图论2

图论 基础知识 1 无向图 &#xff08;1&#xff09;度&#xff1a;一个顶点连n条边就度为n &#xff08;2&#xff09;权 加权无向图&#xff1a;有边长的无向图 &#xff08;3&#xff09;通道&#xff1a;两个顶点之间有一些边和点&#xff0c;并且没有重复的边 路&am…...

毕业项目推荐:基于yolov8/yolov5/yolo11的暴力行为检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式&#xff09;功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…...

服务器CPU微架构

1、微架构图 前端&#xff1a;预解码、解码、分支预测、L1指令缓存、指令TLB缓存 后端&#xff1a;顺序重排缓存器ROB处理依赖&#xff0c;调度器送到执行引擎 执行引擎&#xff1a;8路超标量&#xff0c;每一路可以进行独立的微操作处理 Port0、1、5、6支持整数、浮点数的加…...

用本地浏览器打开服务器上使用的Tensorboard

文章目录 前言一、Tensorboard的安装二、使用步骤1.服务器上的设置2.在本地打开 总结 前言 最近有使用服务器上的Tensorboard的需求&#xff0c;踩了几个雷&#xff0c;现已在搜索和帮助下解决&#xff0c;总结于此。 一、Tensorboard的安装 pip install tensorboard2.12.0注…...

Nginx或Tengine服务器配置SSL证书

本文将全面介绍如何在Nginx或Tengine服务器配置SSL证书&#xff0c;具体包括下载和上传证书文件&#xff0c;在Nginx上配置证书文件、证书链和证书密钥等参数&#xff0c;以及安装证书后结果的验证。成功配置SSL证书后&#xff0c;您将能够通过HTTPS加密通道安全访问Nginx服务器…...

【基础4】插入排序

核心思想 插入排序是一种基于元素比较的原地排序算法&#xff0c;其核心思想是将数组分为“已排序”和“未排序”两部分&#xff0c;逐个将未排序元素插入到已排序部分的正确位置。 例如扑克牌在理牌的时候&#xff0c;一般会将大小王、2、A、花牌等按大小顺序插入到左边&…...

2安卓开发的主要语言

1. Kotlin&#xff08;官方首选语言&#xff09; 定位&#xff1a;Google 官方推荐的首选 Android 开发语言&#xff08;2019 年起&#xff09;。 优势&#xff1a; 简洁高效&#xff1a;语法糖减少样板代码&#xff08;如 data class 自动生成 equals()/hashCode()&#xff0…...

Python练习(握手问题,进制转换,日期问题,位运算,求和)

一. 握手问题 代码实现 ans0for i in range(1,51):for j in range(i1,51):if i<7 and j<7:continueelse:ans 1print(ans) 这道题可以看成是50个人都握了手减去7个人没握手的次数 答案&#xff1a;1204 二.将十进制整数拆解 2.1门牌制作 代码实现 ans0for i in ra…...

vtk 3D坐标标尺应用 3D 刻度尺

2d刻度尺 : vtk 2D 刻度尺 2D 比例尺-CSDN博客 简介&#xff1a; 3D 刻度尺&#xff0c;也是常用功能&#xff0c;功能强大 3D 刻度尺 CubeAxesActor vtkCubeAxes调整坐标轴的刻度、原点和显示效果&#xff0c;包括关闭小标尺、固定坐标轴原点&#xff0c;以及设置FlyMode模…...

蓝桥杯每日一题:第一周周四哞叫时间

蓝桥杯每日一题&#xff1a;第一周周四哞叫时间 疑惑&#xff1a;如何把复杂度控制在Q&#xff08;n&#xff09;&#xff0c;怎么枚举a和b&#xff0c;longlong的形式又该怎么输入&#xff08;考虑用string&#xff09; 思路&#xff1a;枚举倒数第二个b前面有多少个a 这是一…...

DeepSeek本地接口调用(Ollama)

前言 上篇博文&#xff0c;我们通过Ollama搭建了本地的DeepSeek模型&#xff0c;本文主要是方便开发人员&#xff0c;如何通过代码或工具&#xff0c;通过API接口调用本地deepSeek模型 前文&#xff1a;DeepSeek-R1本地搭建_deepseek 本地部署-CSDN博客 注&#xff1a;本文不仅…...

自由学习记录(41)

代理服务器的核心功能是在客户端&#xff08;用户设备&#xff09;和目标服务器&#xff08;网站/资源服务器&#xff09;之间充当“中介”&#xff0c;具体过程如下&#xff1a; 代理服务器的工作流程 当客户端希望访问某个网站&#xff08;比如 example.com&#xff09;时&…...

【编写UI自动化测试集】Appium+Python+Unittest+HTMLRunner​

简介 获取AppPackage和AppActivity 定位UI控件的工具 脚本结构 PageObject分层管理 HTMLTestRunner生成测试报告 启动appium server服务 以python文件模式执行脚本生成测试报告 下载与安装 下载需要自动化测试的App并安装到手机 获取AppPackage和AppActivity 方法一 有源码的…...

大模型如何协助知识图谱进行实体关系之间的分析

大模型在知识图谱中协助进行实体关系分析的方式主要体现在以下几个方面&#xff1a; 增强数据标注与知识抽取 大模型通过强大的自然语言处理能力&#xff0c;能够高效地对原始数据进行实体、关系和事件的标注&#xff0c;从而提高数据处理的效率和准确性。例如&#xff0c;Deep…...

推荐几款优秀的PDF转电子画册的软件

当然可以&#xff01;以下是几款优秀的PDF转电子画册的软件推荐&#xff0c;内容简洁易懂&#xff0c;这些软件都具有易用性和互动性&#xff0c;适合不同需求的用户使用。​ ❶ FLBOOK&#xff5c;在线创作平台 支持PDF直接导入生成仿真翻页电子书。提供15主题模板与字体库&a…...

【大模型技术】LlamaFactory 的原理解析与应用

LlamaFactory 是一个基于 LLaMA 系列模型&#xff08;如 LLaMA、LLaMA2、Vicuna 等&#xff09;的开源框架&#xff0c;旨在帮助开发者和研究人员快速实现大语言模型&#xff08;LLM, Large Language Model&#xff09;的微调、推理和部署。它提供了一套完整的工具链&#xff0…...

Golang依赖注入实战:从容器管理到应用实践

#作者&#xff1a;曹付江 文章目录 1、示例&#xff1a; 管理依赖关系的容器1.1. 日志记录器设置1.2. 数据库连接设置1.3. 管理依赖关系的容器 2、如何使用容器3、结论 依赖注入&#xff08;DI&#xff09;是一种在软件应用程序中促进松散耦合和可测试性的设计模式。它允许将依…...

Node.js二:第一个Node.js应用

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 创建的时候我们需要用到VS code编写代码 我们先了解下 Node.js 应用是由哪几部分组成的&#xff1a; 1.引入 required 模块&#xff1a;我们可以使用 requi…...

【Python爬虫】利用代理IP爬取跨境电商AI选品分析

引言 随着DeepSeek的流行&#xff0c;越来越多的用户开始尝试将AI工具融入到日常工作当中&#xff0c;借助AI的强大功能提高工作效率。最近又掀起了一波企业出海的小高潮&#xff0c;那么如果是做跨境电商业务&#xff0c;怎么将AI融入工作流中呢&#xff1f;在做跨境电商的时候…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言&#xff1a;本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中&#xff0c;跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南&#xff0c;你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案&#xff0c;并结合内网…...