
Java
学习记录
_77777
希望通过优快云记录自己技术成长的点点滴滴
展开
-
java反射机制
反射机制(1)反射机制有什么用?通过java语言中的反射机制,可以操作字节码文件(class文件)有点类似于黑客(可以读和改写字节码文件)(2)反射机制的相关类在哪个包下?java.lang.reflect.*;(3)反射机制相关的重要的类有哪些? java.lang.Class: public class User{ //Field int no; //Constructor public User(){ } publ原创 2021-02-20 22:50:29 · 319 阅读 · 1 评论 -
java多线程
多线程1、什么是进程?什么是线程?进程是一个应用程序(1个进程是一个软件) 线程是一个进程中的执行场景/执行单元 一个进程可以启动多个线程。 java中的多线程机制,目的就是为了提高程序的处理效率。例:package javaCoreTest;/* * 判断以下程序出垃圾回收线程之外有几个线程? * 1个线程(因为程序只有1个栈) * * main begin m1 begin m2 begin m3 execute m2 over m1 over原创 2021-02-19 23:32:35 · 195 阅读 · 2 评论 -
java IO流
IO流1、什么是IO流?通过IO流可以完成硬盘文件的读和写2、IO流的分类?(1)、按照流的方向进行分类: 【以内存作为参照物】 往内存中去,叫做输入。或者叫做读。 从内存中出来,叫做输出。或者叫做写。(2)、按读取数据方式不同进行分类:字节流:按照字节的方式读取数据,一次读取1个字节byte,等同于一次读取8个二进制位,这种流是万能的,什么类型的文件都可以读取。包括:文本文件,图片,声音文件,视频等。假设文件file。TXT,采用字节流的方式:a中国bc张原创 2021-02-15 18:49:39 · 215 阅读 · 2 评论 -
位运算
位运算符 >>右移:原数据的十进制除以2的n次方【n为需要右移的位数】左移:原数据的十进制乘以2的n次方【n为需要左移的位数】package javaCoreTest;/* * 位运算符 >> * 右移:原数据的十进制除以2的n次方【n为需要右移的位数】 * 左移:原数据的十进制乘以2的n次方【n为需要左移的位数】 */public class BinaryTest { public static void main(String [] args) {.原创 2021-02-09 15:36:21 · 66 阅读 · 0 评论 -
java集合
java集合(1)、什么是集合?有什么用?集合实际上是一个容器,比如数组。可以用来容纳其他类型的数据。(2)、为什么说集合在开发中使用较多?集合是一个容器,是一个载体,可以一次容纳多个对象。在实际开发中,假设连接数据库,数据库当中有10条记录,那么假设把这10条记录查询出来,在java中会将10条数据封装成10个java对象,然后将10个java对象放到某一个集合当中,将集合传到前端,然后遍历集合,将一个数据一个数据展现出来。(3)、集合不能直接存储基本数据类型,另外集合也不能直接存储java对象原创 2021-02-09 15:31:38 · 168 阅读 · 1 评论 -
异常
异常(1)、什么是异常?java提供异常处理机制有什么用?程序执行过程中发生了不正常的情况,而这种不正常的情况叫做:异常Java语言是很完善的语言,提供了异常的处理方式,当程序执行过程中出现了不正常的情况,Java把该异常信息打印输出到控制台(JVM打印),共程序员参考,程序员看到异常信息之后,可以对程序进行修改,让程序更加的健壮。package javaCoreTest;public class ExceptionTest02 { public static void main(Strin原创 2021-02-05 17:35:23 · 99 阅读 · 5 评论 -
枚举类型
枚举类型*枚举:一枚一枚可以列举出来的,才建议使用枚举类型。*枚举编译之后也是生成class文件*枚举也是一种引用数据类型*枚举中的每一个值可以看做是常量。*总结:-语法: enum 枚举类型名{ 枚举值1, 枚举值2, 枚举值3... }-结果只有两种情况的,建议使用布尔类型。超过两种并且还可以一枚一枚列举出来的,建议使用枚举类型。package javaCoreTest;public class EnumTest01 { public static voi原创 2021-02-04 09:55:22 · 86 阅读 · 0 评论 -
包装类(以Integer为例)
/*1.java 中为8种基本数据类型又对应准备了8种包装类型,8种包装类型属于引用数据类型,父类是object2.为什么要提供8种包装类?*因为8种基本数据类型不够用*/package javaCoreTest;public class IntegerTest01 { public static void main(String [] args) { //有没有这种需求:调用doSome()方法的时候需要传一个数字进去 //但是数字属于基本数据类型,而doSome()方法参数原创 2021-02-03 15:05:45 · 197 阅读 · 1 评论 -
String类及其常用方法
String类JDK中内置的一个类:java.lang.String(1)、String表示字符串类型,属于引用数据类型,不属于基本数据类型(2)、在JDK当中,双引号括起来的字符串,例如:“abc” “des” “deg”都是直接存储在“方法区”的“字符串常量池”当中。package javaCoreTest;public class StringTest01 { public static void main(String [] args) { int i = 10;//i中保存1原创 2021-02-03 14:46:46 · 233 阅读 · 1 评论 -
查找算法-二分查找法
package javaCoreTest;//查找1public class ArraySearch01 { public static void main(String [] args) { int [] arr = {4, 5, 6, 87, 8}; //第一种方法:一个一个挨着找 //需求:找出87的下标,如果没有返回-1 for(int i = 0; i < arr.length; i++) { if(arr[i] == 87) { System原创 2021-02-03 12:15:44 · 355 阅读 · 0 评论 -
排序算法
**冒泡排序9 8 10 7 6 0 117个数据循环六次。 第一次循环: 8 9 10 7 6 0 11(第1次比较:交换) 8 9 10 7 6 0 11(第2次比较:不交换) 8 9 7 10 6 0 11(第3次比较:交换) 8 9 7 6 10 0 11(第4次比较:交换) 8 9 7 6 0 10 11(第5次比较:交换) 8 9 7 6 0 10 11(第6次比较:不交换) 最终冒出的最大数据在右边:11 第二次循环: 参与比较的数据:8 9 7原创 2021-02-03 12:10:40 · 87 阅读 · 1 评论 -
数组
数组(1)、是一种引用数据类型,不属于基本数据类型。父类是Object。(2)、是一个容器。可以容纳多个元素(数组是一个数据的集合)(3)、数组当中可以存储“基本数据类型”的数据也可以存储“引用数据类型” 的数据例:package javaCoreTest;//数组中存储引用数据类型public class ArrayTest06 { public static void main(String [] args) { Animal a1 = new Anima原创 2021-02-03 12:04:39 · 102 阅读 · 0 评论 -
内部类
内部类(1) 在类的内部又定义了一个新的类。(2) 内部类的分类 : - a) 静态内部类:类似于静态变量 - b) 实例内部类:类似于实例变量 - c) 局部内部类:类似于局部变量(3) 使用内部类编写的代码,可读性很差,能不用尽量不用。(4) 匿名内部类是局部内部类的一种。因为这个类没有名字而得名。示例:package java核心技术;public class InClassTest01 { public static void main(String [] args)原创 2021-01-30 21:26:40 · 72 阅读 · 0 评论 -
Object类及toString方法、equals方法、finalize方法、hashCode方法详述
JDK类库的根类:Object1)、任何一个类默认继承Object,就是没有直接继承,最后也会间接继承2)、Object中有哪些常用的方法?去哪儿找?-第一种方法:去源代码当中(但是这种方法比较麻烦,源代码也比较难)-第二种方法:去查阅Java的类库帮助文档。 什么是API? 应用程序编程接口(Application Program Interface)整个JDK的类库就是一个javase的API。每个API都会配置一套API帮助文档。3)、目前我们需要知道:protected O原创 2021-01-30 10:33:17 · 175 阅读 · 3 评论 -
关于接口的使用
接口1)、接口也是一种“引用数据类型”,编译之后也是一个class字节码文件。2)、接口是完全抽象的。(抽象类是半抽象)或者也可以说接口是特殊的抽象类。3)、接口怎么定义?语法?【修饰符列表】 interface 接口名{} 例: interface A{ }4)、接口可以继承。例:interface A{}interface B extends A{}5)、接口支持多继承,一个接口可以继承多个接口。例:interface A{}interface B{原创 2021-01-29 12:18:42 · 174 阅读 · 0 评论 -
super关键字
super关键字**super.属性名 【访问父类的属性】 super.方法名(实参) 【访问父类的方法】 super(实参) 【调用父类的构造方法】1)、super能出现在实例方法和构造方法当中。2)、super的语法是:“super()”、“super.”3)、super不能使用在静态方法当中。4)、super大部分情况下是可以省略的。5)、super.什么时候不能省略?父中有,子中又有,如果想在子中访问“父的特征”,super不能省略。6)、super()只能出现在构原创 2021-01-28 12:52:26 · 169 阅读 · 5 评论 -
文本编辑快捷键
文本编辑快捷键掌握常用的通用的文本编辑快捷键很重要,可以大大提升开发效率。所以,从此刻开始,强迫自己少用鼠标,多用快捷键的方式编写。1)、Ctrl + C 复制2)、Ctrl + V 粘贴3)、Ctrl + X 剪切4)、Ctrl + S 保存5)、Ctrl + Z 撤销6)、Ctrl + Y 重做7)、Ctrl + A 全选8)、home键 光标回到行首9)、end键 光标回到行尾10)、Ctrl + home键 光标回到文章开始11)、Ctrl + end键 光标回到文章末尾1原创 2021-01-27 23:11:32 · 1543 阅读 · 0 评论 -
抽象类
抽象类1)、什么是抽象类? 类和类之间有共同特征,将这些共同特征提取出来,形成的就是抽象类。 类本身是不存在的,所以抽象类无法创建对象。【无法实例化】2)、抽象类属于什么类型? 抽象类也属于引用数据类型。3)、抽象类怎么定义? **语法: [修饰符列表] abstract class 类名{ 类体; }4)、抽象类是无法实例化的,无法创建对象的,所以抽象类是用来被子类继承的。5)、final和abstract不能联合使用,这两个关键字是对立的。6)、抽象类的子类原创 2021-01-27 22:51:59 · 154 阅读 · 3 评论 -
java语言当中的包机制和import 语句
java语言当中的包机制1)、包又称为package,Java中引入package这种语法机制主要是为了方便程序的管理。不同的功能的类被分门别类的放到不同的软件包中,查找比较方便,管理比较方便,易维护。2)、怎么定义package?-在Java源程序的第一行上编写package语句。-package只能编写一个语句-语法结构:package 包名;3)、包名的命名规范-公司域名倒序 + 项目名 + 模块名 + 功能名;采用这种方式重名的几率较低,因为公司域名具有全球唯一性。例如:com原创 2021-01-27 22:13:32 · 204 阅读 · 1 评论 -
关于访问控制权限
关于访问控制权限*控制元素的访问范围*访问控制权限修饰符包括: public 表示公开的,在任何位置都可访问 protected 同包,子类中可访问 缺省 同包中可访问 private 表示私有的,只能在本类中访问*访问控制权限修饰符可以修饰类、变量、方法……*当某个数据只希望子类使用,使用protected进行修饰*修饰符的范围: private < 缺省 < protected < public...原创 2021-01-27 22:09:16 · 129 阅读 · 0 评论 -
final关键字
final关键字*final表示最终的,不可变的*final修饰的类无法被继承*final修饰的方法无法被覆盖*final修饰的变量一旦被赋值之后,不可重新赋值*final修饰的实例变量必须手动赋值,不能采用系统默认值。*final修饰的引用 -一旦指向某个对象后,不能再指向其他的对象。 -但是所指向对象内部的内存是可以被修改的。*final修饰的实例变量是不可变的,这种变量一般和static联合使用,被称为“常量”。**常量的定义语法格式:public原创 2021-01-27 17:17:43 · 72 阅读 · 0 评论 -
面向对象特征之多态机制
**面向对象特征之多态机制***关于多态中涉及到的几个概念:-向上转型(upcasting):又被称为自动类型转换子类型 --> 父类型-向下转型(downcasting):又被称为强制类型转换【需要加强制类型转换符】父类型 –-> 子类型注: 无论是向上转型还是向下转型,两种类型之间必须要有继承关系。没有继承关系无法编译通过。*java中允许:父类型引用指向子类型对象例:【Cat类继承Animal类,Animal中有move方法,Cat中有move方法和原创 2021-01-27 13:37:19 · 172 阅读 · 1 评论 -
面向对象的特征之继承机制
面向对象的特征之继承机制*** 继承的作用是:**代码复用 但是它最重要的作用是:方法的覆盖和多态机制***继承语法格式**: [修饰符列表] class 类名 extends 父类名{ 类体 = 属性 + 方法 }***Java语言只支持单继承**,即一个类只能有一个父类。在C++中支持多继承。***关于继承中的一些术语:** B类继承A类,其中: A类称为:父类、基类、超类、superclass B类称为:子类、派生类、subclass***Java语言当中子类继原创 2021-01-26 23:57:23 · 197 阅读 · 0 评论 -
方法覆盖/方法重写(override)
方法覆盖/方法重写(override)*什么时候使用方法重写?当父类中的方法已经无法满足当前子类的业务需求,子类有必要将从父类中继承过来的方法进行重新编写,这个过程称为方法覆盖/方法重写。***代码满足什么条件才构成方法覆盖?** -方法重写发生在有继承关系的父子类之间 -返回值类型相同、方法名相同、形参列表相同 -访问权限不能更低,可以更高。 -抛出异常可以更少,不能更多。*建议方法重写的时候将方法名、返回值类型、形参列表复制粘贴,不要编写,容易出错。*注意:-私有方法不能继承,所以原创 2021-01-26 23:54:19 · 320 阅读 · 0 评论 -
static关键字
static关键字*static修饰的所有元素都是类级别的特征,和具体的对象无关。*带有static的方法,既可以采用“类名.“的方式去访问,也可以采用“引用.”的方式去访问,但是,即使采用后者,实际上执行的时候和引用指向的对象无关。建议使用第一种方式。*什么时候声明为实例变量?什么时候声明为静态变量?-实例变量:所有的对象都有这个属性,但是这个属性会随着对象的变化而变化【不同对象的的这个属性的值不同】-静态变量:所有对象都有这个属性,并且所有对象的这个属性的值是一样的,建议定原创 2021-01-26 20:35:11 · 93 阅读 · 0 评论 -
this关键字
this关键字*this是一个变量*this是一个引用*this变量中保存了指向自身的内存地址,this存储在JVM堆内存的Java对象内部。【关于JVM堆内存详见《JVM内存管理》】*this可以出现在“实例方法”当中,this指向当前正在执行这个动作的对象。(this代表当前对象)*this在多数情况下都是可以省略不写的*this不能使用在带有static关键字的方法当中*在带有static的方法当中不能“直接”访问实例变量和实例方法,因为实例变量和实例方法都需原创 2021-01-26 16:01:27 · 107 阅读 · 0 评论 -
参数传递
参数传递参数传递实际上传递的是变量中保存的具体的值(这里的值可能是字面值也可能是令一个Java对象的内存的地址)例:int i = 10;int j = i;//i传递给j,实际上只是将i变量中保存的10传递给j了,j实际上是一块全新的内存空间。User u = 0x1234;User u2 = u;//u传递给u2,实际上是将0x1234这个值赋值给了u2,u和u2实际上是两个不同的局部变量,但是它们这两个变量指向堆内存中的同一个Java对象。 具体参见下面两例: 例1:原创 2021-01-25 21:20:01 · 109 阅读 · 0 评论 -
构造方法
构造方法*构造方法又被称为构造函数/构造器/Constructor*构造方法的语法结构: [修饰符列表] 构造方法名 (形式参数列表){ 构造方法体; }注意:**构造方法的“返回值类型”不需要指定,并且也不能写void**对于构造方法来说,构造方法名必须和类名保持一致*构造方法的作用:-通过构造方法的调用,可以创建对象-初始化实例变量的内存空间【给实例变量赋值】**成员变量之实例变量,属于对象级别的变量,这种变量必须先有对象才能有实例变量。**实例变量没原创 2021-01-25 14:16:30 · 104 阅读 · 0 评论 -
面向对象特征之封装机制
面向对象特征之封装机制*封装的好处:1.封装之后,对于某个事物来说,看不到他比较复杂的那一面,只能看到该事物简单的一面。复杂封装对外提供简单的操作入口。例如,照相机,它内部实现的原理非常复杂,但是对于使用者,操作起来却是非常方便快捷的。2.封装之后才会形成真正的“对象”, 真正的“独立体”。3.封装就意味着以后的程序可以重复使用。并且程序应该适应性比较强,在任何场合都可以使用。4.封装之后,对于事物本身,提高了安全性【安全级别高】***封装的步骤:**-所有属性私有化,使用privat原创 2021-01-25 11:36:30 · 243 阅读 · 0 评论 -
关于eclipse的使用
关于eclipse的使用:**workspace:工作区-当eclipse打开的时候,大多数都是会提示选择工作区-这个工作区可以是已存在的工作区,也可以是新建的工作区-选择工作区之后,将来编写的Java代码,自动编译的class文件都会在工作区中找到-eclipse可以开启两个甚至更多的会话,每一个会话对应不同的workspace**在workspace工作区当中有一个文件夹:.metadata-在该文件夹当中存储了当前eclipse的工作状态-将.metadat原创 2021-01-24 22:22:38 · 433 阅读 · 2 评论 -
JVM内存管理
JVM内存管理*JVM(Java虚拟机)主要包括三块内存空间:栈内存、堆内存、方法区内存*堆内存和方法区内存各有一个,一个线程一个栈内存*方法调用的时候,该方法所需要的内存空间在栈内存中分配,称为压栈。方法执行结束之后,该方法所属的内存空间释放,称为弹栈。*栈中主要存储的是方法体中的局部变量*方法的代码片段以及整个类的代码片段都被存储到方法区内存当中,在类加载的时候这些代码片段会载入。*在程序执行过程中,使用new运算符创建Java对象,存储在堆内存当中,对象内部有实例变量,所以实例变原创 2021-01-24 08:38:55 · 73 阅读 · 0 评论 -
面向对象以及类和对象的概念
面向对象*面向对象和面向过程的区别-面向过程:主要的关注点是实现具体的过程,因果关系【集成显卡的开发思路】*优点:对于业务逻辑比较简单的程序,可以达到快速开发,前期投入成本较低*缺点:采用面向过程的方式开发很难解决非常复杂的业务逻辑,另外面向过程的方式导致软件元素之间的“耦合度”非常高,只有其中一环出现问题,整个系统将受到影响,导致最终的软件“扩展力”差。另外,由于没有独立体的概念,所以无法达到组件复用。-面向对象:主要的关注点是对象【独立体】能完成哪些功能。【独立显卡的开发思路】原创 2021-01-23 09:41:04 · 254 阅读 · 0 评论 -
方法递归调用
方法递归*什么是递归?方法自身调用自身 a(){ a(); }*递归很耗费栈内存,递归算法可以不用的时候尽量不使用*递归必须有结束条件,没有结束条件会发生栈内存溢出错误。有时由于递归的太深,即使有结束条件也可能发生栈内存溢出错误例://方法递归//此程序出错:Exception in thread "main" java.lang.StackOverflowError//栈内存溢出错误public class RecursionTest01 { public原创 2021-01-22 23:02:49 · 103 阅读 · 0 评论 -
Java方法重载
方法重载(overload)*什么时候使用方法重载?**功能相似的时候,尽可能让方法重名。但是:功能不同/不相似的时候,尽可能让方法名不同*什么条件满足之后构成方法重载?**在同一个类中**方法名相同**参数列表不同:-数量不同 例:public static void m1(){} public static void m1(int a) {}-顺序不同 例:public static void m2(int a, double b){} publi原创 2021-01-22 11:53:57 · 94 阅读 · 1 评论 -
方法的语法结构?方法的调用?方法在运行时的内存分配?
方法***本质:**一段代码片段,并且这段代码片段可以完成某个特定的功能,并且能重复使用。*方法定义在类体当中,方法体之外。*一个类中可以定义多个方法,位置先后可以随意。*语法结构:[修饰符列表] 返回值类型 方法名 (形式参数列表){方法体;}*对以上语法结构的解释说明:**关于修饰符列表 可选项,不是必须的需要注意:若方法修饰符列表中有“static关键字”的话,以【类名.方法名(实际参数列表)】的形式调用此方法**返回值类型*返回值:一个方法是可以完成某个特定功能的原创 2021-01-21 12:32:21 · 152 阅读 · 0 评论 -
break和continue的用法及区别
break语句*break是Java语言当中的关键字,被翻译为“中断/折断”*break + “;”可以成为一个单独的完整Java语句:break;*break语句使用在switch语句当中,用来终止switch语句的执行*break语句同样可以用在循环语句当中,用来终止循环的执行*break语句可以使用在for, while, do…while循环语句中用来跳出循环例:public class BreakTest01 { public static void main(String原创 2021-01-20 11:41:21 · 181 阅读 · 4 评论 -
while与do...while的用法
.while循环语句*while循环语句的语法结构: while(布尔表达式){ 循环体; }*执行原理: 先判断布尔表达式的结果: *true -执行循环体 *判断布尔表达式的结果 *true -执行循环体 ……………… *false -循环结束 *false -循环结束*while循环的执行次数: 0-N次 注意:循环体可能一次都不执行例/*使用while循环输出1-10*/原创 2021-01-20 09:48:21 · 513 阅读 · 0 评论 -
for的用法
*语法结构: for(初始化表达式; 布尔表达式; 更新表达式){ //循环体:需要重复的代码片段}执行过程**初始化表达式、布尔表达式、更新表达式都不是必须的【但是两个分号 是必须的】**初始化表达式最先执行,并且在整个for循环当中只执行一次**布尔表达式必须是true或false,不能是其他值。例1:/*计算1-100所有奇数的和*/public class ForTest02 { public static void main(String [] args)原创 2021-01-19 23:35:54 · 702 阅读 · 3 评论 -
switch的用法
switch 的用法:一个比较完整的switch语句:switch(int 或 string类型的字面值或变量){case int 或 string类型的字面值或变量:java语句;break;case int 或 string类型的字面值或变量:java语句;break;case int 或 string类型的字面值或变量:java语句;break;…default:java语句;…}执行原理:switch后面小括号当中的“数据”和case后面的“数据”进行一一匹配(按原创 2021-01-19 14:16:18 · 691 阅读 · 0 评论 -
自增与自减运算
++/–运算符可以出现在变量前,也可以出现在变量后,无论是出现在变量前还是变量后,只要++/–运算结束,该变量中的值一定会自加1/自减1。++:*++出现在变量后,先赋值运算,在对变量中保存的值进行自加1 int a = 100; int b = a++; System.out.println(a); //101 System.out.println(b); //100 *++出现在变量前,先进行自加1运算,在赋值 int m = 10; int n = ++m; System.out原创 2021-01-15 18:40:06 · 747 阅读 · 0 评论