【Java入门】-- Java基础详解之 [Java面向对象编程(初级)]

news2024/11/16 2:21:14

目录

1.类与对象

2.类与对象的区别与联系

3.对象在JVM内存中的存在形式(重要)

4.属性/成员变量/字段

5.如何创建对象

6.类和对象的内存分配机制

7.面向对象的三大特征?

8.面向对象和面向过程?

9.匿名对象

10.方法(method)

11.方法的重载(overload)

12.可变形参

13.递归

14.封装

15.四种访问权限修饰符

16.构造器

17.什么是javaBean

18.this是什么?

19.package和import


1.类与对象

抛砖引玉,一个小动物的问题引出类与对象:小明养了两只小狗狗,一只名字叫小黑,今年2岁,黑色。还有一只叫小白,4岁,白色。输入小狗名字就显示狗狗的名字,年龄,颜色。如果输入的名字错误,就显示没有这个狗狗。

  • 使用现有的技术解决:
    • 定义变量方式解决
    • 使用数组解决
  • 使用这两个技术解决问题的痛点:
    • 不利于数据的管理,效率低。所以Java设计者引入了类与对象的概念,解决新的需求。
  • 代码:
    public class Object01{
    //小明养了两只小狗狗,一只名字叫小黑,今年2岁,黑色。还有一只叫小白,4岁,白色。
    //输入小狗名字就显示狗狗的名字,年龄,颜色。如果输入的名字错误,就显示没有这个狗狗。
        public static void main(String[] args){
            //如何使用面向对象(OOP)解决
            //1.创建一只狗狗对象(实例化)  new Cat();
            //Dog dog1 = new Dog(); 把创建的狗狗赋给cat1
            //dog1就是一个对象了
        
            //创建第一只狗狗
            Dog dog1 = new Dog();
            dog1.name = "小黑";
            dog1.age = 2;
            dog1.color = "黑色";
              
            //创建第二只狗狗
            Dog dog2 = new Dog();
            dog2.name = "小白";
            dog2.age = 4;
            dog2.color = "白色";
            
            System.out.println("第一只狗狗的信息:"+dog1.name+","+dog1.age+"岁,"+dog1.color);
            System.out.println("第二只狗狗的信息:"+dog2.name+","+dog2.age+"岁,"+dog2.color);
        }
    }
    
    //定义狗狗类
    class dog{
        String name;
        int age;
        String color;
    }

2.类与对象的区别与联系

  •  类是抽象的,是概念,代表一类事物,如动物,植物等...

  • 对象是具体的,实际的,代表一个具体的事务。

  • 类是对象的模板,对象是类其中的一个实例。

3.对象在JVM内存中的存在形式(重要)

4.属性/成员变量/字段

 从概念或叫法上看:成员变量 = 属性 = field(字段)

属性是一个类的组成部分,一般是基本数据类型,也可以是引用数据类型。

注意事项:

  • 属性的定义语法同变量。例如:访问修饰符  属性类型   属性名;
    访问修饰符有四种:public、proctected、默认、private
  • 属性的定义的类型可以是基本数据类型或引用数据类型。
  • 属性不赋值,有默认值。

byte 0  short 0  int 0  long 0  flout 0.0  double 0.0  boolean false  String null   char \u0000

5.如何创建对象

  •  先声明再创建
    Cat cat;  //声明对象cat
    cat = new  Cat();  //创建
  • 直接创建
    Cat cat = new Cat();

如何访问属性:

基本语法:对象名.属性名     如:cat.name;

6.类和对象的内存分配机制

  1. Java内存的结构分析
    1. 栈:一般存放基本数据类型(局部变量)
    2. 堆:存放对象(Cat cat,数组等)
    3. 方法区:常量池(常量,如字符串),类加载信息。

7.面向对象的三大特征?

  • 继承:继承是指一个类(称为子类或派生类)可以继承另一个类(称为父类或基类)的属性和方法。子类可以重用父类的代码,并且可以在此基础上进行扩展或修改。通过继承,子类可以获得父类的特性,形成类之间的层次结构。这样可以提高代码的可重用性和灵活性,减少重复编写代码的工作量。
  • 封装:封装是将数据和对数据的操作封装到一个类中,对外部隐藏具体的实现细节,只对外暴露必要的接口。通过封装,我们可以控制对数据的访问方式,提供统一的接口来操作数据,从而提高代码的可读性、可维护性和安全性。封装还有助于实现代码的模块化和解耦。
  • 多态:多态是指同一个方法可以在不同的对象上具有不同的行为。在多态的使用中,我们可以使用父类类型的引用指向子类的对象。通过多态机制,我们可以实现动态绑定和运行时的方法调用。多态提高了代码的灵活性和可扩展性,使得程序能够以更加通用和抽象的方式进行编写。

