吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2734|回复: 17
收起左侧

[Java 转载] JavaSE总结

[复制链接]
Alones 发表于 2022-6-5 11:09
Java语言概述

随着Java技术在Web方面不断成熟,已经成为Web应用首选开发语言。

后台开发:Java 、PHP、Go、Python、Node.js

Java技术体系平台

Java SE(Java Standard Edition)标准版
支持面向桌面级应用的Java平台,提供了完整的Java核心API,此前版本称为J2SE
Java EE(Java Enterprise Edition)企业版
是为开发企业环境下的应用程序提供一套解决方案。该技术体系包含的技术如:Servelt、Jsp等,主要针对Web应用开发。此前版本称为J2EE
Java ME(Java Micro Edition)小型版
支持Java程序运行时在移动终端的(手机、PAD)上的平台,对JavaAPI有所精简,并加入了针对移动端的支持。此前版本称为J2ME
Java Card
支持一些Java小程序(Applets)运行在小内存设备(如智能卡)上的平台

Java是一个纯粹的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心,Java舍弃了C语言中容易引起错误的指针,增加了垃圾回收器功能。

Java语言特点

1、面向对象

两个基本概念:类、对象

三大特性 :封装、继承、多态

2、健壮性

吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制

3、跨平台性

跨平台性:通过Java语言编写的应用程序可以在不同的系统平台上运行。

原理:只需要在需要运行Java程序的操作系统上,安装一个Java虚拟机(JVM )即可。由JVM来负责Java程序在系统上运行。

语法简单

支持面向对象

支持分布式开发

健康性

安全性

可移植性

解释性语言

支持多线程

高性能

动态

注释
  1. 单行注释:使用双斜杠“//”格式
  2. 块注释:使用“/* .....*/”格式
  3. 文档注释:使用“/** ....*/”格式
1、Java规范的三种注释方式
    单行注释 //
    多行注释 /* */
    文档注释/** */
2、Java单行注释和多行注释作用
    1.对所写程序进行解释,增强可读性,方便自己,方便别人
    2.调试所写代码
3、特点:单行注释和多行注释;注释了的内容不参与编译。换句话说,编译以后生成的.class结尾的字节码文件中不包含注释信息
4、文档注释的使用:
    注释内容可以被JDK提供的工具JavaDoc所解析,生成一套以网页文件形式体现的该程序说明文档
5、多行注释不可以嵌套使用

Java API文档

API: application programming interface。习惯上:将语言提供的类库,都称为api

API文档:针对提供的类库如何使用,给的说明书。

关键字与保留字

关键字指的是Java系统保留使用的标识符,也就是说这些标识符只有Java系统才能使用,程序员不能使用这样的标识符。

关键字(KeyWord)的定义及特点

定义:被Java语言赋予了特殊含义,用做专门用途的字符串

特点:关键字中所有字母都为小写

用于定义类,函数,变量修饰符的关键字: abstact、final、static、synchronized
用于定义类与类之间关系的关键字 extends、implements
用于定义建立实例及引用实例,判断实例的关键字 try、catch、finall、throw、throws
用于包的关键字 package、import
其他修饰符关键字 native、strictfp、transient、volatile、assert
用于定义数据类型值的字面值 true、false、null

保留字

Java保留字:现有版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符要避免使用这些保留字

goto、const

标识符

1、标识符:凡是自己可以起名字的地方都叫标识符

​         如类名、变量名、方法名、接口名、包名...

2、标识符命名规则 --->不遵守规则,编译不通过

​         >由26个英文字母大小写,0-9,_或$组成

​         >不可以使用关键字和保留字,但可以包含关键字和保留字

​         >Java中严格区分大小写,长度无限制

​         >标识符不能包含空格

3、Java中名命名规范

​         包名:多单词组成时所有字母都小写;

​         类名、接口名:多单词组成时,所有单词首字母大写,第二个单词开始每个单词首字母大写

​         变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写

