(个人笔记) 二进制、集合框架、泛型、异常

目录

二进制

集合框架

泛型

异常


二进制

1.int 4个字节,1字节是8位。

             例如:int a=3; 则用二进制表示: 00000000 00000000 00000000 00000011

                        int b=-1;则用二进制表示: 10000000 00000000 00000000 00000001

2.最高位(第一位)是符号位,0表示正数,1表示负数。

3. 原码、反码、补码

        对于有符号的而言:

             a.正数的原码、反码、补码都一样

             b. 负数的反码=它的原码符号位不变,其他位取反

             c. 负数的补码=它的反码+1

             b.0的反码、补码都是0

             e.Java没有无符号数(Java中的数都是有符号的)

             f.在计算机运算的时候,都是以补码的方式来运算的。

4. 位运算符和移位运算符

        a.按位与&、按位或|、按位异或^、按位取反~(符号位也取反)

        b. 移位运算符

               i. >>算术右移:低位溢出,符号位不变,并用符号位补溢出的高位

               ii.<<算数左移:符号位不变,低位补0(每移动一位相当于乘以一个2)

               iii.>>> 逻辑右移:低位溢出,高位补0

——————————————————————————————————————————

集合框架

 

1. Java主要的集合类

        a. List结构的集合类:ArrayList类,LInkedList类,Vector类,Stack类

        b. Map结构的集合类:HashMap类,Hashtable类

        c. Set结构的集合类: HashSet类,TreeSet类

        d. Queue结构的集合:Queue接口

2. HashMap和Hashtable的区别

        a. 历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是java 1.2引进的Map接口的一个实现。

        b. 同步性:Hashtable是线程同步的。这个类中的一些方法保证了Hashtable中的对象是线程安全的。而HashMap则是线程异步的,因此HashMap中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率。

        c. 值: HashMap可以让你将空值作为一个表的条目的key或value但是Hashtable是不能放入空值的(null)

3. ArrayList和Vector的区别

        a. 同步性:Vector是线程同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是线程异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。

        b. 数据增长: 从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。

4. 如何选用集合类?

        a. 要求线程安全,使用Vector、Hashtable

        b. 不要求线程安全,使用ArrayList,LinkedList,HashMap

        c. 要求key和value键值,则使用HashMap,Hashtable

        d. 数据量很大,又要线程安全,则使用Vector

——————————————————————————————————————————

泛型

问题:

public class Test {

public static void main(String[] args) {

ArrayList al=new ArrayList();

Dog d=new Dog();

al.add(d);

//存入一个对象,自动向上转型为Object,但是取对象时,可能并不知道,其具体是什么对象,向下转型出现错误。

Dog dd=(Dog)al.get(0);

Cat c=(Cat)al.get(0);

}

}

class Dog{}

class Cat{}

 

出现异常:Exception in thread "main" java.lang.ClassCastException: test.Dog cannot be cast to test.Cat at test.Test.main(Test.java:16)

 

1. 泛型是java se1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。

2 .java语言引入泛型的好处是安全简单。在java se1.5之前,没有泛型的情况下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的,对于强制类型转换错误的情况,编译器不提示错误,在运行的时候才出现异常,这是一个安全隐患。

3. 泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

4. Java反射机制。。。

public class Test {

public static void main(String[] args) {

Gen<Integer> g=new Gen();

g.t=new Integer(11);

g.p();

}

}

class Gen<T>{

public T t;

public void p(){

System.out.println(t.getClass().getName());

}

}

我的理解,就是写一个类时需要使用某个类型一个变量(对象),对不同对象可能有不同的响应(个人理解),所以<T>相当把类也当成一个变量,声明该变量已经存在。

5. 泛型的优点

使用泛型有下面几个优点:

        a. 类型安全

        b. 向后兼容

        c. 层次清晰

        d. 性能较高,用GJ(泛型JAVA)编写的代码可以为java编译器和虚拟机带来更多的类型信息,这些信息对java程序做进一步优化提供条件。

——————————————————————————————————————————

异常

1. Java中处理异常的两种方法:

        a. 在发生异常的地方直接处理

        b. 将异常抛给调用者,让调用者处理

2.异常分类

        a. 检查性异常:java.lang.Exception.程序正确,但因为外在的环境条件不满足引发。例如:用户错误及I/O问题--程序试图打开一个并不存在的远程Socket端口,或者是打开不存在的文件时。这不是程序本身的逻辑错误,而很可能是远程机器名字错误(用户拼写错误),对商用软件系统,程序开发者必须考虑并处理这个问题。java编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。

        b. 运行期异常:java.lang.RuntimeException.这意味着程序存在bug,如数组越界、0被除、入参不满足规范...这类异常需要更改程序来避免,java编译器强制要求处理这类异常。

        c. 错误:java.lang.Error.一般很少见,也很难通过程序解决,它可能源于程序的bug,但一般更可能源于环境问题,如内存耗尽。错误在程序中无需处理,而由运行环境处理。

顶层是java.lang.Throwable类,检查性异常、运行期异常、错误都是这个类的子孙类,java.lang.Exception和java.lang.Error继承自java.lang.Throwable,而java.lang.RuntimeException继承自java.lang.Exception

3. 异常处理

        a. try...catch:程序运行产生异常时,将从异常发生点中断程序并向外抛出异常信息。

        b. finally:如果把finally块置try...catch...语句后,finally块一般都会得到执行,它相当于一个万能的保险,即使前面的try块发生异常,而又没有对应异常的catch块,finally块将马上执行。就算catch中有return,finally也是要执行的(Java虚拟机会在return位置设置断点,然后跳转执行finally,再回来执行return)。

 

          以下情形,finally块将不会被执行:

                ①、finally块中发生了异常;

                ②、程序所在的线程死亡;

                ③、在前面的代码中用了System.exit();

                ④、关闭CPU

try...catch...finally中可以没有catch

        c.将异常抛给调用者,让调用者处理异常thorws

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
。支持yolov5s,yolov5m,yolov5l.zip目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值