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关键字实现接口 类实现接口后要么重写接口中的所有抽象方法 要么将该类声明为抽象类

注意

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

接口不能实例化对象

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

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

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

相关文章

194.回溯算法:组合总和||(力扣)

代码解决 class Solution { public:vector<int> res; // 当前组合的临时存储vector<vector<int>> result; // 存储所有符合条件的组合// 回溯函数void backtracing(vector<int>& candidates, int target, int flag, int index, vector<bool>…

Azure虚拟机

Azure创建虚拟机 一、创建步骤(1)登录到Azure portal(2)启动新实例(3)填写必要信息选择系统镜像(4)选择实例类型(5)配置管理员帐户和入站端口规则(6) 磁盘&#xff1a;保持默认(7) 网络&#xff1a;保持默认(8) 管理&#xff1a;保持默认(9) Monitoring&#xff1a;Boot diagno…

Django之云存储(二)

一、Django使用云存储 建立项目 django-admin startproject project_demo创建子应用 python manage.py startapp app_name修改配置文件,设置模板视图路径 settings.py TEMPLATES = [{BACKEND: django.template.backends.django.DjangoTemplates,DIRS: [os.path.join(BASE_DIR,…

nn.Embedding 根据索引生成的向量有权重吗

import torch import torch.nn as nn 假设有一个大小为 10x3 的 Embedding 层&#xff0c;其中有 10 个单词&#xff0c;每个单词用一个长度为 3 的向量表示 num_words 10 embedding_dim 3 创建 Embedding 层 embedding_layer nn.Embedding(num_words, embedding_dim) p…

【LinuxC语言】深入理解IP地址与端口号

文章目录 前言端口号IP地址IP地址的分类主机地址与网络地址多播是什么子网掩码特殊的地址与私有的地址总结前言 在计算机网络中,IP 地址和端口号是两个非常重要的概念。IP 地址用于标识网络上的设备,而端口号则用于在同一设备上区分不同的服务或应用。在 Linux C 语言编程中…

腾讯云API安全保障措施?有哪些调用限制?

腾讯云API的调用效率如何优化&#xff1f;怎么使用API接口发信&#xff1f; 腾讯云API作为腾讯云提供的核心服务之一&#xff0c;广泛应用于各行各业。然而&#xff0c;随着API应用的普及&#xff0c;API安全问题也日益突出。AokSend将详细探讨腾讯云API的安全保障措施&#x…

尚品汇-(五)

商品管理模块开发 下面用到的表&#xff1a; 属性表&#xff1a; 属性值表&#xff1a; 分类一表&#xff1a; 分类二表&#xff1a; 分类三表&#xff1a; 1.1在service 模块下搭建service-product 搭建过程同common-util 添加配置文件application.yml spring:applicatio…

Leetcode 2713. 矩阵中严格递增的单元格数(DFS DP)

Leetcode 2713. 矩阵中严格递增的单元格数 DFS 容易想到&#xff0c;枚举每个点作为起点&#xff0c;向同行同列的可跳跃点dfs&#xff0c;维护全局变量记录可达的最远距离 超时&#xff0c;通过样例193 / 566 class Solution {int res 0;public void dfs(int[][] mat, in…

opencv中凸包运算函数convexHull()的使用

操作系统&#xff1a;ubuntu22.04OpenCV版本&#xff1a;OpenCV4.9IDE:Visual Studio Code编程语言&#xff1a;C11 1.功能描述 该函数cv::convexHull用于寻找一组二维点集的凸包&#xff0c;采用的是Sklansky算法[242]&#xff0c;当前实现中具有O(N logN)的时间复杂度。 1…

SuiNS发布子名及新命名标准,推动Web3身份结构的进步

SuiNS子名是Sui Name Service的强大扩展&#xff0c;最近与新命名标准一起发布。子名允许用户在一个主要的SuiNS名下创建额外的自定义身份&#xff0c;而无需额外费用。用户 gia 可以创建如 gaminggia 或 lendinggia 这样的子名&#xff0c;从而增强个人组织和支持群组与组织的…

机器人学习和研究的物质基础包含哪些内容?

为啥写这个&#xff1f; 在很多博客里面提及物质基础&#xff0c;没想到询问的也非常多&#xff0c;写一篇详细一点的。 之前的故事 不合格且失败机器人讲师个人理解的自身课程成本情况-CSDN博客 迷失自我无缘多彩世界-2024--CSDN博客 物质基础与情绪稳定的关系-CSDN博客 …

docker搭建mongo分片集群

1、mongo分片集群 MongoDB分片集群是一种可扩展的数据库架构&#xff0c;用于处理大量数据和高并发访问。它将数据分成多个分片&#xff0c;并将这些分片分布在多个服务器上&#xff0c;从而实现数据的平衡存储和并行处理 。 通过使用MongoDB的分片集&#xff0c;可以实现数据…

ViT:5 Knowledge Distillation

实时了解业内动态&#xff0c;论文是最好的桥梁&#xff0c;专栏精选论文重点解读热点论文&#xff0c;围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;…

基于SpringBoot+Vue汽车配件销售管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

[SAP ABAP] 读取内表数据

1.读取单条数据 1.1 索引查找 语法格式 READ TABLE <itab> INTO <wa> INDEX <idx>.<itab>&#xff1a;代表内表 <wa>&#xff1a;代表工作区 <idx>&#xff1a;代表索引值 示例1 结果显示&#xff1a; 1.2 关键字查找 READ TABLE <…

JVM专题三:Java代码如何运行

通过前面的第一篇文章&#xff0c;对JVM整体脉络有了一个大概了解。第二篇文章我们通过对高级语言低级语言不同特性的探讨引出了Java的编译过程。有了前面的铺垫&#xff0c;咱们今天正式进入Java到底是如何运行起来的探讨。 目前大部分公司都是使用maven作为包管理工具&#x…

【华东南AWDP】第十七届全国大学生信息安全竞赛 CISCN 2024 创新实践能力赛区域赛 部分题解WP

前言&#xff1a;这次区域赛AWDP安恒作为支持&#xff0c;赛制风格遵循安恒&#xff0c;一小时check一次。室温35在室内坐了8小时&#xff0c;午饭是藿香正气水拌冰水。这场总体下来中规中矩吧。 WEB-welcome-BREAK CtrlU拿到flag WEB-submit-BREAK 文件上传&#xff0c;简单…

threejs视频融合 webgl

threejs三维视频融合 let objList []; const clock new THREE.Clock(); const container document.getElementById( container );const stats new Stats(); container.appendChild( stats.dom );const renderer new THREE.WebGLRenderer( { antialias: true } ); rendere…

时序预测 | Matlab基于Transformer多变量时间序列多步预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于Transformer多变量时间序列多步预测&#xff1b; 2.多变量时间序列数据集&#xff08;负荷数据集&#xff09;&#xff0c;采用前96个时刻预测的特征和负荷数据预测未来96个时刻的负荷数据&#xff1b; 3…

sql资料库

1、distinct(关键词distinct用于返回唯一不同的值)&#xff1a;查询结果中去除重复行的关键字 select distinct(university) from user_profile select distinct university from user_profile distinct是紧跟在select后面的&#xff0c;不能在其他位置&#xff0c;不然就…