​         常量名:所有字母都大写,多单词时每个单词用下划线连接

4、

​         1.在起名时,为了提高阅读性,要尽量有意义:见名知意

​         2.Java采用unicode字符集,因此标识符也可以用汉字,但不建议

标识符是指赋予类,方法或变量的名称,在Java语言中,常用标识符来识别类名、变量名、方法名、类型名、数组名和文件名。

  • 标识符不能以数字开头
  • 标识符不能除了规定之外的文件
  • 标识符中不能出现空格
  • 标识符只能出现美元符号$,而不能包含@、#等特殊字符
常量
  • final 常量一般纯大写

  • 永远不变的量就是常量,常量的值不会随着时间的变化而发生改变,在程序中通常用来表示某一固定值的字符或字符串。在程序中,我经常会用大写字母来表示常量名。

变量

变量的概念:

内存中的一个储存区域

该区域的数据在一定范围内不断变化

变量是程序中最基本的储存单元。包含变量类型、变量名和储存的值

变量的作用:

用于在内存中保存数据

  • 局部变量

局部变量,顾名思义,就是在一个方法块或者一个函数内起作用,超过这个范围,它将没有任何作用。由此可以看出,变量在程序中是随时可以改变的,随时都在传递着数据。

  • 全局变量

明白了局部变量后就不难理解全局变量了,其实它就是比局部变量的作用区域更大的变量,能在整个程序内起作用。

命名规范:

1.见名知意
2.驼峰命名
3.类 首字母大写,驼峰命名
4.常量 大写+下划线

变量的使用

1、Java定义变量的格式:

数据类型    变量名  =  变量值

2、使用变量注意:

Java中每个变量必须先声明,后赋值

使用变量名来访问这块区域的数据

变量的作用域:在其定义的一对{}内

变量只有在其作用域内才有效

同一个作用域内,不能定义重复的变量

变量的分类 :按数据类型可以分为基本数据类型和引用类型

变量在类中的声明位置:

​         成员变量        局部变量

进制
二进制 十六进制 八进制
0b 0x 0
包机制
防止命名冲突
package
import
数据类型
  • 字符型
  1. 直接通过单个字符来指定字符常量:例如'A'、'9'和'0'等。
  2. 通过转义字符表示特殊字符常量:例如'\n'、'\f'等。
  3. 直接使用Unicode值来表示字符常量,格式是'\uXXXX',其中XXXX代表一个16进制的整数。
  • 整形

整型是有符号的32位整数数据类型,整型int用在数组、控制语句等多个地方,Java系统会把byte和short自动提升为整型int。类型int是最常用的整数类型,在通常情况下,一个Java整数常量默认就是int类型。

  • 布尔型

布尔类型是一种表示逻辑值的简单类型,它的值只能是真或假这两个值中的一个。它是所有的诸如a<b这样的关系运算的返回类型。Java中的布尔型对应只有一个——boolean类型,用于表示逻辑上的“真”或“假”。boolean类型的值只能是true或false,不能用0或者非0来代表。

  • 浮点型

单精度浮点型—float

单精度浮点型是专指占用32位存储空间的单精度数据类型,在编程过程中,当需要小数部分且对精度要求不高时,一般使用单精度浮点型,这种数据类型很少用,不详细讲解。

双精度浮点型—double

双精度浮点类型占用64位存储空间,在计算中占有很大的比重,保证数值的准确。

double类型代表双精度浮点数,float代表单精度浮点数。一个double类型的数值占8个字节,64位,一个float类型的数值占4个字节,32位。

Java语言的浮点数有两种表示形式。

(1)十进制数形式:这种形式就是平常简单的浮点数,例如5.12、512.0、0.512。浮点数必须包含一个小数点,否则会被当成int类型处理。

(2)科学记数法形式:例如5.12e2(即5.12×102),5.12E2(也是5.12×102)。必须指出的是,只有浮点类型的数值才可以使用科学计数形式表示。例如51200是一个int类型的值,但512E2则是浮点型的值。

