2020.10.28学习笔记_Java基础

1.JRE是Java运行时环境,包含了运行已编译的Java程序所需的内容,JDK在JRE的基础上还包含了编译器和其它工具。

2.源代码(.java文件)经过JDK中的javac命令编译后,成为字节码(.class)文件,由JVM加载,通过解释器逐行解释执行。

3.new方法每次都会创建一个新的对象,valueOf()方法则会优先判断该值是否位于缓存池,如果在的话就直接返回缓存池中的内容。

4.String不能被继承、具有不可变性、线程安全。

5.String与StringBuffer与StringBuilder

可变性线程安全适用场景
String不可变安全操作少量的数据
StringBuffer可变安全,内部使用synchronized进行同步多线程操作字符串缓冲区中大量数据
StringBuilder可变不安全单线程操作字符串缓冲区中大量数据,性能高于StringBuffer

6.字符串常量池(String Pool)位于方法区,通常保存着所有 字符串字面量 ,在编译期间就被确定。可以用String的 intern()方法在运行过程中添加到String Pool中。当一个字符串调用intern()时,如果String Pool中已经存在字面量相同的字符串,则会返回String Pool 中的引用;如果不存在,则向String Pool中添加一个新的字符串,同时返回新字符串的引用;

7.static关键字的四个使用场景:

  1. 修饰成员变量和成员方法:存储在Java内存中的方法区,被所有对象共享,最好通过类名.静态成员名/静态方法名()调用
  2. 静态代码块:定义在类中的方法外,先于非静态代码块之前执行,不管执行多少次创建新对象的操作,静态代码只执行一次。
  3. 静态内部类static修饰类时,只有修饰内部类这一种用法。 非静态内部类在编译后会隐含保存一个引用,用于指向创建它的外部类,但是静态内部类不存在。即 静态内部类的创建不用依赖外围类的创建,同时静态内部类也只能使用外部类的 static成员变量和方法
  4. 静态导包:用于导入静态资源,import static用于指定导入某一类中的静态资源,然后我们就可以直接使用类中的静态成员变量和方法。

注:

  • abstract方法不能同时是static的,因为abstract需要方法需要被重写,但static方法不可以
  • static不能用于修饰局部变量
  • 普通内部类与静态内部类:普通内部类作为外部类的一个成员而存在,可以直接访问外部类属性,调用外部类方法,静态内部类可以直接调用外部类的静态变量和静态方法,但无法直接访问外部类中的普通变量和普通方法,如果要进行访问,必须 new一个外部类对象,使用该对象来进行访问。

8.final关键字的三个使用场景:

  • 修饰类时:被修饰的类不能被继承,而且类中所有成员方法均被隐式指定为final方法
  • 修饰方法时:该方法无法被重写
  • 修饰变量时:该变量是一个常量,若该变量为基本数据类型,则初始化后无法被更改,若该变量为引用类型,则初始化后不能指向其它对象。

9.finally关键字:

  • 在异常处理时提供finally块来执行任何清除操作,无论是否有异常被抛出或捕获,finally块均会被执行,通常用于释放资源
  • finally正常情况下一定会被执行,但是在如下两种情况下不会执行。
    1.对应的try未执行,则finally也不会执行
    2.若try块中JVM关机,则finally也不会执行。
  • finally中如果有return语句,则会覆盖trycatch中的return语句,导致两者无法return,所以建议finally中不要存在return关键字.

10.finallize:
finalize()Object类的protected方法,子类能够覆盖该方法以实现资源清理工作,GC在回收前均会调用该方法,但是该方法存在如下问题:

  • Java语言规范不保证finalize()方法会被及时执行,也不保证它们一定会被执行
  • finalize()方法会带来性能问题,因为JVM通常在单独的低优先线程中完成finalize()的执行
  • finalize()方法中,可将待回收对象赋值给GC Root可达的对象引用,从而达到对象再生的目的
  • finalize()方法最多由GC执行一次(但是可以手动调用对象的finalize()方法)

11.this用于引用当前类的实例,不能用在static方法中

12.super用于从子类访问父类中的变量和方法,不能用在static方法中

13.instanceof方法用于操作对象实例,检查该对象是否一个特定类型

14.==和equals()

  • ==用于基本数据类型时,比较两者的值是否相等,用于引用类型时,比较两者的内存地址是否相等,即两者是否同一对象。
  • equals()不可用于基本数据类型,因为它存在于Object()中,所以所有类都有equals()方法,当类未覆盖equals()方法时,等价于使用==比较,当类覆盖了equals()方法时,则按照覆盖后的逻辑判断。

15.重载:重载就是相同方法根据输入参数的不同做出不同的处理。重载发生在编译期,而且在同一个类中,方法名必须相同,参数类型、参数个数不同,返回值类型可以不同也可以相同,不以返回值类型作为重载区分。

16.重写:当子类继承父类的相同方法,输入数据一样,但最终响应不同于父类;重载发生于运行期;重写方法的方法名、参数列表以及返回值必须相同,抛出的异常范围不超过父类,访问修饰符的范围也不能小于父类。若父类方法由private/final/static修饰,则子类无法重写父类方法,但static修饰的方法能再次被声明。构造方法不能被重写。

17.浅拷贝与深拷贝

  • 浅拷贝:按位拷贝对象,会创建一个新对象,该对象具有原始对象属性值的精确拷贝。若属性是基本类型,则拷贝的是基本类型的值,若属性是引用类型(内存地址),则拷贝的是内存地址。因此一旦其中任意对象改变了该引用类型,均会影响对方。
  • 深拷贝:拷贝所有属性,同时拷贝属性指向动态分配的内存。当对象和它引用的对象一起拷贝时即发生深拷贝,深拷贝比浅拷贝慢且开销更大,但是改变它不会对原来的对象发生影响。

18.面向对象的特点:继承、封装、多态

  • 继承:可以使用现有类的所有功能,并且在无须重新编写原来类的情况下对这些功能进行扩展。
  • 封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的信息进行隐藏。
  • 多态:父对象可以根据当前赋值给它的子对象的特性以不同的方式运作。

19.接口

  • 接口中所有方法默认是public,Java 8 之前不能有实现,Java 8 之后可以由默认实现
  • 接口中所有变量均为 static final
  • 一个类可以实现多个接口,且接口可以继承接口
  • 接口是对行为的抽象、属于行为规范

20.抽象类

  • 抽象类中既可以有抽象方法,也可以有非抽象方法
  • 一个类只能实现一个抽象类
  • 抽象方法不能被private修饰
  • 抽象是对类的抽象,是一种模板设计

21.equals()方法重写例子
判断逻辑按照需求写,这里仅供参考。

	@Override
	public boolean equals(Object obj) {
		//是否同一对象
		if(this == obj)
			return true;
		//是否为空
		if(obj == null)
			return false;
		//是否当前类对象
		if(obj instanceof Father) {
			Father father =(Father) obj;
			//判断逻辑
			if(father.age==this.age) {
				return true;
			}
		}
		return false;
	}

参考链接

1.Java 面试高频知识点总结基础篇(2020)
2.java8之默认接口实现
3.如何通俗易懂地举例说明「面向对象」和「面向过程」有什么区别?
4.java提高篇(三)-----理解java的三大特性之多态

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值