![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java学习心得
总结java学习内容
一只可爱的小猴子
即使再小的帆也能远航,无论什么时候都要保持自信
展开
-
Java如何将URL读取的内容存入本地文件中
要想访问网络资源,首先需要建立一个URL对象,通过openStream方法读取指定的资源读取网络资源内容,要构建一个输入流要想将内容写入文件,要构建一个文件对象和相应的文件输出流具体代码实现如下:package url;import java.net.*;import java.io.*;import java.nio.charset.StandardCharsets;public class ReadUrl { public static void main(String[.原创 2021-11-26 23:17:39 · 1982 阅读 · 0 评论 -
java异常处理的两种方式:声明抛出和捕获处理(举例解释)
异常处理有两种方式:声明抛出处理 和 程序捕获处理声明抛出又分为 显式声明抛出 和 隐式声明抛出程序捕获处理又分为 嵌套捕获 和 非嵌套捕获隐式声明抛出异常异常类型是RuntimeException类或是其子类,运行时异常,编译可通过此类异常可以不做任何声明和处理,直接交给调用该方法的地方处理例如:main方法中出现除零异常,但是main方法没有任何声明和处理,那么该异常直接交给调用main方法的Java虚拟机去处理import java.util.*class Example{ pu原创 2021-11-25 09:04:06 · 914 阅读 · 0 评论 -
浅析StackOverFlowError && OutOfMemoryError的产生的原因以及出现的场景
StackOverFlowError发生的原因:栈所能容纳的栈帧是固定的,当调用方法或者线程时,jvm会向栈中压入一个栈帧,当栈帧数量超过一定数量则会发生错误发生的情形:调用(没有结束递归条件的)递归函数创建大量的线程或方法,使得栈帧超量OutOfMemoryError发生的原因:当程序运行过程中,无法申请到足够的内存就会发生错误发生的情形:栈内存溢出:创建了太多线程,没有足够的空间为一个新的线程分配空间堆内存溢出:创建了太多对象,没有足够的空间为一个新的对象分配空间方法区内存溢出原创 2021-11-24 13:19:50 · 549 阅读 · 0 评论 -
java受检异常和不受检异常的区别
unchecked exception(不受检异常):所有的RuntimeException或是其子类,常见的有数组越界,空指针等,一般是程序员的错checked exception(受检异常):除了不受检异常以外的异常,常见的有文件找不到等,一般是外部错误两者的区别:unchecked异常 不受编译器检查; checked 异常受编译器检查unchecked异常在默认情况下会得到自动处理,无需进行显示声明抛出;checked 异常编译器要求程序必须捕获或声明抛出这种异常,若没有则编译无法通原创 2021-11-19 17:34:06 · 359 阅读 · 0 评论 -
Throwable类的子类:Exception类和Error类的区别
Throwable类的子类有Exception类和Error类Error与Exception的区别:Error是致命的,程序无法进行捕获和处理,发生Error,程序会停止,只能通过人工介入进行解决Exception是非致命的,程序可以进行捕获和处理,发生Exception,虚拟机会根据异常的类型,产生相应的异常对象进行处理...原创 2021-11-19 16:58:12 · 440 阅读 · 0 评论 -
在Socket编程时,在什么地方指出目的IP地址和端口号
在Socket建立通信时,服务器端和客户端的第一步就是建立Socket()对象客户端的Socket对象通过显示调用New来完成,同时指明目的IP地址和端口号Socket client = new Socket("127.0.0.1", 80) //此处为服务方的IP地址和端口号Socket(InetAddress address, int port, InetAddress localAddr, int localport);//这是Socket的构造函数,其余项缺省服务端创建ServerSock原创 2021-11-19 09:36:35 · 3228 阅读 · 0 评论 -
Java低层次网络编程和高层次网络编程应用场合
Java的网络编程是基于传输层和应用层之间在程序设计中,我们一般根据不同的应用场合选用不同层次的网络编程基于Socket的低层次的网络编程:一个socket由一个IP地址和一个端口号唯一确定,通常实现客户端与服务端的连接,面向内部网络通信基于URL的高层次的网络编程:通过URL(统一资源定位地址,就是网址)来访问Internet上的各种资源,由于URL使用http协议可跨越网络 防火墙,所以适用于面向Internet的通信...原创 2021-11-17 07:39:31 · 458 阅读 · 0 评论 -
TCP/IP协议和UDP协议有什么区别呢?
Java的低层次网络编程是基于传输层提供的TCP(可靠)和UDP(不可靠)两种数据传输机制两者的不同:通过TCP协议通信得到的数据流顺序无差错;通过UDP协议通信,数据能否送达,送达的时间以及内容的准确性都无法保证TCP需要先通过连续三次交换消息建立连接,在建立的连接上相互传送数据UDP无需连接,每个数据报作为作为独立信息可以直接以任何可能的路径传往目的地TCP可以通过建立起来的连接传输大量的数据;UDP每个被传输的数据报大小限制在64KB以内综上所述:TCP必须先建立连接才能原创 2021-11-15 19:48:36 · 3816 阅读 · 0 评论 -
什么是网络通信协议?(七层功能介绍)
见词知意,网络通信协议就是所有计算机在网络上的通信需要遵循的协议网络通信协议分为七层应用层 :面向用户的应用进程提供服务表示层 :提供网络传输的标准格式,将应用层和会话层的数据相互转换会话层 :为了用户交互信息建立的连接,提供网络中两主机之间会话的建立、维持和终止传输层 :解决不同网络设备间通信连接、管理的问题,为两主机间的进程通信提供可靠服务网络层 :解决跨越多个链路、不同网络设备间的通信问题,是一种端到端的通信,提供通信服务,包括路由、地址解析等功能数据链路层 :两个相邻结点间的点到点的原创 2021-11-15 19:23:41 · 5329 阅读 · 0 评论 -
抽象类和接口的异同(分点)
相同点:两者均有抽象方法(有继承/实现它的类具体实现)均可以引用具体子类/实现类两者都不能直接实例化就是不能直接new一个抽象类/接口,因为没有实际意义啦不同点:抽象类用abstract修饰,接口用interface修饰抽象类是对物体整体本质的抽象;接口是对物体某个行为动作的抽象抽象类的继承有属于的关系:比如猫属于动物,猫继承动物类;接口类的实现有具有的关系:比如猫会跑,猫类实现跑的接口抽象类可以有域变量;接口没有域变量,只允许有静态常量倘若接口有域变量,该接原创 2021-11-14 17:50:42 · 601 阅读 · 0 评论 -
instanceof用法测试举例
instanceof用于判断该对象是否为特定类是实例,若是,则返回True本类对象是本类的实例子类对象是父类的实例父类对象不是子类的实例父类引用指向子类对象,该对象仍是子类的实例测试代码如下:class Animal{ String name; Animal(String name){ this.name = name; }}public class Dog extends Animal{ Dog(String name){原创 2021-11-12 16:52:58 · 491 阅读 · 0 评论 -
引用比较:equals方法(使用举例)
equals方法是Object类的方法,比较的是该引用与参数引用是否指向同一个对象,若为同一对象则返回True但是很多Object的子类对equals方法进行了覆写,使其表现出了不同的功能,例如:String类中的equals是用来判断两个字符串的值是否相等我自己创建了一个学生类对equals方法进行覆写,使其判断两个学生的成绩是否相等测试代码如下:import java.util.Objects;public class Student { String id; int sco原创 2021-11-12 12:43:21 · 1281 阅读 · 0 评论 -
什么是编译时多态?什么是运行时多态?
什么是编译时只是单纯的将代码翻译成一种中间语言(例如:java代码被编译后生成字节码文件)编译时会做一些代码语法的检查提醒编译时没有实质性的为代码分配内存空间运行,所以可以说编译是静态类型检查什么是运行时为代码分配空间,让代码跑起来此时可能会出现编译时发现不了的错误(例如:数组越界问题,由于编译时并未分配空间,所以是无法检查出这个问题的)什么是Java编译时多态通过编译即可明确是哪一个多态方法的调用比如说Java的重载,只通过参数的数量和类型不同来实现多态,那么在编译时我们可以单纯根据原创 2021-11-10 19:32:12 · 2082 阅读 · 0 评论 -
如何利用this实现两个对象相互关联互发消息呢?
什么叫做两个对象之间互发消息呢?发消息这个过程指的就是通过对象的引用调用对象的属性或是方法,就像是 对象的引用 给 对象发消息,然后再使用对象的成员由发消息的含义我们可知,要给一个对象发消息,我们首先需要有该对象的引用(发消息的工具)因此,要使两个对象之间可以互发消息,就需要在两个对象内部属性中都有对方的引用,从而实现两个对象之间相互关联如何实现两个对象互发消息呢?理论理解上很简单,只要两个对象内部属性都有对方的引用即可,那么实际代码该如何实现呢?先实例化对象一再用对象一去实例化对象二,使对原创 2021-11-05 17:34:28 · 169 阅读 · 0 评论 -
使用断点调试跟踪子类对象实例化过程中代码的执行顺序
可以根据断点调试跟踪代码运行的顺序,了解子类实例化对象的代码执行过程以下面的代码作为实例:class AddClass { private int x=0,y=0,z=0; //6 AddClass (int x) { //5 this.x=x; //7 }//8 AddClass (int x,int y) { this(x); //4 this.y=y; //9 } //10AddClass (int x,int y,int z) {原创 2021-11-05 15:15:41 · 143 阅读 · 0 评论 -
弄懂Java提供的两种多态机制——重载与覆写
什么是多态呢?多态是指一个程序中同名但不同方法共存的形态。为什么Java要提出多态机制呢?Java将万物抽象成类,在复杂的世界中,实现同一个功能会遇到各种各样的情况,所以需要根据实际需要定义不同的方法内容java提出了怎样的机制实现多态呢?java提供重载和覆写来实现多态什么是重载呢?在一个类中定义了多个同名但是不同参数的方法,称这些方法叫做重载同名,顾名思义,就是方法名称相同。不同参数,指的是参数的类型不同或者是参数的个数不同(二者有其一即可构成重载)ps:参数的顺序不同或者方法的返回原创 2021-11-03 22:53:58 · 1125 阅读 · 0 评论 -
一文搞懂Java 中类的组合
什么是类的组合?在一个类的内部,以一个对象(引用)作为域变量例如:class A(){ B b; //A的域变量 say(){ b.speak(); }}class B(){ int x; speak(){};}虽然A和B是两个独立的对象,但是A对象中有B的对象(引用),就可以通过A操纵B,所以就可以看成是A对象由B对象组合而成。如上述代码所示,A对象可以通过调用b的方法实现自己的方法,可以实现类的复用。(并且组合优于继承)组合有什么用?无疑:①可以实现类的复用继承也可原创 2021-11-03 17:11:32 · 796 阅读 · 0 评论 -
Java访问控制修饰符的权限范围(清晰总结版)
Java类前修饰符有 public 和 默认(缺省)Java属性和方法前的修饰符有 public, protected, 默认(缺省),private权限关系简图注释:左图为各种权限范围(范围由大到小),右图标明两种修饰符的组合对应的访问权限总结只有当类访问权限为public,类方法和属性也为public时,方法和属性才可以适用于所有类(A)当类方法和属性为private,不论类权限是什么,方法和属性都只能仅本类访问(D)当类方法为public,方法和属性权限是protected时,方法和原创 2021-10-29 17:08:32 · 1920 阅读 · 0 评论 -
final的四种修饰场景(代码解析版)
final 是修饰符的关键字(final意为最终状态,言外之意就是不可再修改)由于final属性不可修改的性质,可以保证程序的安全性与正确性例如:这个类不能被别的类继承(拓展),则可以用final 修饰类这个类方法不想被继承的子类复写,则可以用final修饰方法这个变量不想在程序中被修改值,则可以用final 修饰变量这个引用变量不可以再指向别的对象,则可以用final 修饰引用变量以上四条final属性的应用可以体现final保证程序的安全性,可防止数据被恶意修改等造成数原创 2021-10-20 19:28:52 · 234 阅读 · 0 评论 -
Java数组
在Java中数组是引用数据类型,可以看成是一个对象。所以初始化可以参照对类对象的初始化例如:int[] arr; //声明了一个数组对象,此处[]内不能添加数字,因为int[] 就相当于一个类名,是不可更改的arr = new int[10]; //将arr数组对象 指向 新创建的十个整型元素空间的对象,并且每个元素默认初值为0除此,还可以有以下的初始化方法int[] a = {1, 2, 3};int[] a = new int[]{1, 2, 3}; //此处以详尽初始化,无需再在int[原创 2021-10-15 21:47:14 · 71 阅读 · 0 评论 -
static静态成员有哪些特点?
属于类,独立于对象,即使未创建对象,也可以通过类调用静态的属性和方法由于static成员在初次类加载时,就会被初始化执行一次(且一次),因此可以利用静态代码块来优化程序的性能由于static成员为所有实例对象所共享,当业务需求出现某个成员需要被所有实例对象所需要时,应将其设为static,当类的任何对象访问它时,存取到的都是相同的值static变量只会在类加载时被分配一次且一次空间,而实例对象会在每次创建新对象时都会为其分配一次新的空间static成员可以通过类名访问,也可以通过..原创 2021-10-15 21:02:24 · 885 阅读 · 0 评论 -
Java到底是值传递还是引用传递呢(清晰解读版)
前言:当学到Java对象(引用)作为参数传递时,产生疑惑:Java是值传递还是引用传递?查阅资料后,总结了自己认为正确的解释。什么是值传递?将实参的内容拷贝一个副本给形参,当形参在方法中被修改时,只是修改了实参的一个副本而已,对实参本身是毫无影响的。例如:实参和形参是两只盒子,实参盒子里有一篇文章,将文章复印了一模一样的一份放在了形参盒子里,对形参盒子里那份文章无论如何修改,实参盒子里的文章纹丝不动(要是有改变,那肯定是见鬼了哈哈)什么是引用传递?将实参的自身地址传给形参,此时形参可以看作就是.原创 2021-10-15 15:50:55 · 260 阅读 · 0 评论 -
Java对象与对象引用的区别
对象对象是对客观事物的抽象,是类的一个实例。(类是对对象的抽象,类是对象的模板)对象的引用基于某种特殊的语法定义一个标识符来引用操纵对象(例如:对象是一台电视机,对象的引用则是和电视配套的遥控器(用来操纵对象))二者的区别创建对象时,空间分配在堆上声明对象的引用时,空间分配在栈上举例Person p = new Person("小明");等价于Person p;p = new Person("小明");p 是一个对象的引用(相当于一个遥控器),new Person(“小明”)原创 2021-10-13 16:16:29 · 212 阅读 · 1 评论 -
Java中 break && continue 如何跳出多重循环?(结合代码讲解版)
Java中虽然没有goto语法,但是在break && continue 上进行了升级(可以成功跳出多重循环了)break跳出多重循环 :直接跳出外层的标记循环sign: //break直接跳出多重循环的标记入口 for(int i = 1; i < 4; i ++) { for(int j = 1; j < 4; j ++) { if(i == 2) break sign; }原创 2021-10-10 15:27:47 · 406 阅读 · 0 评论 -
逻辑与(&) vs 条件与(&&) vs 按位与(&)
Java中有两种逻辑运算符 : & (与) 、 && (条件与)Java有一种位运算符 :&(位与)三者的区别:逻辑运算符 左右两端为true/false 判断结果也为true/false位运算 左右两端为二进制数 / 整数,结果也是二进制数 / 整数(若左右两端不是二进制数则将数值转换成二进制数进行按位与操作) 例如:2 & 6 = 2;(相当于0010 && 0110 = 0010)由于Java不支持0/1代表f原创 2021-10-09 21:16:35 · 360 阅读 · 0 评论 -
int和Integer有哪些区别?
intInteger基本数据类型引用数据类型(封装类)默认值为0默认值为null变量内存空间直接存储数值需要实例化对象,变量内存空间存储对象的地址……双等判断int 数据类型之间的比较:可直接通过判断数值大小是否相等(true/false)int 数据类型与 Integer 数据类型之间比较:可直接判断数值大小是否相等(Integer 会自动拆箱成int,再进行比较)Integer 数据类型与 Integer 数据类型之间比较:二者中至少存在一个...原创 2021-10-09 20:27:24 · 73 阅读 · 0 评论 -
Java基本数据类型(表格版 + 整型溢出 + 自动拆装箱 + 高频缓存)
Java的数据类型主要包括基本数据类型和引用数据类型一、基本数据类型简单类型二进制位数取值范围默认值包装类高频区间数据缓存范围byte8-2^8 - 2^8-10Byte-128 - 127short16-2^16 - 2^16-10Short-128 - 127int32-2^32 - 2^32-10Integer-128 - 127long64-2^64 - 2^64-10Long-128 - 12原创 2021-10-09 19:46:26 · 242 阅读 · 0 评论 -
JDK, JRE, JVM三者的联系(简易框架图版)
JDK (Java Development kit) java开发工具包JRE(Java Runtime Environment) java运行时环境JVM(Java Virtual Machine) java虚拟机三者的联系:原创 2021-09-23 20:28:05 · 138 阅读 · 0 评论 -
java语言与c/c++语言,python语言 到底有哪些区别?(清晰表格版)
java语言不同于c/c++语言之处javac/c++面向对象面向过程可跨平台移植不可跨平台采用unicode码采用ascii码自动垃圾回收手动释放资源空间变量必须初始化值变量可以不用初始化有super关键字无super关键字只允许单继承可多继承不可用数字代替布尔值可以将非布尔值代替布尔值使用无goto语句有goto语句无sizeof(),所有的数据类型在所有机器上大小都是相同的不同的数据类型在不同机器上被分配的原创 2021-09-23 19:57:04 · 415 阅读 · 0 评论 -
java语言的特点
1.简单安全语法借鉴c/c++,易于有编程基础的人快速上手消除了指针,用接口替代了多继承,(java中的引用实际上是(受控的,安全的)指针)(使用接口可以达到精准继承,多继承会继承父类的所有特性,但是有些特性可能并不是你想继承的,比如猴子会有爬树和荡秋千两个接口,如果你想狗也会爬树,但不想狗会荡秋千,你可以在狗类中实现爬树的接口(达到精准继承),但如果采用多继承,则不可避免地会使狗能够荡秋千(多继承的副作用)实现垃圾自动回收机制,简化了释放资源管理的工作提供了丰富的类库,灵活使用以实现的类,可以大大原创 2021-09-23 19:52:23 · 88 阅读 · 0 评论 -
学习编程的方法经验总结
经过一年的编程学习,算是一个入门的编程小白了,在这里总结一下编程的方法经验。入门者学习编程,学习方式很重要。初学编程,切忌钻研经典。先建立整体框架,再精雕细琢。倘若初学的时候就想细抓每一个细节,这样不仅会大大降低学习的兴趣,还很有可能导致你直接劝退。可以先初学一遍,对一门语言有整体的框架把握后,再阅读经典,查漏补缺,加深对已知知识的理解,注重更多的细枝末节。以我个人的学习经历来看,初学者看书学习语言也十分吃力,没有课程的强制推进,很有可能会在半途被劝退,很难看完整本书。因此,我建议,观看入门视频原创 2021-09-23 07:45:38 · 668 阅读 · 0 评论 -
简单图文解释冯诺依曼体系结构(通俗易懂版)
冯诺依曼式计算机主要由输入设备,输出设备,控制器,运算器,存储器该五个组成部分构成。我们可以将该体系结构的运作通过人类接收信息,处理信息,并输出信息这个过程来加以类比理解。人类:当眼睛看到某些信息,这些信息被存储到记忆装置,大脑从记忆装置取出信息,并加以思考运算,再放回记忆装置,大脑控制记忆装置将信息传输给嘴巴,将信息表达出来。(这个过程大脑的指令占领导地位)冯诺依曼计算机:当输入设备接收到数据,数据将被存储到存储器,控制器发出取数据和运算的指令,数据被取出方去放入运算器中加以运算,运算结束后,控制器原创 2021-09-23 07:34:51 · 9150 阅读 · 0 评论 -
Java如何实现write once run anywhere的跨平台操作?
c/c++文件源代码在不同平台上运行需要重新编译,甚至是重写代码,那么java是如何实现write once run anywhere的跨平台操作的呢?文字解释:c/c++是编译型语言,直接从源代码被编译成机器语言(该机器语言只能被当前操作系统理解,倘若从windows系统切换成linux系统,需要在新的操作系统上重新编译代码重新生成 .exe文件 进行执行),也就是说c/c++ 机器依赖操作系统java是编译-解释型语言,先将源代码编译成字节码 .class文件(实现平台独立),class文件再通原创 2021-09-18 20:56:00 · 214 阅读 · 1 评论 -
为什么说Java 是编译 && 解释型语言?
编译型和解释型的区别(简单理解)Java是编译-解释型语言的理解 Java源代码首先被编译成class文件(这是编译过程),在Java虚拟机上一条一条的解释执行class文件的代码,生成机器语言(这是解释过程)..原创 2021-08-16 22:49:25 · 231 阅读 · 0 评论