基本数据类型
整数类型 浮点类型 布尔型 字符型
byte,short,int,long float,double boolean char
1      2     4    8 4             8 2 1
引用数据类型
接口 数组
class interface {}

Java的整形常量默认为int型,声明long型常量后需要加'l'或'L'

Java程序中常量通常声明为int型,除非不足以表达较大的数,才使用long

类型 占用储存空间 表述范围
byte 1字节=8bit位 -128~127
short 2字节 -2的15次方到2的15次方-1
int 4字节 -2的31次方到2的31次方-1
long 8字节 -2的63次方到2的31次方-1

浮点类型:float、double

float:单精度,尾数可以精确到7位有效数字。很多情况下,精度很难满足需求。

double:双精度 ,精度是float的两倍。通常采用此类型

Java的浮点型常量默认值为double,声明Float型常量,须后加'f'或'F'。

浮点类型常量有两种表示形式:十进制数形式、科学计数形式

字符串类型:String

1.String属于引用数据类型

2.声明String类型变量时,使用一对""

3.String 可以和8种基本数据类型做运算,且运算只能是连接运算:+

4.运算结果仍然是String类型

类型转换

前提:这里只讨论7种基本数据类型变量间的运算。不包含boolean类型的

1.自动类型转换:(低转高)

​ 结论:当容量小的数据类型的变量向容量大的数据类型的变量运算时,结果会自动提升为容量大的数据类型。

byte、short、char --->int  --->long  --->float  --->double

​ 特别的:当byte、char、short三种类型的变量运算时,结果为int

2.强制类型转换:(高转低)(低)高

自动类型提升运算的逆运算

需要使用强转符:()

强制类型转换,可能会导致精度丢失

boolean类型不可以转换为其他的数据类型

运算符
算数运算符 + - * / % ++ --
赋值运算符 =
关系运算符 >  >=  <  <=   !=  == instanceof
逻辑与运算符 &&   ||    !
位运算符 & | ^ ~ >>   <<     >>>
条件运算符 ?:
扩展运算符 +=   -=   *=   /=
流程控制
Scanner 用户交互System.in
顺序结构 程序默认结构,自上而下运行
选择结构 if 、if-else、if-else-if-else、swtich-case、break 、defaut
循环结构 while、do-while、for、增强for
顺序结构:程序从上到下执行

分支结构:if - else       if - else      

if - else 条件判断结构

结构1:

if(条件表达式){

            执行表达式

}

结构2:

if (条件表达式){

        执行表达式1

}else{

                执行表达式2

}

结构3

if(条件表达式){

            执行表达式1

}else if(条件表达式){

            执行表达式2          

}else if(条件表达式){

                执行表达式3          

}

......else{

                    执行表达式n

}

说明:

1.else结构是可选的

2.针对条件表达式

    > 如果多个条件表达式之间是互斥的关系(没有交集),哪个判断和执行语句声明在上面还是下面,无所谓。

    > 如果多个表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构放在声明上面。

    > 如果多个条件表达式有包含关系,通常情况下,需要将范围小的声明在范围大的上面。否则,范围小的没机会执行。

    > if else结构是可以互相嵌套的

    > 如果if - else结构中执行语句只有一行时,对应的一对{}可以省略,但不建议省略。
switch - case选择结构

switch(表达式){

case 常量1:

                    执行语句;

                    //break

case 常量2:
                执行语句2;
                //break;
...
default:
                执行语句n;
                //break;
}
说明:
根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构
末尾结束为止。

break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构

switch结构中的表达式,只能是如下的6种数据类型之一:

byte 、short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)

case 之后只能声明常量。不能声明范围。

break关键字是可选的。

default:相当于if-else结构中的else.  

default结构是可选的,而且位置是灵活的。

如果switch-case结构中的多个case的执行语句相同,则可以考虑进行合并。

break在switch-case中是可选的

}
循环结构:
for 、while、do、while

