JavaSE基础总结复习之面向对象の知识总结

2024-06-23 20:36

本文主要是介绍JavaSE基础总结复习之面向对象の知识总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

Java语言的基础特点

面向对象

类和对象

类的构造

一,发现类

二,发现类的共有属性(成员变量)

三,定义类的成员方法(行为,动词)

四,使用类创建对象

对象

什么是对象

如何创建对象

类和对象的关系

构造方法

特点

作用

对象与引用

值传递:

引用传递:

关键字

this关键字

static关键字

static--静态

static修饰属性

static修饰内容

static修饰成员的方法

代码块

实例块:

静态块:

类什么时候会被加载?

问题:

包的功能:

注意:

包的命名规范:

访问权限

public

protected

(default)

private

补充变量的分类:

按照位置分类:

成员变量

局部变量

面向对象语言的三大特征

封装

一般意义上的封装:

面向对象语言中的封装:

封装案例1:将属性设置为私有权限

​编辑

封装案例2:将类中的方法私有化

java设计模式:

单例模式:

继承

优点

继承的语法

方法的重写

方法重写的规则

super关键字

@Override

继承中的构造方法

抽象类

抽象方法

什么时候需要定义抽象的方法:

抽象类的特点

多态

向下转型:

instanceof关键字

final关键字

接口

接口的定义

implements关键字

注意


Java语言的基础特点

  • 简单易学(语法简单,上手容易);
  • 面向对象(封装,继承,多态);
  • 平台无关性( Java 虚拟机实现平台无关性);
  • 支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持);
  • 可靠性(具备异常处理和自动内存管理机制);
  • 安全性(Java 语言本身的设计就提供了多重安全防护机制如访问权限修饰符、限制程序直接访问操作系统资源);
  • 高效性(通过 Just In Time 编译器等技术的优化,Java 语言的运行效率还是非常不错的);
  • 支持网络编程并且很方便;
  • 编译与解释并存;

面向对象

关注的焦点是类:在计算机程序设计过程中,参照现实中的事物,将事物的属性特征,行为特征抽象出来,用类来表示。

代码结构:以类为组织单位。每种事物都具备自己的属性和行为/功能。

面向对象程序设计时,从宏观上分析程序有哪些功能。

然后对功能进行分类,把不同的功能封装在不同的类中(造汽车,发动机·······)。

是一种宏观设计,适合解决复杂的问题,代码扩展性强,可维护性高。

类和对象

具有相同特征(同一类)事务的抽象描述,例如:人类,树类,公务员类,语言类,是抽象的概念

现根据客观的事务进行抽象(设计为程序),然后由抽象创造出具体,最终使用的是具体

类的构造

一,发现类

总结的过程就是抽象化的过程。

例如:古希腊哲学家柏拉图把人定义为:没有羽毛的两脚直立的动物,其中:”没有羽毛“,”两脚独立“都是特征,都能归类为人类,当然在现在看来这样的定义是片面的。

类的声明格式为:

[访问权限修饰符][修饰符]class Cat{}//例如:public class Cat{}

访问修饰符有两种public无(默认)

修饰符:final,abstract

关键字class用来定义一个类

Java类名的命名规范

类名首字母大写,见名知意。

二,发现类的共有属性(成员变量)

三,定义类的成员方法(行为,动词)

四,使用类创建对象

对象

实际存在的该类事物的每个个体,是具体的,因而也称为实例,例如:小明,苹果,魅族20

什么是对象

对象是类的实例,是以类为模板,在内存中创建出的是个实际存在(对象)

如何创建对象

使用new关键字,例如:Cat()-----类的构造方法

Cat miao = new Cat();

new Cat()使用new创建对象,然后调用Car类的构造方法初始化对象=,将右边创建的对象的地址赋值给左边miao变量

这个miao就相当于创建出的变量,可以表示这个对象,可以使用这个miao进行属性操作

例如:miao.name = "咪咪";

类和对象的关系

在Java编程语言中,类和对象是紧密相关的概念。类是对具有相同属性和行为的一组对象进行抽象和封装的模板。类定义了对象的属性和行为,并提供了一种创建对象的方式。

对象是根据类定义的模板创建的实体,它具有类定义的属性和行为。对象是类的实例化,每个对象都是独立的,可以具有不同的属性值。

类在Java中通过关键字class来定义,而对象通过关键字new创建。

