JAVASE相关知识补充

基础知识

类作为成员变量类型:

接口作为成员变量类型:

接口作为方法的参数或者返回值

Object类:

java.lang.object

类object是类层次结构的超(根)类

 每个类都是用object作为父类

所有对象包括数组都实现这个类的方法

toString : 打印字符串的相关属性,没有重写该方法的话,打印的是对象的地址值,否则打印的即字符串的相关属性即重写了tostring方法

Equals方法:

基本类型数据比较的是值

引用类型数据比较的是地址值

因为equals方法比较的是两个对象的地址值,所以没有太大意义,故而需要对这方法进行重写

Idea工具的快捷键以及一些简单的设置:

字体:file——》settings-font

背景颜色调节:

快捷键:删除一行ctrl+Y

退出任何窗口都可以使用esc键

任何新增新建的快捷键alt+insert

窗口变大变小ctrl+shift+F12

Alt+左右箭头切换class文件

运行ctrl+shift+F10

提示方法的参数CTRL+P

Final修饰的类无法被继承;

final修饰的方法不能被覆盖重写;

final修饰的局部变量只能被赋值一次;

final修饰的引用一旦指向某个对象,就不能再指向其他对象但该引用指向的对象内部的数据可以被改变;

final修饰的实例变量在定义时就需要手动赋值,或者在系统赋值之前为其赋值即编写过程中的赋值要早于系统默认赋值即早于系统给的无参构造方法赋值之前;

Final修饰的实例变量一般会和static联合使用,成为常量:

Public static final string COUNTRY_NAME=“中国”

抽象类

  1. 抽象类定义:抽象类是把类之间具有的共同特征提取出来形成的,抽象类是无法创建对象的,即无法实例化,需要实现类来继承对该类进行实现
  2. 抽象类也属于引用数据类型
  3. 抽象类的定义:

修饰符列表 abstract class 类名{

类  体;

}

  1. abstract和final两个是对立的,不能同时使用
  2. 抽象类的子类可以是抽象类,也可以是实现类
  3. 抽象类虽然本身无法进行实例化,但是含有构造方法,供子类进行创建对象使用
  4. 抽象类关联到一个概念:抽象方法。

抽象方法表示没有实现的方法,没有方法体的方法,定义格式如:

Public abstract void doSome();

抽象方法额特点是:

  1. 没有方法体,以分号结尾;
  2. 前面的修饰符列表中有abstract关键字
  1. 抽象类中不一定有抽象方法,但是抽象方法一定在抽象类中
  2. 一个非抽象类,继承抽象类,必须将抽象类中的抽象方法进行覆盖/重写/实现.

面相抽象编程:

调用A.XXX,A是抽象类的,面向抽象编程,不要面向具体编程,降低程序的耦合度,提尕程序的扩展力,这样的编程思想符合OCP原则

接口

一、基础语法:

  1. 接口也是一种引用数据类型,编译之后也是.class文件
  2. 接口也是完全抽象的。(抽象类是半抽象)或者也可以说接口是一种特殊的抽象类
  3. 接口的定义方式:

【修饰符列表】interface 接口名{}

  1. 接口支持单继承,也支持多继承;
  2. 接口中只包含两部分内容,一部分是常量,一部分是抽象方法
  3. 接口中所有的元素的都是public修饰的,即都是公开的
  4. 接口中的抽象方法定义时,public abstract修饰符可以省略
  5. 接口中的方法都是抽象方法,所以接口中的方法不能有方法体,即没有“{}”
  6. 接口中定义常量时可以省略public abstract final,但是常量值不能被修改。
  7. 当一个非抽象的类实现接口时,必须将接口中的所有方法都重写(实现、覆盖)接口和接口之间恶意实现多继承,
  8. 一个类亦可以实现多个接口,弥补了java中类与类之间的单继承缺陷
  9. Extends和implement可以共存,extends在前,implement在后
  10. 使用接口在编程过程中可以使用多态

类和类之间叫做继承,类和接口之间叫做实现

继承使用关键字extends完成

实现使用关键字implement完成

接口中的方法都是公共的

接口和接口之间进行强制类型转换的时候,没有继承也可以进行强转,但是运行时可能会出现ClassCastException异常

  • 接口在开发过程中的作用
  1. 接口在开发中的作用类似于多态的作用。
  2. 多态:面向抽象进行编程,不要面向具体编程。降低程序额的耦合度,提高程序的扩展力,符合OCP开发原则,接口的使用离不开多态机制
  3. 接口可以解耦合,任何一个接口都有调用者和实现者,接口可以将调用者和实现者解耦合,调用者面向接口调用,实现者面向接口编写实现;

  • 类和类之间的关系

1、Is a、has a 、like a

2、Is a :表示继承