1.循环结构的四要素
① 初始化条件
② 循环条件  --->是boolean类型
③ 循环体
④ 迭代条件
说明:通常情况下,循环结束都是因为②中循环条件返回false了。

2.三种循环结构:
2.1 for循环结构
for(①;②;④){
    ③
}
执行过程:① - ② - ③ - ④ - ② - ③ - ④ - ... - ②
2.2 while循环结构
①
while(②){
    ③;
    ④;
}
执行过程:① - ② - ③ - ④ - ② - ③ - ④ - ... - ②
说明:
写while循环千万小心不要丢了迭代条件。一旦丢了,就可能导致死循环!

for和while循环总结:

1. 开发中,基本上我们都会从for、while中进行选择,实现循环结构。
2. for循环和while循环是可以相互转换的! 
   区别:for循环和while循环的初始化条件部分的作用范围不同。
3. 我们写程序,要避免出现死循环。
   2.3 do-while循环结构
   ①
   do{
   ③;
   ④;
   }while(②);
   执行过程:① - ③ - ④ - ② - ③ - ④ - ... - ②

说明:
1.do-while循环至少会执行一次循环体!
2.开发中,使用for和while更多一些。较少使用do-while

3.“无限循环”结构: while(true) 或 for(;;)
总结:如何结束一个循环结构?
方式一:当循环条件是false时
方式二:在循环体中,执行break

4.嵌套循环
1.嵌套循环:将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环
  内层循环:循环结构A
  外层循环:循环结构B
2.说明:
① 内层循环结构遍历一遍,只相当于外层循环循环体执行了一次
② 假设外层循环需要执行m次,内层循环需要执行n次。此时内层循环的循环体一共执行了m * n次
③ 外层循环控制行数,内层循环控制列数

【典型练习】

        //练习一:
        /*
        ******
        ******
        ******
        ******
        */
        for(int j = 1;j <= 4;j++ ){
            for(int i = 1;i <= 6;i++){
                System.out.print('*');
            }
            System.out.println();
        }

​     //练习二:

    /*          i(行号)       j(*的个数)

  *         1           1
        **          2           2
        ***         3           3
        ****        4           4
        *****       5           5
        */

    for(int i = 1;i <= 5;i++){//控制行数
        for(int j = 1;j <= i;j++){//控制列数
            System.out.print("*");

        }
        System.out.println();
    }
衡量一个功能代码的优劣:
1.正确性
2.可读性
3.健壮性
4.高效率与低存储:时间复杂度 、空间复杂度 (衡量算法的好坏)
如何理解流程控制的练习:流程控制结构的使用 + 算法逻辑
break和continue关键字的使用
            使用范围        循环中使用的作用(不同点)       相同点
break:      switch-case         
            循环结构中       结束当前循环                  关键字后面不能声明执行语句   

continue:       循环结构中       结束当次循环                  关键字后面不能声明执行语句

补充:带标签的break和continue的使用

return在方法中讲。
方法
方法定义:修饰符 返回值类型 方法名(参数名){return 返回值}
方法调用:类名.方法;对象.方法
方法重载:方法名相同,参数不同
命令行传参: 给main方法传递参数
可变长参数:...(必须放在最后一个参数)
递归:自己调用自己
数组
数组理解:
数组(Array),是多个相同类型的数据一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一管理。

数组概念:
数组名
元素
角标、下标、索引
数组的长度:元素个数

数组特点:
数组是序排列的
数组属于引用数据类型的变量。数组的元素,即可以是基本数据类型,也可以是引用数据类型
创建数组对象会在内存中开辟一整块连续的空间。
数组长度确定后,就不能修改。

数组分类:
维数:一维数组、二维数组.....
数据元素类型:基本数据类型元素的数组,引用数据类型的元素数组

数据结构:
    数据与数据之间的逻辑关系:集合、一对一、一对多、多对多
