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

注意

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

接口不能实例化对象

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

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

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

相关文章

【面试干货】HashSet 和 TreeSet 的区别

【面试干货】HashSet 和 TreeSet 的区别 1、实现方式HashSetTreeSet 2、性能添加、删除和查找操作的时间复杂度HashSetTreeSet 3、元素唯一性4、迭代顺序HashSetTreeSet 5、使用场景HashSetTreeSet 6、示例代码 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不…

阅读笔记:明朝那些事儿妖孽横行的宫廷

明朝那些事儿第四部看完了&#xff0c;合上书本给我印象比较深刻的文臣要数王守仁&#xff0c;不愧为明朝的军事家&#xff0c;思想家&#xff0c;文学家&#xff0c;教育家&#xff0c;他经过多年的思索、磨难、追求&#xff0c;终于有一天&#xff0c;在穷乡僻壤&#xff0c;…

Linux的基本指令第二篇

1.cat - 查看文件 语法&#xff1a;cat [选项] [文件] 功能&#xff1a; 查看目标文件的内容 -b 对非空输出行编号 -n对输出的所有行编号 -s不输出多行空行 现有一个文件test.c cat -n test.c cat -b test.c cat -s test.c 创建一个新文件 加入源文件的内容 || …

数据分析:置换检验Permutation Test

欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 介绍 置换检验是一种非参数统计方法&#xff0c;它不依赖于数据的分布形态&#xff0c;因此特别适…

Linux——man帮助命令

一、man 获得帮助信息 基本语法&#xff1a;man [命令或配置文件] &#xff08;功能描述&#xff1a;获得帮助信息&#xff09; 查看 ls 命令的帮助信息 [roothadoop101 ~]# man ls man [数字] [函数] 1、Standard commands &#xff08;标准命令&#xff09; 2、System…

Apple创始人斯蒂夫乔布斯2005年在斯坦福大学的毕业典礼演讲:Steve Jobs‘ 2005 Stanford Commencement Address

Steve Jobs’ 2005 Stanford Commencement Address Link: https://www.youtube.com/watch?vUF8uR6Z6KLc and https://www.youtube.com/watch?vHd_ptbiPoXM 文章目录 Steve Jobs 2005 Stanford Commencement AddressSummaryVocabularyTranscriptConnecting the dotsLove and …

VC++支持断点续下或续传的功能

VC使用多线程和Socket实现断点续下 一、断点续下的基本原理&#xff1a; 1.断点续传的理解可以分为两部分&#xff1a;一部分是断点&#xff0c;一部分是续传。断点的由来是在下载过程中&#xff0c;将一个下载文件分成了多个部分&#xff0c;同时进行多个部分一起的下载&…

Adaboost集成学习 | Adaboost集成学习特征重要性分析(Python)

目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 Adaboost集成学习特征重要性分析(Python)Adaboost(自适应增强)是一种常用的集成学习方法,用于提高机器学习算法的准确性。它通过组合多个弱分类器来构建一个强分类器。在Adaboost中,每个弱分类器都被赋予…

Ocam:高效录屏,屏幕录制最佳?

名人说&#xff1a;&#xff1a;一点浩然气&#xff0c;千里快哉风。 ——苏轼 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、软件介绍1、Ocam2、核心特点 二、下载安装1、下载2、安装 三、使用方法 很高兴你…

【5】apollo编写python节点步骤及实例

在workspace/modules下新建包buildtool create --template component modules/test_one 编译包 buildtool build -p modules/test_two/ 增加自己的proto消息 在刚才自动生成的proto文件里面添加自己定义的消息,记得重新编译. syntax "proto2";package apollo;…

【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

数据库的概念-数据库、数据库管理系统、数据库系统、数据库管理员、数据库设计人员、开发管理使用数据库系统的人员

一、数据库&#xff08;DB&#xff09; 1、数据库就是存储数据的仓库&#xff0c;只不过这个仓库是在计算机存储设备上 2、严格的说&#xff0c;数据库是长期存储在计算机内、有组织的、统一管理的、可共享的相关数据的集合 3、数据库应是为一个特定目标而设计、构建并装入数…

ClickHouse备份方案

ClickHouse备份方案主要包括以下几种方法&#xff1a; 一、使用clickhouse-backup工具&#xff1a; &#xff08;参考地址&#xff1a;https://blog.csdn.net/qq_43510111/article/details/136570850&#xff09; **安装与配置&#xff1a;**首先从GitHub获取clickhouse-bac…

利用MSSQL模拟提权

点击星标&#xff0c;即时接收最新推文 本文选自《内网安全攻防&#xff1a;红队之路》 扫描二维码五折购书 利用MSSQL模拟提权 在MS SQL数据库&#xff0c;可以使用EXECUTE AS语句&#xff0c;以其他用户的上下文执行SQL查询。需要注意的是只有明确授予模拟&#xff08;Impers…

38.MessageToMessageCodec线程安全可被共享Handler

handler被注解@Sharable修饰的。 这样的handler,创建一个实例就够了。例如: ByteToMessageCodec的子类不能被@Sharable修饰 如果自定义类是MessageToMessageCodec的子类就是线程共享的,可以被@Sharable修饰的 package com.xkj.protocol;import com.xkj.message.Message; i…

Go日常分享 - error类型是指针类型吗?

背景 这个问题的产生来源于小泉在开发rpc接口时返回error遇到的问题&#xff0c;开发时想在defer里对err进行最终的统一处理赋值&#xff0c;发现外层接收一直都未生效。问题可以简化为成下面的小demo。 func returnError() error {var err errordefer func() {//err errors…

NSIS 入门教程 (三)

引言 在教程的第二部分中&#xff0c;我们为安装程序增加了一个卸载程序&#xff0c;并查看了一些其他的向导页面以及安装部分的选择。第三部分的目标是使安装程序的外观更加现代化。 更现代的外观 为了给安装程序一个更现代的外观&#xff0c;我们要启用现代用户界面。要提…

【栈和队列】

目录 1&#xff0c;栈&#xff08;Stack&#xff09; 1.1 概念 1.2 栈的使用 1.3 栈的模拟实现 1.4 栈的应用场景 1.5 概念区分 1.6 使用链表来实现栈 2&#xff0c; 队列(Queue) 2.1 概念 2.2 队列的使用 2.3 队列模拟实现 3&#xff0c;双端队列 (Deque) 4&…

【计算机组成原理】部分题目汇总

计算机组成原理 部分题目汇总 一. 简答题 RISC和CICS 简要说明&#xff0c;比较异同 RISC&#xff08;精简指令集&#xff09;注重简单快速的指令执行&#xff0c;使用少量通用寄存器&#xff0c;固定长度指令&#xff0c;优化硬件性能&#xff0c;依赖软件&#xff08;如编译…

递归调用,将源路径下所有文件文件夹复制到目标路径中.

其实代码demo很简洁&#xff0c;只是逻辑有点绕&#xff0c;主要是要一层一层调用自己&#xff0c;要清楚当前是第几层调用&#xff0c;及递归调用时进的点和出的点在哪儿&#xff0c;一切就清晰明了了。 /// <summary>/// 删除指定目录下面的所有文件和文件夹/// </s…