构造方法

特点

构造方法的名称必须与类名完全相同。

构造方法没有返回类型,包括void。

构造方法可以重载,即一个类可以有多个构造方法,只要它们的参数列表不同即可。

作用

初始化对象的属性,让对象在创建后就具有合适的初始值。

在对象创建过程中执行一些必要的操作。

对象与引用

Java中进行方法调用中传递参数时,参数传递有两种:

值传递:

(形参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

引用传递:

(形参数类型是引用数据类型参数):也称为传地址。

方法调用时,实际参 数是对象,这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的 操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法 执行中形式参数的改变将会影响实际参数。

基本类型传递的是该数据值本身。

引用类型传递的是对对象的引用,而不是对象本身 。

但是无论是值传递还是引用传递,其本质都是传值,所以也都统称值传递

关键字

this关键字

this在类中用来表示当前正在访问的对象,this.成员变量名--显示的访问当前对象的成员变量

常常用来区分同名的成员变量和局部变量

static关键字

static--静态

可以用来修饰类的成员变量,成员方法

static修饰属性

特点为静态成员变量也称为类变量,在内存中只有一份,所有成员共享

一般情况下,将类中所有对象都相同的属性设置为静态的

static修饰内容

随着类的加载而加载,类只要被加载了就可以直接通过类名访问

static修饰成员的方法

被称为静态方法,类方法,可以直接使用类名调用

静态的方法中,只能使用静态的成员变量,因为他们都是随着类的加载而加载的

非静态的方法可以使用静态的成员变量

静态的方法中不能使用this关键字,也不能用super关键字

代码块

类似于一个没有名称的方法体(代码块)

分为实例块静态块

实例块:

每次创建对象时自动执行

{

实例代码块内容

}

静态块:

在类被加载时自动执行

static{

静态代码块内容

}

类什么时候会被加载?

1,在运行类中的main方法

2,访问类中的静态成员变量和静态成员方法

3,创建类的对象时先加载类

问题:

项目越写越大,用到的类越来越多,会出现同名类,如何按照不同的功能管理类

java中使用包机制来管理类,

包的功能:

1,按照不同的功能来管理类

2.避免类重名

3,控制访问权限

注意:

当在一个类中,使用了另一个包中的类,使用前必须使用import关键字导入,使用本包中的类,以及java.lang包中的类不需要导入

java中每一个类都会属于一个包,所以使用时是通过类的全地址使用的--称为全类名

包的命名规范:

在包名中,可以使用.号来区分包的级别;包名一般情况下是小写,至少有三级 第一级 指该项目的类型,如com,org,gov等, 第二级 指项目所开发或者运行的公司名称,如:oracle,sun,huawei等 第三级 指项目的名称,如:bcms,oa,erp,cms等 第四级 指项目模块的名称,如:bean,action,exception等

访问权限

public

公共权限,可以修饰(类,成员变量,成员方法),公共权限修饰的成员可以在任何地方访问

protected

受保护权限,( 可以修饰成员变量,成员方法),在本类中,同包的其他类中可以访问到,可以在不同包的子类中访问

(default)

默认权限,可以修饰(类,成员变量,成员方法),同包的其他类中可以访问到

private

私有权限,可以修饰(可以修饰成员变量,成员方法),在本类中可以访问到

补充变量的分类:

数据类型:基本类型变量:byte short·······等基本数据类型

引用类型变量:类,数组,持有的是对象的引用地址

按照位置分类:
成员变量

定义在类中,可以使用权限修饰衬衫修饰

            在构造方法中进行自动的初始化赋值生命周期:静态:随着类的加载二加载,随着类的销毁而销毁非静态:随着对象的创建而创建,随着对象的销毁而销毁储存的位置:非静态:堆静态:方法区
局部变量

定义在方法中,不仅使用修饰符修饰

            必须我们自己初始化生命周期:方法调用创建,方法结束销毁储存的位置:栈

面向对象语言的三大特征

封装

一般意义上的封装:

例如将重复出现的代码抽取了一个函数,称为代码的封装(包装)

面向对象语言中的封装:

将类的某些信息使用不同的访问权限修饰符==隐藏==在类内部,不允许外部直接访问操作,而是通过该类提供的方法来实现对隐藏信息的操作和访问,方便加入控制语句,控制权就在自己的手上

封装案例1:将属性设置为私有权限

在其他类中不能任意的访问,只能通过类中提供的特殊的方法进行访问

private String name;
private int age;

向外提供一个公共的方法访问,可以在此方法中加入控制语句

//设置名字的方法
public void setName(String name){if(name.length()>2&&name.length()<6){this.name = name;}
}
//获取名字的方法
public String getName(){return this.name;
}

在IDEA中可以通过右键方法变量,选择Generate,点击setter或者getter,直接创建一个外部可用的方法

封装案例2:将类中的方法私有化

java设计模式:

解决某种问题的固定方式(算法)

单例模式:

让一个类,在一个程序中只能创建一个对象,将类的构造方法私有化,外界不能随意调用

//将构造方法私有化,在外界不能随意调用
private Window(){}
//向外界提供获得此对象的方法
//创建一个静态的window对象,类在第一次加载后在内存中生成唯一一份window对象
//每次加载时拿到的都是唯一的对象
static Window window = new Window();
public static Window getWindow(){return window;
}
public class TestWindow {public static void main(String[] args) {Window win = Window.setWindow();System.out.println(win);}
}

可以看到,此例中创建的每个window都的哈希值都相同于Window类中第一次创建的window,可以有效的避免创建多个对象,以达到在一个程序中只创建一个对象的作用

继承

就是将同一事物中共性的属性和行为进行抽取,定义在一个类中(基类)

其他类可以继承基类就可以拥有基类中的功能但不能使用基类中私有的内容

继承可以实现代码的复用性,以及可以在子类中扩展子类自己特有的功能,而不影响其他类

只要符合is-a关系(什么是什么关系,比如苹果是水果),就可以使用继承,一个类只能直接继承一个类,而间接的可以继承多个类,称为继承的传递性,例如b继承a,然后c继承b,则c也继承了a

一个类不显示的继承任何类的时候默认继承object类

Object类是java类体系中最大的类,object之上再也没有别的类

优点

提高了代码的复用性

减少了代码的冗余

增强了程序的扩展(在子类中扩展自己的内容)

继承的语法

extends关键字,在创建类的时候在类名后使用extends关键字继承别的类

public class Dog extends Animal{//Dog继承Animal的成员变量和成员方法,但是不能直接访问父类私有的内容
}

方法的重写

当父类的方法功能实现不能满足子类需求时,可以对方法进行重写

子类可以对从父类中继承类的方法就进行改造,在程序执行时,子类的方法将覆盖父类的方法,称为方法的重写

方法重写的规则

  1. 子类重写的方法必须和父类被重写的方法名称,参数列表相同
  2. 子类重写的方法的返回值类型与父类保存一致。
  3. 子类重写的方法使用的访问权限不能小于父类被重写方法的访问权限。注意:① 父类私有方法不能重写 ② 跨包的父类默认权限的方法也不能重写
  4. 子类方法抛出的异常不能大于父类被重写方法的异常

super关键字

在Java类中使用super来调用父类中的指定操作:

1,super可用于访问父类中定义的属性

2,super可用于调用父类中定义的成员方法

3,super可用于在子类构造器中调用父类的构造器

注意:

尤其当子父类出现同名成员时,可以用super表明调用的是父类中的成员 super的追溯不仅限于直接父类还可以是父类的父类 super和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识

super调用的是父类的成员,而不是表示一个父类对象

@Override

是java中的一个注解标签,定义在重写的方法上面,表示此方法是从父类重写而来,也可以不用添加,只要重写的方法结构与父类一直,也算正确的重写

建议保留:

1,编译器可以进行语法验证

2,阅读代码时可以明确的知道此方法是重写的

在IDEA中可以通过在子类括号内部的空白中右键空白处选择Generate,点击Override Mathod

这样就可以创建一个Override的重写方法,进行修改即可

继承中的构造方法

1.子类继承父类时,不会继承父类的构造方法。

只能通过“super(形参列表)” 的方式调用父类指定的构造方法。

2.规定super(形参列表),必须声明在构造器的首行

3.如果在子类构造器的首行没有显示调用super(形参列表),则子类此构造器 默认调用super(),即调用父类中空参的构造器。

4.这么做是为了保证先对父类成员进行初始化

抽象类

抽象方法

抽象方法是一种特殊的方法:它只有方法声明,而没有具体的实现

什么时候需要定义抽象的方法:

在一些体系结构的顶端类只需要定义功能而没有必要实现,因为不同子类中的实现都不同,这个时候就可以将这个方法声明为抽象方法

抽象方法必须用abstract关键字进行修饰,有抽象方法的类就叫抽象类,而抽象类也需要用abstract来修饰,抽象类中可能包含抽象方法,所以类也是抽象的

/*
一个类中如果包含抽象方法,那么这个类一定是抽象类
使用abstract修饰的类就是抽象类
*/
public abstract class Animal(){//抽象方法,没有方法体,使用abstract修饰public abstract void eat();
}

抽象类的特点

抽象类不能被创建对象,其他功能与正常的类都相同,可以有成员变量,成员方法,包括构造方法都可以有。

抽象类的主要作用是在上层定义功能,只能用作基类,在子类中进行继承和重写。

继承抽象类的非抽象类必须实现其中所有的抽象方法,而已实现方法的参数,返回值要和抽象类中的方法一样,否则该类也必须声明为抽象类。

多态

同一种事务在不同的时刻表现不同的状态

父类的引用指向子类对象

前提是必须要有继承关系,此时构成多态

两个不同的时间段:

编译期:写代码时 类型是Animal(父类类型)

运行期:运行代码时 类型是具体的子类类型

多态也称向上转型

Animal dog = new Dog();dog.eat();/*在编译时dog调用为Animal类的方法,但在运行时会调用子类dog中重写的方法*/
Animal cat = new Cat();

用父类类型表示任意的子类类型对象,利于程序扩展

成员方法:编译看左边,运行看右边

静态成员方法:编译和运行都看左边

成员变量:编译和运行都看左边

向下转型:

将父类类型向下强制转为子类类型

Animal dog = new Dog();//此时编译调用子类的方法会报错
Dog d = (Dog)dog;//此时d就可以在编译中使用子类Dog中的方法
d.eat();

instanceof关键字

作用是:测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。

左边是对象,右边是类,当对象是右边类或子类创建的对象时,返回true,否则false

父类类型与指定类型相同返回true,否则返回false

if(animal instanceof Dog){Dog dog = (Dog)animal;dog.lookhome();
}

final关键字

用于修饰类,方法,参数,属性(成员变量)

final修饰的类,不能被继承,所以不能修饰抽象类,例如java中String类不可被继承

final修饰的类,子类不能重写

final修饰方法的参数,参数值在方法中不能被改变

情况1:在类定义时,值就确定,直接赋值,赋值后值不改变的,建议使用static修饰

final static int a = 10;

情况2:在类定义时值不明确,必须在创建对象后,在构造方法中对其进行赋值,每个对象中拥有一个常量

public class Demo {public void test(final int a){}final int count;public Demo(int count){this.count = count;}public static void main(String[] args) {Demo f = new Demo(1);}
}

常量一般建议全部使用大写字母定义

接口

接口的定义

接口是计算机领域的名词,表示一种功能的定义

例如usb接口 定义usb接口的规范,让其他设备去实现

接口可以看做是一种特殊的抽象类,里面也可以包含抽象方法

接口不能被创建对象

被其他类实现(继承关系),重写抽象方法

主要也是用于定义功能的

implements关键字

类通过implements关键字实现接口 类实现接口后要么重写接口中的所有抽象方法 要么将该类声明为抽象类

注意

接口可以继承多个接口,一个类可以实现多个接口

接口不能实例化对象

接口与实现类之间存在多态性

这篇关于JavaSE基础总结复习之面向对象の知识总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088209

相关文章

关于C++中的虚拟继承的一些总结(虚拟继承,覆盖,派生,隐藏)

1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下: class A class B1:public virtual A; class B2:pu

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

可视化实训复习篇章

前言: 今天,我们来学习seaborn库可视化,当然,这个建立在Matplotlib的基础上,话不多说,进入今天的正题吧!当然,这个是《python数据分析与应用》书中,大家有需求的可以参考这本书。 知识点: Matplotlib中有两套接口分别是pyplot和pyylab,即绘图时候主要导入的是Matplotlib库下的两个子模块(两个py文件)matplotlib.pyplot和matp

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上,或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景: 表单处理:通过 @ModelAttribute 将表单数据绑定到模型对象上预处理逻辑:在请求处理之前