8.面向对象和面向过程?

面向过程(POP):强调的是功能行为,以函数为最小的单位,考虑怎么做。

面向对象(OOP):将功能封装进对象,强调具备了功能的对象,以类\对象为最小单位,考虑谁去做。

9.匿名对象

我们可以不定义对象的句柄,直接调用这个对象的方法。例如:new Cat().start();
注意:如果一个对象的方法只需要一次调用,那么可以使用匿名对象。

10.方法(method)

  • 方法是类或者对象的"行为“ ,用来完成某个操作;方法不能独立存在,必须定义在类中。
  • 方法的声明格式:
    访问修饰符  返回值类型  方法名(参数类型 形参,.....){
             方法体;
            return  返回值;(返回值类型void,没有返回值)
  • }
  • 举例:
    public class Car{
        private int age;
        public int getAge(){
           return age;     
        }
    }

注意事项:

  1. 方法被调用一次就会执行一次。
  2. 没有具体返回值的情况,返回值类型用void,方法体就不必用return。
  3. 不可用在方法内部定义方法。 

11.方法的重载(overload)

重载就是允许存在一个以上的同名方法,只要他们参数个数或类型不同。

特点:

与返回值类型无关,参数列表不同。

例如:

int  add(int a,int b){return a+b;}

int add(int a){return x;}

int add(float a,float b){return a+b;}

12.可变形参

JDK5以前采用数组形参来定义方法,传入多个同类型的变量

public static void test(int a,String[] aa);

JDK5以后采用可变个数形参来定义方法

public static void test(int a, String...aa);

注意:

  • 声明格式:方法名(参数类型名...参数名)。
  • 可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个。
  • 可变个数形参的方法与同名方法之间彼此构成重载。 
  • 可变参数方法的使用与方法参数部分使用数组一致。
  • 同一个方法的形参上只能声明一个可变参数。

13.递归

 简单来说就是一个方法体调用它自己。

递归方法包含了一种隐式的循环,它会重复执行某段代码。

递归一定要向已知的方法递归,否则递归就变成了无穷递归,类似死循环.

举例:

//计算1--100自然数的和

public int sum(int num){

        if(num == 1){

               return 1;        

        }else{

                return num + sum(num -1) ;       

        }

}

14.封装

  •  为什么需要封装?有什么用?
    • 比如我要使用电脑,只需要开机进入系统就能用了,没有必要了解系统底层或硬件内结构
  • 程序设计追求高内聚,低耦合。
    • 高内聚是指类的内部数据操作细节自己完成,不允许外部干涉。
    • 低耦合:仅对外暴露少量的方法使用。
  • 隐藏方法内部,之对外公开简单的接口。便于外界调用,提高系统的可扩展性,可维护性。

15.四种访问权限修饰符

class只能使用public,默认

public 类可以在任何地方访问。

默认类只能被同一个包的类访问。

16.构造器

构造器的特征:

  • 具有类相同的名称。
  • 不声明返回值类型
  • 不能被static,final,synchronized,abstract,native修饰,不能有return语句。

构造器作用:

创建对象,初始化对象

注意:

  • Java语言中每个类都有构造器
  • 默认构造器的修饰符与类的修饰符一致。
  • 一旦显示定义了构造器,系统不再提供默认构造器。
  • 一个类可以创建多个重载的构造器。
  • 父类构造器不可被继承。

属性赋值的过程:

默认初始化--》显式初始化--》构造器初始化--》通过"对象.属性"或"对象.方法"赋值

17.什么是javaBean

  • JavaBean是Java写成的可重用组件。
  • 所谓JavaBean指的是符合如下标准的Java类:
    • 类是公共的
    • 有一个无参的公共构造器
    • 有属性,且有get,set方法
  • 用户可以使用JavaBean将功能,处理,值,数据库访问和其他任何可以用Java代码创造的对象进行打包,并且其他的开发者可以通过内部JSP页面,Servlet,其他JavaBean,applet程序或者应用来使用这些对象。用户可以认为javaBean提供了一种随时可以复制粘贴的功能,而不用关心变化。

举例:

18.this是什么?

this可以调用类的属性,方法,构造器。

它可以在方法内部使用,这个方法所属对象的引用。