数据的储存结构:
    线性表:顺序表(比如:数组)、链表、栈、队列
    树形结构:二叉树

数组内部排序算法
    冒泡排序
    选择顺序:直接选择排序、堆排序
    交换排序:冒泡排序、快速排序
    插入排序:直接插入排序、折半插入排序、shell排序
    快速排序
    归并排序
    希尔排序
    桶排序
    基数排序

算法的五大特征

输入(Input) 有0个或多个输入数据,这些输入必须有清楚的定义和描述
输出(Output) 至少有1个或多个输出结果,不可以没有输出结果
有穷性(有限性,Finiteness) 算法在有限步骤之后会自动结束循环而不会无线循环,并且每一个步骤可以在可接受的时间内完成
确定性(明确性,Definiteness) 算法中每一步都有确定的含义,不会出现二义性
可行性(有效性,Effectiveness) 算法中每一步是清楚可行的,能让用户用纸笔计算而求出答案
说明:满足确定性的算法也称为:确定性算法。人们也关注更广泛的概念,例如考虑各种非确定性的算法,如并行算法、概率算法等。另外,人们也关注并不要求终止的计算描述,这种描述有时被称为过程(procedure)。
Java运行机制
  • 先编译后运行
面对对象

三大特性

  1. 封装 2.继承 3.多态
  • 从认识论角度考虑是先有对象后有类。对象,是具体的事物。类是抽象的,是对对象的抽象。
  • 从代码运行角度考虑是先有类后有对象。类是对象的模板。
类与对象:类是对象的抽象:模板class,对象是类的具体

构造方法:默认的无参构造,如果定义了有参构造就必须手动添加一个无参构造

单例模式: 需要将构造器私有

new对象:栈存放引用,堆存放具体对象

封装:属性私有,get、set
继承:extends、Object,子类可以自动拥有父类中除了私有内容外的其他所有内容,方法重写,this、super,Java是单继承,只能实现一个父类继承
多态:父类的引用指向子类的对象,instanceof关键字,如果匹配,可以进行类型之间的转换

修饰符:public 、protected、private、static、final 、abstrat

接口:
1.interface约束只能定义方法名,子类实现接口,必须重写其中的方法
2.只有一个方法是接口叫做函数式接口,可以使用lambda表达式简化
3.接口比抽象类更抽象
4.一个类可以实现多个接口

内部类:局部内部类、静态内部类、匿名内部类

物以类聚,分类的思维模式,思考问题首先解决问题需要哪些分类,然后对这些分类进行单独思考,最后才对某个分类下的细节进行面向过程的思索。

面向对象适合处理复杂问题,适合处理多人协作的问题。

面向对象本质是:以类的方式组织代码,以对象的组织封装数据。

面向过程
  1. 步骤简单清晰,第一步做什么,第二步做什么.......
  2. 面向过程适合处理简单的问题
  • 对于描述复杂的事物,为了从宏观上把握,整体上进行合理分析,我们需要使用面向对象的思路来分析整 个系统。

  • 类与对象的关系

  1. 类是一种抽象的数据类型,它是对某一事物整体描述/定义,但是并不能代表某一个具体事务
  2. 对象是抽象概念的具体实例