3、Has a:表示关联关系,属性形式存在

4、Like a:表示实现关系,类实现接口

抽象类和接口有什么区别

1、抽象类是半抽象的,接口是完全抽象的;

2、抽象类中有构造方法,接口中没有构造方法;

3、接口和接口之间能支持多继承,类和类之间只能实现单继承;

4、一个类可以实现多个接口,一个抽象类只能继承一个类(单继承);

5、接口中只允许出现常量和抽象方法

关于java语言中的package和import机制

  1. Package是java中的包机制,作用是为了方便程序的管理不同功能的分别存放在不同的包下;
  2. Package是一个关键字,后面家包名
  3. 包名的命名规范:一般是采用公司域名倒叙的方式

Object类中的几个主要的方法

Protected Object clone()   //负责对象克隆的

Int hashCode()          //获取对象哈希值的方法

boolean equals(Object obj) //判断两个对象是否相等

String toString()         //将对象转换成字符串的形式

Protected void finalize()   //垃圾回收器负责调用的方法

1、String toString()        //将对象转换成字符串的形式

public String toString(){getClass().getName() + '@' + Integer.toHexString(hashCode())}
//重写toString()方法之后,年月日方才会以日期的形式显示,否则输出的是Demo05.myTime@14ae5a5即myTime@+地址值public String toString(){return this.year+"年"+this.month+"月"+this.day+"日";}
  1. boolean equals(Object obj) //判断两个对象是否相等
public boolean equals(Object obj){Return (this==obj);
}

Obj中的“==”比较的是两个量的地址值

//实际上String也是一个类,不属于基本引用类型,并且String类有其本身的构造方法

String类已经重写了equals方法和toString()方法,所以比较两个字符串不能使用“==”,必须使用“equals”,即equals方法是通用的;

重写equals方法时一定要重写彻底

  1. finalize()方法:

Protected void finalize() throws Throwsble{}

此方法是protected修饰的,此方法只有一个方法体,内部没有代码,而且这个方法是用protected修饰的,该方法不需要程序员手动调用,JVM的垃圾回收器负责调用此方法。

静态代码块在类加载时执行,并且只执行一次。:

Static{

........

}

4Int hashCode()          //获取对象哈希值的方法

在object中hashCode方法:

Public native int hashCode();

这个方法不是抽象方法,带有native关键字底层调用C++程序,调用之后会放回一个哈希值

匿名内部类:

内部类:在类的内部定义了一个新的类

内部类分类(三种):

静态内部类:类似于静态变量

实例内部类:类似于实例变量

局部内部类:类似于局部变量

class Test01{

//静态内部类

Static class Inner1{

}

//实例内部类

class Inner2{

}

Public void doSome(){

Int i=100

//局部内部类

class inner3

}

}

  数组 

  1. 数组的优点和缺点:

第一:空间存储上,内存地址是连续的。

第二:每个元素占用的空间大小相同。

第三:知道首元素的内存地址。

第四:通过下标可以计算出偏移量。

通过一个数学表达式,就可以快速计算出某个下表位置上元素的内存地址。

直接通过内存地址定位,效率高

优点:检索效率高

缺点:随机增删效率非常低,数组无法存储大量的数据

注意:数组的最后一个元素的增删效率不受影响。

  1. 一维数组的静态初始化和动态初始化

静态初始化:

Int 【】 a={1,2,3,4};

Object[] objs={new Object(),new Object(),new Object()};

动态初始化:

int [] a=new int [5];//5个长度的数组,每个元素的默认值都是0

Object[] objs=new Object[4];//4个长度,每个元素的默认值都是null

  1. 一维数组的遍历:
Int a[]=new int[4];for (int i = 0; i < a.length; i++) {System.out.println(a[i]);}
  1. 二维数组的静态和动态初始化:

静态初始化;

int [][] a={{100,200,4,300},{1,2,6,4},{4,5,68,9}};

动态初始化:

int[][] a= new int[3][4];//动态初始化数组

Int[][] a=new int[3][4];

  1. 二维数组的遍历:
int[][] a= new int[3][4];for (int i = 0; i < a.length; i++) {for (int j = 0; j < a[i].length; j++) {System.out.println(a[i][j]);}System.out.println();}
  1. 数组的扩容;
 
 关于java中数组的扩容:* 在java中,数组的长度一旦确定就不可变,当数组满了的时候,需要扩容* java中数组的扩容是:*       先创建一个更大容量的数组,然后将原来数组内的所有数据进行全部拷贝* 数组的扩容效率较低,设计拷贝问题,拷贝方法: System.arraycopy();* */