在构造器内部使用,表示该构造器正在初始化的对象。

注意:

  • 可以在类的构造器使用”this(形参列表)“的方式,调用本类中重载的其他构造器!
  • 构造器中不能通过this(形参列表)调用自身构造器
  • this(形参列表)必须声明在类的构造器首行!
  • 类的构造器中,最多只能声明一个this(形参列表)

19.package和import

包(package):

  • package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包
    格式:package  顶层包.子包名;
  • 包对应于文件系统的目录,package语句中,用“.”来指明包(目录)的层次;
  • 包通常用小写单词标识。
  • 包的作用:
    • 包可以包含类和子包,划分项目层次,便于管理
    • 解决类命名冲突问题
    • 控制访问权限

导入 (import):

为使用定义在不同包中的Java类,需要用import语句引入指定包层次下所需的类或全部类

语法:import  包名.类名;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一个AI关键词能卖500块?AI绘画引发研究关键词的商机

一个AI关键词能卖500块?AI绘画引发研究关键词的商机! 绘画一直被人们看作是视觉艺术的呈现方式。通常情况下,学习绘画需要理解调色、构图和线条等要素。然而,自从AI介入绘画领域后,绘画的"画风"迅速发生了变…

Mac下载安装vscode

1. 下载 先从 https://code.visualstudio.com 下载Mac版vscode。 2. 安装 下载之后在浏览器的下载中点击安装vscode 下载的时候会有提示 有时候还需要配置【安全性与隐私】,即允许App Store和被认可的开发者安装软件 3. 简单配置 默认进来会要求选择主题&a…

1初步整合ABP模块化

1 首先创建一个WebApi项目 2 初步整合ABP模块化 Abp官网,这里我们先初步整合WebApi模块化,待程序运行起来,后续文章我们再对Abp进行深入。 2.1 NuGet:包Volo.Abp Volo,Abp:模块化必备 2.2 NuGet:Volo.Abp.A…

scratch lenet(5): 快速生成随机数的C语言实现

文章目录 1. 目的2. 使用 rand() 的正确姿势3. 使用 TAOCP 公式3.1 实现3.2 使用 4. 随机数:用于 Xavier Glorot 初始化4.1 Xavier Glorot 初始化是什么4.2 使用C语言执行 Xavier Glorot 初始化 5. References 1. 目的 用于 lenet 网络训练开始时, weig…

神奇的 SQL 之 HAVING 一个容易被忽视的主角!

初识 HAVING 关于 SQL 中的 HAVING,相信大家都不陌生,它往往与 GROUP BY 配合使用,为聚合操作指定条件 说到指定条件,我们最先想到的往往是 WHERE 子句,但 WHERE 子句只能指定行的条件,而不能指定组的条件…

使用css3如何实现一个文字打印效果

前言 在很多网站首页介绍页里,为了吸引用户,暂留更长时间,使用了一些css3动画的 示例效果 文字打印.gif 实现这个动画原理 想要实现这个动画,改变元素的宽度,结合动画css3关键帧实现 具体代码如下所示 <!DOCTYPE html> <html lang"en"><head><m…

[元带你学: eMMC协议详解 14] 数据擦除(Erase) 详解

依JEDEC eMMC 5.1及经验辛苦整理&#xff0c;付费内容&#xff0c;禁止转载。 所在专栏 《元带你学: eMMC协议详解》 内容摘要 全文 4200字&#xff0c; 主要内容介绍了各种擦除操作概念以记用法&#xff0c;总结了不同擦除操作的区别&#xff0c; 根据不同安全级别和应用场景…

管理类联考——英语二——技巧篇——写作——A节——书信——九类书信黄金句型(背诵版)

九类书信黄金句型(背诵版) 1&#xff0e;询问信 询问信开头常用句式 l would be grateful if you could send me information about. . . l am writing to see if it is possible for you to provide me with information about. . . l am writing to ask you if/ whether. .…

15-5.自定义组件的通信

目录 1 构建组件间的父子关系 2 父向子传值-属性绑定 3 子向父传值-自定义事件 4 获取组件实例 1 构建组件间的父子关系 需要在father1.json中引入son1&#xff0c;然后再father.wxml中使用son1 2 父向子传值-属性绑定 属性绑定很像props。属性绑定只能传递普通类型…

3C - SiC、4H-SiC和6H -SiC