异常
Exception 运行时异常、检查型异常 ClassNotFound、NullPoint、UnKownType、下标越界异常
Error AWT错误、JVM异常 StackOver(栈溢出)、OutOfMemory(内存溢出)
五个关键字:try{}、catch(){}、finally、throw(手动抛出异常)、throws(方法抛出异常)
自定义异常:继承Exception类即可
常用类
Math类
Object类 hashcode()、toString()、clone()、getClass()、notify()、wait()、equals
Random类 生成随机数 UUID
File类 创建、查看、修改、删除
包装类 自动装箱和拆箱(八大基本类型)
Date类 Date、SimpDateFormat(yyyy-MM-dd HH:mm:ss)、Calandar
String类 不可变性 final
StringBuffer类 可变长 append 多线程数据量大 效率低 安全
StringBuilder类 可变长 单线程数据量大 效率高 不安全
集合框架
Collection: List有序可重复               Set无序不可重复
ArrayList add         remove         contains        size
LinkedList getFirst()      getLast()       removeFirst        addFirst         ...
HashSet 常用
Treeset
Map
TreeMap jdk1.7:数组+链表                                                                                         jdk1.8:hash表=数组+链表+红黑树
Hashmap
Collections
泛型<> 约束,避免类型转换之间的问题
IO流
字节流 输出流: OutoutStream                                                                   输入流:InputStream
字符流 Reader                                                                                             Writer
处理流 buffer:  bufferInputStream       bufferOutputStream     序列化:  反序列化、Seriallizble     transient                     Object                                                                                  date:    DateInputStream          DateOutputStream          转换流:  inputstreaReader        OutputStreanWriter                                                                                                            print:   PrintWriter                    PrintStream             Filter : 四个
节点流 CharArrayReader、Writer、inputstream、             outputstream                                                                     StringReader,Writer                                                                             pipe(管道流) pipeoutputStream                                                    File

创建与初始化对象

  1. 使用new关键词创建对象
  2. 使用new关键词创建对象时,除了分配内存空间之外,还会给创建好的对象进行默认初始化以及对类中构造器的调用。
  3. 类中构造器也称为构造方法,是在进行创建对象时必须要进行调用的。并且构造器有以下两个特点:
  • 必须和类的名字相同
  • 必须没有返回类型,也不能写void
super关键字
  1. super:表示父类中的内容
  2. this:表示自己类中的内容
  3. 用super和this来区分和子类中重名的内容
  4. super可以获取父类的内容
  5. super可以调用父类的构造方法,必须写在子类构造方法第一行,如果父类构造是无参可以不写,如果父类没有无参构造,必须要写super
final
  1. 被final修饰的变量不可以被改变,又称为常量
  2. 被final修饰的方法不可以被重写
  3. 被final修饰的类不可以被继承
  4. final不可变
抽象

抽象现实中不存在的东西,在Java中只声明不实现。

抽象方法:使用abstract来修饰,不可以有方法体,直接用分号结束

抽象类:如果一个类中有抽象方法,这个类必须是抽象类,抽象类无法被实例化

特点:

  1. 抽象类不可以创建对象
  2. 抽象类的子类,必须重写父类的抽象方法,子类必须也是抽象类,通过抽象类可以强制要求子类中必须有哪些方法
接口

接口实际上是一种抽象类

接口中所有的方法都是抽象方法

接口使用interface来声明

能继承接口的只能接口

接口和类只能是实现关系

面向接口编程,可以降低程序的耦合度,提高程序的扩展力,符合OCP开发援助。

接口的使用离不开多态机制

任何一和接口都有通用者和实现者 ,接口可以将调用者和实现者解耦合

多态
  1. 理解多态性:一个事情的多种形态
  2. 何为多态性:

​     对象的多态性,父类 的引用指向子类的对象或者子类的对象赋给父类引用

Static

static(静态的)修饰的属性,相较于实例变量,随着类的加载而加载;早于对象的创建;只要权限允许,可以通过“对象.属性”的方式进行调用,存在于方法的静态区

1.可以用来修饰的结构:主要用来修饰类的内部结构

属性、方法、代码块、内部类

String StringBuilder StringBuffer

使用规则:

  1. 如果字符串存在大量修改,一般使用StringBuffer或StringBuilder
  2. 如果字符串存在大量修改,单线程情况下 使用StringBuilder
  3. 如果字符串存在大量修改,多线程情况下 使用StringBuffter
  4. 如果字符串很少修改,被多个对象引用,使用String

StringBuilder使用方法和StringBuffer相同

多线程

进程和线程:

  • 进程是资源分配的最小单位,线程是程序执行的最小单位。
  • 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
  • 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。
  • 但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