public class ArrayTest07 {public static void main(String[] args) {int [] src={1,11,2,3,4};int[] dest=new int [8];//数组的扩容方法System.arraycopy(src,0,dest,1,src.length);//遍历目标数组for (int i = 0; i <dest.length ; i++) {System.out.println(dest[i]);}}}

数组常见的算法

7.1排序算法:

冒泡排序算法

选择排序算法

查找算法:

二分法查找

7.2、算法实际上在java中已经封装好了,如果需要排序,只调用方法就行。例如:java中提供了一个数组的工具类:

Java.util.Arrays

Arrays是一个工具类

其中有一个sort()方法,可以排序。静态方法,直接使用类名调用就行。

7.3、选择排序:

选择排序比冒泡排序的效率高。

高在交换位置的次数上。

选择排序的交换位置是有意义的。

循环一次,然后找出参加比较的这堆数据中最小的,拿着这个最小的数据和前面的数据进行交换位置。

 枚举

  1. 枚举是一种引用数据类型
  2. 枚举类型的定义语法:

enum 枚举类型名称{

枚举值1,枚举值2,····

}

  1. 结果只有两种情况的,建议使用布尔类型。
  2. 结果超过两种并且还可以一种一种列举出来的,建议使用枚举类型。

异常

异常在java中是以类的形式存在的,可以创建对象

Final\finally\finalize:

Final:关键字,修饰的变量无法重新赋值、修饰的方法不能被覆盖、修饰的类不能被继承

Finally:关键字,与try联合使用,finally中的语句一定要执行

Finalize:标识符,是一个OBject类中的一个方法名,由GC垃圾回收器负责调用。

经典异常:空指针异常:NullPointerException类型转换异常ClasscastException数组下标越界异常:ArrayIndexOutOfBoundsException数字格式化异常:NumberFormatException

总结异常中的关键字:

异常捕捉:try\catch\finally

Throws:在方法声明的位置上使用,表示上报异常信息给调用者

Throw: 手动抛出异常

集合

  1. 数组实际上是一种集合,是一种数据的容器。可以一次容纳多个对象
  2. 集合不能直接存储基本数据类型,也不能直接存储java对象,当中存储的是java对象的地址,即存储的是引用数据类型。集合也可以是一个对象,也有内存地址。
  3. 在java中,每一个不同的集合,底层会对应不同的数据结构,网不通的集合中存储元素,等于将数据放到了不同的数据结构当中。
  4. 集合在java.util包下,所有的接口和类
  5. 在java中结合分为两大类:

一类是单个方式存储元素:这一类集合中超级父接口:java.util.Collection

一类是以键值对的方式进行存储元素:这一类集合中超级父接口:java.util.Map

集合中的重要内容

  1. 主要的集合类:

Arraylist

Linkedlist

HashSet

HashMap

TreeMap

TreeSet

Properties

  1. 集合的创建
  2. 向集合中添加元素
  3. 取出集合中的元素
  4. 集合的遍历

IO流:

什么是IO?

        I:Input    O:output

IO流的分类:

        一种是按照流的方向进行分类;

        以内存作为参照物