3C-SiC是立方结构 4H-SiC是四方结构 6H-SiC是双六方结构 它们的区别主要在于原子排列模式和配位数。3C-SiC具有最高的理论电子速度,但也有最大的杂质腐蚀痕迹。4H-SiC和6H-SiC具有更好的成本效益与设备可靠性。 3C-SiC具有立方晶系结构&#xff0c;每个硅原子被四个碳原子和四…

深度学习(22)——YOLO系列(3)

深度学习&#xff08;22&#xff09;——YOLO系列&#xff08;3&#xff09; 文章目录 深度学习&#xff08;22&#xff09;——YOLO系列&#xff08;3&#xff09;1. BOF(bag of freebies)2. Mosaic data augmentation3. 数据增强4. self-adversarial-training&#xff08;SAT…

LwIP系列(2):动态内存池管理(memp.c)详细分析

前言 我们在学习Lwip源码时&#xff0c;内存管理是绕不开的一个重点&#xff0c;我们在看相关的代码时&#xff0c;经常会看到memp_malloc 和 mem_malloc, 其中&#xff1a; &#xff08;1&#xff09;memp_malloc是从内存池中申请内存&#xff0c;具体实现在memp.c memp.h。…

木马攻击与防护

目录 一、初识Trojan木马 1.1 木马概念 1.2 木马特点 1.2.1 欺骗性 1.2.2 隐蔽性 1.2.3 非授权性 1.3 病毒和木马 1.3.1 病毒的特点 1.3.2 病毒的主要目的 1.3.3 病毒例子 1.3.4 木马程序企图 1.3.5 木马危害 1.3.6 病毒与木马的区别 1.4 木马种类 1.4.1 远程访…

机器学习之KNN算法:基于pytorch在MNIST数据集上实现数据分类预测

1 KNN算法介绍 KNN算法又叫做K近邻算法&#xff0c;是众多机器学习算法里面最基础入门的算法。KNN算法是最简单的分类算法之一&#xff0c;同时&#xff0c;它也是最常用的分类算法之一。KNN算法是有监督学习中的分类算法&#xff0c;它看起来和Kmeans相似&#xff08;Kmeans是…

CMake中的find_package(xxx REQUIRED)在windows平台怎么解

最近在编译FastDDS时&#xff0c;遇到了这个问题&#xff0c;使用CMake构建时提示找不到库。 下载的源代码不能一次性编过是最让人头疼的问题&#xff0c;这种开源代码通常都是迭代了很多版本&#xff0c;各种配置信息如果不在文档中说明&#xff0c;全靠自己去摸索确实会让人头…

idea运行java项目提示异常: java.security.InvalidKeyException: Illegal key size

idea运行java项目提示异常&#xff1a;java.lang.IllegalArgumentException: java.security.InvalidKeyException: Illegal key size 参考&#xff1a;java.security.InvalidKeyException: Illegal key size_gqltt的博客-CSDN博客 产生错误原因&#xff1a;为了数据代码在传输过…

4、做什么类型的产品经理

1、如何选择适合自己的产品经理岗位 怎么选择适合自己的这个产品经理岗位呢&#xff1f;建议大家是先考虑行业&#xff0c;再考虑其他的。 考虑行业就是说我要做什么行业的产品经理,然后再考虑在这个行业里面具体的你要做前端还是后端或者是APP端&#xff0c;还是web端&#x…

【MySQL】不就是MySQL——索引

前言 嗨&#xff01;小伙伴们周末快乐呀&#xff01;想必你们周末都在家里边呆着吧&#xff0c;外面实在是太热了&#xff01;在家里吹着空调做着自己喜欢做的事情吧&#xff01;本期我们主要学习的是MySQL中的约束条件。 目录 前言 索引概述 外键约束 1.概念 2.语法 1.添加…

【HTML界面设计(二)】说说模块、登录界面

记录很早之前写的前端界面&#xff08;具体时间有点久远&#xff09; 一、说说模板 采用 适配器&#xff08;Adapter&#xff09;原理 来设计这款说说模板&#xff0c;首先看一下完整效果 这是demo样图&#xff0c;需要通过业务需求进行修改的部分 这一部分&#xff0c;就是dem…

ch8_2_CPU的指令周期,流水线技术

1.  指令周期 指令周期是指_ CPU从主存取出一条指令, 分析指令&#xff0c;加上执行这条指令的时间。 1.1指令周期 指令周期&#xff1a; 是指cpu&#xff0c;从内存中取出指令&#xff0c;并且执行一条指令所需要的全部时间。 比如 从内存单元中&#xff0c;取出操作数&…