线程5种状态:创建、就绪、运行、阻塞、死亡

线程创建方式:

继承Thread类:重写run方法,

子类继承Thread类具备多线程能力
启动线程: 子类对象.start
不建议使用: 避免OOP单继承局限性

实现Runnable接口

实现Runnable接口,具备多线程能力
启动线程: 传入目标对象+Thread对象.start()
建议使用: 避免单继承局限性,灵活方便,方便同一个对象被多个线程使用

 实现Callable接口

实现Callable接口,需要返回值类型
重写call方法,需要抛出异常
静态代{过}{滤}理
Lambda表达式:函数式编程、避免内部定义过多

常用方法:

sleep(休眠)
join(插队)
yield(礼让)
isLive(存活)
start(启动)
setPriority
interrupt(中断)

线程同步:

多个对象操作一个资源,并发
队列+锁
Synchronized:                                                                                          同步方法、同步代码块                                                                          死锁:互斥、请求与保持、不剥夺条件、循环等待、循环等待条件
Lock                                                                                                           ReentrantLock:lock、trylock、unlock

线程通信:

缓冲区:消息队列
标志位:红绿灯
wait();
notifyAll();

线程池:

池化技术
池的大小
最大连接数
保持时间
...
网络编程
IP
端口
socket编程
TCP:三次握手、四次握手、面向连接
UDP:无连接、Packet
URL
聊天通信
文件上传
GUI
AWT:Frame 、监听事件:鼠标、键盘、窗口、动作事件
Swing:文本框、标签、按钮、文本域、面板、布局方式、关闭窗口列表
注解和反射
注解
1.元注解
2.内置注解
3.自定义注解
4.反射读取注解

反射:
1.Class
2.类加载机制
3.Method
4.Field
5.Construct:获取数据的时候需要,传递参数的class类型
6.破坏私有关键字
7.性能分析: 正常>检测关闭的反射>默认反射
8.反射获得注解,泛型....

单例模式的探究

免费评分

参与人数 5吾爱币 +6 热心值 +4 收起 理由
shusym + 1 + 1 用心讨论,共获提升!
FirmTao + 1 + 1 用心讨论,共获提升!
撸冰花 + 1 + 1 我很赞同!
雷欧库珀 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Andrea + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

纯色遐想 发表于 2022-6-5 16:15
zyc183369 发表于 2022-6-5 15:53
javase和javaee有什么区别啊

仨版本:Java SE(标准版)、Java EE(企业版)、Java ME(微型版,也可以当成手机端不过基本已经过时了)
可以参考CSDN这个文章。
https://www.csdn.net/tags/NtTaQg3sNjIyMzAtYmxvZwO0O0OO0O0O.html
bing98 发表于 2022-6-6 09:20
zyc183369 发表于 2022-6-5 15:53
javase和javaee有什么区别啊

javase是java语法的核心部分
Javaee可以当作是在Javase基础上 web编程的扩展
头像被屏蔽
jinzhu160 发表于 2022-6-5 12:17
mrdzf 发表于 2022-6-5 13:50
能不能搞个md文件
ygiveupc 发表于 2022-6-5 14:10
非常好,我觉得很不错
纯色遐想 发表于 2022-6-5 14:23
楼主总结的这是基础和进阶吧,WEB阶段只有一点点,框架也还没有。
Ly_轮回 发表于 2022-6-5 15:19
谢谢分享
zyc183369 发表于 2022-6-5 15:53
纯色遐想 发表于 2022-6-5 14:23
楼主总结的这是基础和进阶吧,WEB阶段只有一点点,框架也还没有。

javase和javaee有什么区别啊
leo23 发表于 2022-6-5 17:20
非常好,我觉得很不错
 楼主| Alones 发表于 2022-6-5 18:56
纯色遐想 发表于 2022-6-5 14:23
楼主总结的这是基础和进阶吧,WEB阶段只有一点点,框架也还没有。

就是基础,在学web了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 03:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表