面向对象的学习

封装

//用来描述一类事物的类,专业叫做:javabean类
//在javabean类是不写main方法的

//一个java文件中可以定义多个类,且只能一个类是public修饰,而且public修饰的类名必须成为代码的文件名
:

//在类中一般无需指定初始化值 存在默认值

//引用数据类型:类,接口,数组,String 初始化是NULLd

//类名的首字母建议大写,驼峰

封装:对象代表什么,就得封装对应的数据,并提供数据对应的行为

例子:门关门,圆画圆

封装的好处:有很多可以现成的已经封装的类,我们可以直接调用这些现成的类,可以极大方便与我们编写代码

Private关键字

  1. 是一个权限修饰符
  2. 可以修饰成员
  3. 被private修饰的成员只能早本类中才能访问

格式化代码:ctrl + alt + l  (注意需要关闭QQ,才能进行这个操作)

对于私有属性的成员变量往往需要一个set和get搭配使用才能对私有属性的变量进行赋值

下面是一个具体例子:
自己定义一个类(女朋友类型):

public class GirlFriend {
    //属性
    private String name;
    private int age;
    private String gender;

    //针对每一个私有变量,都需要提供get和set方法
    //set方法给成员赋值
    //get对外提供成员变量的值

    //作用:给成员变量name赋值
    public void setName(String n){
        name = n;
    }
    //作用对外提供方属性
    public String getName(){
        return name;
    }



    //age
    //setage:给成员变量age进行赋值的
    //getage对外提供成员变量age的值
    public void setAge(int a) {
        if (a >= 18 && a <= 50) {
            age = a;
        } else {
            System.out.println("非法数据\n");
        }
    }

    //get(获取)
    public int getAge() {
        return age;
    }

    //gender
    public void setGender(String g){
        gender = g;
    }
    public String getGender(){
        return gender;
    }

}

女朋友类型的TEXT:

public class GirlFrindText {
    public static void main(String[] args) {
        //创建女朋友
        GirlFriend gfl = new GirlFriend();
        //赋值操作
        gfl.setName("郑美玲");
        gfl.setAge(18);
        gfl.setGender("女");

        System.out.println(gfl.getName());
        System.out.println(gfl.getAge());
        System.out.println(gfl.getGender());

    }
}

不难发现对于私有私有类型的成员变量我们需要使用类里面的方法进行赋值和得到答案

所以就需要set(赋值)和get(提供值)搭配使用

小结:

1.private关键字是一个权限修饰符

2.可以修饰成员变量

3.被private修饰的成员只能在本类中才能访问

4.针对private修饰的成员变量,如果需要被其他使用,需要提供相应的操作(set和get搭配使用)

5.提供”setXxx(参数)”方法,用于给成员变量赋值,方法用public修饰

6.提供”getXxx(参数)”方法,用于获取成员变量的值,方法使用public修饰

this关键字

成员变量和局部变量

如果我们把变量定义在方法里面 那么这个变量就叫做局部变量

如果我们把变量定义在类里面 那么这个就叫做成员变量

如下面这个:

public class GirlFrind{
    private int age;//成员变量
    public void method(){
        int age = 10;//局部变量
        System.out.println(age);
    }
}

这个代码并没有错误:这里的age的值究竟取决于谁呢? 这里讲究一个就近原则,打印的这个age谁离它近 那么这个age就是谁的值,很显然这个age离局部变量age = 10更近,所以这个age的值就是10