        往内存中去问,叫做输入(Input)

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

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

相关文章

【论文阅读】Learning Texture Transformer Network for Image Super-Resolution

Learning Texture Transformer Network for Image Super-Resolution 论文地址Abstract1. 简介2.相关工作2.1单图像超分辨率2.2 Reference-based Image Super-Resolution 3. 方法3.1. Texture TransformerLearnable Texture Extractor 可学习的纹理提取器。Relevance Embedding.…

什么是binutils-arm-linux-gnueabi

2024年5月3日&#xff0c;周五晚上 binutils-arm-linux-gnueabi 是针对 ARM 架构的 Linux 系统开发的 GNU Binutils 工具链。Binutils 是一组用于汇编、链接和转换目标文件的工具&#xff0c;包括 as (汇编器)、ld (链接器)、objcopy (目标文件转换工具) 等。 binutils-arm-li…

【Nginx 开发】Nginx高可用集群

配置集群 高可用集群配置高可用集群 高可用集群 为什么需要配置Nginx集群&#xff1a; 在实际开发过程中Nginx也有可能宕机&#xff0c;如果我们能够将Nginx配置成高可用&#xff0c;当Nginx宕机之后&#xff0c;在集群中我们可以将请求转发到从Nginx服务器当中&#xff0c;由…

【代码随想录——数组篇】

代码随想录——数组篇 2. 二分查找3. 移除元素4. 有序数组的平方5. 长度最小的子数组6. 螺旋矩阵II 2. 二分查找 力扣题目链接 前提&#xff1a; 有序数组数组中无重复元素 代码&#xff1a; &#xff08;版本一&#xff09;左闭右闭区间 class Solution {public int sea…

AcWing 850. Dijkstra求最短路 II

Problem: AcWing 850. Dijkstra求最短路 II 文章目录 思路解题方法复杂度Code 思路 这是一个经典的 Dijkstra 算法问题&#xff0c;我们需要找到从点 1 到点 n 的最短路径。Dijkstra 算法是一种贪心算法&#xff0c;它总是选择当前未访问过的节点中距离最短的一个&#xff0c;然…

什么是Boot Loader?为什么需要Boot Loader?

2024年5月4日&#xff0c;周六下午 什么是Boot Loader 引导加载程序&#xff08;Boot Loader&#xff09;是一种软件&#xff0c;位于计算机系统的启动过程中&#xff0c;其主要功能是在系统上电后负责引导加载操作系统内核。Boot Loader通常存储在计算机系统的固化存储设备&a…

代码随想录算法训练营第14天 | 144. 二叉树的前序遍历 | 145. 二叉树的后序遍历 | 94. 二叉树的中序遍历

144. 二叉树的前序遍历 解1: 递归 void preorder(struct TreeNode* root, int *array, int *idx) {if (root ! NULL) {array[(*idx)] root->val;preorder(root->left, array, idx);preorder(root->right, array, idx);} }int* preorderTraversal(struct TreeNode* …

【代码随想录】day49

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、121. 买卖股票的最佳时机二、122.买卖股票的最佳时机II 一、121. 买卖股票的最佳时机 class Solution { public:int maxProfit(vector<int>& prices…

Qt QImageWriter类介绍

1.简介 QImageWriter 用于写入图像文件的类。它提供了将 QImage 对象保存到不同图像格式文件的功能&#xff0c;包括但不限于 PNG、JPEG、BMP 等。QImageWriter 可以将图像写入文件&#xff0c;也可以写入任何 QIODevice&#xff0c;如 QByteArray&#xff0c;这使得它非常灵活…

pytorch简单神经网络模型训练

目录 一、导入包 二、数据预处理 三、定义神经网络 四、训练模型和测试模型 五、程序入口 一、导入包 import torch import torch.nn as nn import torch.optim as optim # 导入优化器 from torchvision import datasets, transforms # 导入数据集和数据预处理库 from tor…

python中type,object,class 三者关系

type,object,class 三者关系 在python中&#xff0c;所有类的创建关系遵循&#xff1a; type -> int -> 1 type -> class -> obj例如&#xff1a; a 1 b "abc" print(type(1)) # <class int> 返回对象的类型 print(type(int)) …

基于OpenCv的图像金字塔

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

sql-server--索引

SQL Server提供了五种索引类型&#xff0c;它们分别是 唯一索引 主键索引 聚集索引 &#xff08; Clustered Index &#xff09; 非聚集索引 &#xff08; Nonclustered Index &#xff09; 视图索引 --tb_student表的sno列创建索引 create index ix_sno on tb_student(…

【讲解如何OpenCV入门】

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

需求规格说明书编制书(word原件)

1 范围 1.1 系统概述 1.2 文档概述 1.3 术语及缩略语 2 引用文档 3 需求 3.1 要求的状态和方式 3.2 系统能力需求 3.3 系统外部接口需求 3.3.1 管理接口 3.3.2 业务接口 3.4 系统内部接口需求 3.5 系统内部数据需求 3.6 适应性需求 3.7 安全性需求 3.8 保密性需…

SQL语句每日一练十四

1378. 使用唯一标识码替换员工ID 题目 Employees 表&#xff1a; ------------------------ | Column Name | Type | ------------------------ | id | int | | name | varchar | ------------------------ 在 SQL 中&#xff0c;id 是这张表的…

GiantPandaCV | FasterTransformer Decoding 源码分析(二)-Decoder框架介绍

本文来源公众号“GiantPandaCV”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;FasterTransformer Decoding 源码分析(二)-Decoder框架介绍 作者丨进击的Killua 来源丨https://zhuanlan.zhihu.com/p/669303360 编辑丨GiantPand…

【Python编程实践1/3】模块

目录 目标 模块 import ​编辑 代码小结 题目 from...import 随机模块 代码小结 randint函数 骰子大战 choice函数 总结 目标 拧一颗螺丝&#xff0c;只会用到螺丝刀&#xff1b;但是修一台汽车&#xff0c;需要一整套汽修的工具。函数就像螺丝刀&#xff0c;可以帮…

寻找自己的25号底片

今天没啥知识干货昂&#xff0c;就单纯想跟诸君们聊聊题外话。这两天有些事儿挺忙的&#xff0c;所以呢也没时间为大家整理知识&#xff0c;这段时间一直把自己逼得挺紧的&#xff0c;所以也趁这两天给自己放个假&#xff0c;好好休息休息&#xff0c;还望诸君理解。 这两天那…