如果我就是想要打印成员变量的值 那么我们就需要在打印语句中加上this.age  这个时候打印的就是成员变量的值(后面会讲this在内存中的储存方式

public class GirlFrind{
    private int age;//成员变量
    public void method(){
        int age = 10;//局部变量
        System.out.println(this.age);
    }
}

下面这个是使用了this关键字进行的操作:

public void setAge(int age) {
    if (age >= 18 && age <= 50) {
        this.age = age;
    } else {
        System.out.println("非法数据\n");
    }
}

这个是将我们接受到的值赋给成员变量age。

小结:1.就近原则

System.out.println(age);

System.out.println(this.age);

构造方法

作用:在创建对象的时候给成员变量初始化的操作。

特点:

  1. 方法名和类名相同,大小写一致
  2. 没有返回值类型
  3. 没有具体得返回值(不能有return 带回结构数据)

执行时机:

  1. 创建对象得时候由虚拟机调用,不能手动调用构造方法
  2. 每创建一次对象,就会使用一次构造方法

犯下的错误:对于set类函数我们使用这个方法的时候必须要使这个方法的类型为void \

然后我们使用get类函数我们需要将这个方法的类型设置为变量自己的类型

System.out.println(stu1.setAge(19));

这个输出函数里面的类型是void类型,我竟然将这个函数里面的直接放在了输出函数里面了
 

当我们没有构造方法的时候系统会自动给我们初始化一个构造方法(这个构造方法没有含有任何的参数和变量)

 当我们定义了构造方法,系统将不再提供默认的构造方法

当我们将自定义的无参构造的构造方法给注释掉后,然后再在主类中的main的参数去掉后,就会发现程序已经报错了,所以当我们当我们定义了构造方法,系统将不再提供默认的构造方法。   所以这个我们自己定义一个无参构造是很有必要的。

构造方法的重载:

带参构造方法,和无参构造方法,两者方法名相同,但是参数不同,这就叫做构造方法的重载  (有点类似与C++里面的sort函数可以含多个变量)

推荐使用方法:

无论是否使用,都手动书写参数构造方法,和带全部参数的构造方法

小结:

  1. 创建对象的时候,由虚拟机自动调用,给成员变量进行初始化的
  2. 无参的构造方法:初始化对象的时候,成员的数据均采用默认值
    有参的构造方法:在初始化对象的时候,可以为对象进行赋值
  3. 任何类定义出来,默认就自带了无参构造器,写不写都有

 

标准的javabean类

用来描述一类事物的类,专业叫做:javabean
1.类名需要见民知意

2.成员变量需要使用private修饰

3.提供至少两个构造方法:第一个无参构造方法,第二个有参构造方法

4.成员方法:提供每一个成员变量对应的setXxx(),getXxx()  如还有其他行为也要写上

除此之外我们可以使用两个快捷方式生成标准的javabean

第一个就是

第一个就是:alt + insert
或者:alt + fn + insert

除了这个我们还可以使用一个插件自动生成标准的javabean,只需要在鼠标右键进行选择就可以了 或者是alt + shift + ' .'  这个样也可以生成一个标准的javabean

对象储存图

Java内存分配:1.栈  2.堆  3.方法区  4.本地方法区  5.寄存器

一个对象的内存图:就以student s = new Student();为例

电脑会做这些事情:

  1. 加载class文件
  2. 申明局部变量
  3. 在堆内存中开辟一个空间
  4. 默认初始化
  5. 显示初始化
  6. 构造方法初始化
  7. 将堆内存中的地址赋给左边的局部变量

     

 

我们需要知道的是:当有new这个关键字时,就意味着在堆内存中开辟了一块内存,这个内存会从方法区提取相关的模板然后并在相依的地址(名字)+ ‘.’地址所指向的属性(也就是具体的数据)   所以我们可以总结出一点就是每当我们看到一个new的时候就代表会在对区域开辟一个全新的空间(这也就意味这有几个对象)

变量名(相当于是一个地址):会被储存在栈内存中,当代码运行到这一行的时候,电脑就会循着地址在堆中找到相应的属性(具体数据)

 

可以看到这个代码只出现了一次new就说明了只有一个对象的内存被存放到了堆内存,而

Student stu2 = stu1    stu2和stu1都是指向了一个堆内存,当我们将stu1 赋值为NULL,这个时候stu1什么都不会指向,stu1就成为垃圾。

 基本数据类型和引用数据类型

基本数据类型:在变量存储的是真实的变量值,存储在栈内存

而引用数据类型在栈内存中存储的是一个地址值,真正的值是存放在堆内存中

如Student s = new Student();这个s就是引用数据类型(使用其他空间的数据)

数组也是一个引用数据类型。

 

基本数据类型:数据值是存贮在自己的空间中
特点;赋值给其他变量,也是赋得真实得值

引用数据类型;数据值是贮存在其他空间,通过调用地址来获取值。

This的内存原理:

This的本质:代表所在方法调用者的地址值,且这个储存在栈内存中

其作用:就是区分局部变量和成员变量的

成员变量:类中方法外的变量

局部变量:方法中的变量

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C# OpenCvSharp 轮廓检测

目录 效果 代码 下载 效果 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp; using OpenCvSharp.…

理解JVM:从字节码到程序运行

大家好&#xff0c;我是程序员大猩猩。 今天我们来讲一下JVM&#xff0c;好多面试者在面试的时候&#xff0c;都会被问及JVM相关知识。那么JVM到底是什么&#xff0c;要理解它到底是出于什么原因&#xff1f; JVM俗称Java虚拟机&#xff0c;它是一个抽象的计算机&#xff0c;…

Hadoop面试重点

文章目录 1. Hadoop 常用端口号2.Hadoop特点3.Hadoop1.x、2.x、3.x区别 1. Hadoop 常用端口号 hadoop2.xhadoop3.x访问HDFS 端口500709870访问 MR 执行情况端口80888088历史服务器1988819888客户端访问集群端口90008020 2.Hadoop特点 高可靠&#xff1a;Hadoop底层维护多个数…

京东电商实时数据采集:京东数据API接口海量数据采集京东商品详情页SKU实时采集

京东数据api接口&#xff1a;京东电商数据如何采集&#xff1f; 用户行为日志采集 &#xff1a;这种方法通常用于记录用户在网站上的行为&#xff0c;如点击、浏览等&#xff0c;以帮助分析用户行为和优化用户体验。通用数据采集 &#xff1a;可以通过数据直通车等方式进行&am…

数字孪生关键技术及体系架构

摘要&#xff1a; 数字孪生以各领域日益庞大的数据为基本要素&#xff0c;借助发展迅速的建模仿真、人工智能、虚拟现实等先进技术&#xff0c;构建物理实体在虚拟空间中的数字孪生体&#xff0c;实现对物理实体的数字化管控与优化&#xff0c;开拓了企业数字化转型的可行思路…

SpringBoot+Prometheus+Grafana实现应用监控和报警

一、背景 SpringBoot的应用监控方案比较多&#xff0c;SpringBootPrometheusGrafana是目前比较常用的方案之一。它们三者之间的关系大概如下图&#xff1a; 关系图 二、开发SpringBoot应用 首先&#xff0c;创建一个SpringBoot项目&#xff0c;pom文件如下&#xff1a; <…

本地部署大模型的几种工具(上-相关使用)

目录 前言 为什么本地部署 目前的工具 vllm 介绍 下载模型 安装vllm 运行 存在问题 chatglm.cpp 介绍 下载 安装 运行 命令行运行 webdemo运行 GPU推理 ollama 介绍 下载 运行 运行不同参数量的模型 存在问题 lmstudio 介绍 下载 使用 下载模型文件…

Git版本管理使用手册 - 8 - 合并分支、解决冲突

合并整个开发分支 切换到本地test分支&#xff0c;选择右下角远程开发分支&#xff0c;选择Merge into Current。然后提交到远程test仓库。 合并某次提交的代码 当前工作区切换成test分支&#xff0c;选择远程仓库中的dev开发分支&#xff0c;选择需要合并的提交版本右击&a…

机器学习优化算法(深度学习)

目录 预备知识 梯度 Hessian 矩阵&#xff08;海森矩阵&#xff0c;或者黑塞矩阵&#xff09; 拉格朗日中值定理 柯西中值定理 泰勒公式 黑塞矩阵&#xff08;Hessian矩阵&#xff09; Jacobi 矩阵 优化方法 梯度下降法&#xff08;Gradient Descent&#xff09; 随机…

Hive-技术补充-ANTLR的真实语法世界

一、上下文 上一篇博客<Hive-技术补充-ANTLR语法编写>&#xff0c;我们了解了如何使用ANTLR语法来表达词法结构和语法结构&#xff0c;下面我们循循渐进的处理身边用过的一些文件或语言&#xff1a; CSV、JSON、DOT、Cymbol、R 二、解析CSV文件 有这样一份csv文件 …

【详细讲解PostCSS如何安装和使用】

&#x1f308;个人主页:程序员不想敲代码啊&#x1f308; &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f3c6; &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d; 希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提…

HarmonyOS 应用开发之UIAbility组件基本用法

UIAbility组件的基本用法包括&#xff1a;指定UIAbility的启动页面以及获取UIAbility的上下文 UIAbilityContext。 指定UIAbility的启动页面 应用中的UIAbility在启动过程中&#xff0c;需要指定启动页面&#xff0c;否则应用启动后会因为没有默认加载页面而导致白屏。可以在…

软件概要设计说明书word原件(实际项目)

一、 引言 &#xff08;一&#xff09; 编写目的 &#xff08;二&#xff09; 范围 &#xff08;三&#xff09; 文档约定 &#xff08;四&#xff09; 术语 二、 项目概要 &#xff08;一&#xff09; 建设背景 &#xff08;二&#xff09; 建设目标 &#xff08;三&a…

Jupyter开启远程服务器(最新版)

Jupyter Notebook 在本地进行访问时比较简单&#xff0c;直接在cmd命令行下输入 jupyter notebook 即可&#xff0c;然而notebook的作用不止于此&#xff0c;还可以用于远程连接服务器&#xff0c;这样如果你有一台服务器内存很大&#xff0c;但是呢你又不喜欢在linux上进行操作…

【文本】正则 | 正则表达式收录

1、匹配数字加右括号 1&#xff09;正则 \d\) 2&#xff09;效果 ~~

探索多种数据格式:JSON、YAML、XML、CSV等数据格式详解与比较

title: 探索多种数据格式&#xff1a;JSON、YAML、XML、CSV等数据格式详解与比较 date: 2024/3/28 17:34:03 updated: 2024/3/28 17:34:03 tags: 数据格式JSONYAMLXMLCSV数据交换格式比较 1. 数据格式介绍 数据格式是用于组织和存储数据的规范化结构&#xff0c;不同的数据格…

CSS(二)---【常见属性、复合属性使用】

零.前言 本篇文章主要阐述CSS常见属性、复合属性&#xff0c;更多前置知识请见作者其它文章&#xff1a; CSS(一)---【CSS简介、导入方式、八种选择器、优先级】-CSDN博客 1.CSS属性 CSS的属性有上百个&#xff0c;但是我们并不需要全部学习&#xff0c;只要我们学习一部分…

八大技术趋势案例(人工智能物联网)

科技巨变,未来已来,八大技术趋势引领数字化时代。信息技术的迅猛发展,深刻改变了我们的生活、工作和生产方式。人工智能、物联网、云计算、大数据、虚拟现实、增强现实、区块链、量子计算等新兴技术在各行各业得到广泛应用,为各个领域带来了新的活力和变革。 为了更好地了解…

UI的设计

一、RGB888的显示 即红色&#xff0c;绿色&#xff0c;蓝色都为8位&#xff0c;即通常说的24位色。可以很好显示各种过渡颜色。从硬件上&#xff0c;R、G、B三基色的连接线各需要有8根&#xff0c;即24根数据线&#xff1b;软件上存储的数据量也需要24位&#xff0c;即3个字节&…

Android和IOS应用开发-Flutter应用让屏幕在 app 运行期间保持常亮的方法

文章目录 Flutter应用让屏幕在 app 运行期间保持常亮的方法方法一&#xff1a;使用系统插件方法二&#xff1a;使用 Widgets注意事项 Flutter应用让屏幕在 app 运行期间保持常亮的方法 在 Flutter 开发中&#xff0c;可以使用以下两种方法让屏幕在 app 运行期间保持常亮&#…
最新文章