java基础知识复习(7.24)
-
历史:sun公司开发。
-
三种技术架构:JAVAEE\SE\ME,应对企业级/桌面/开发
-
JDK = java的开发和运行环境 > JRE = 类库+JVM(运行环境)>JVM
-
javac.exe 编译 生成class文件,java运行
2、语法基础
-
1、关键字:static
-
2、标识符:变量名、类名
-
3、常量
-
4、变量
-
5、数据类型:引用/基本数据类型
级别从低到高:
byte、char、short ----int ----float----long----double
自动类型提升:低级别到高级别
强制类型转换:强制把高级别的赋给一个低级别的
-
6、运算符号
短路与:||,左边为false,右边不参与运算
短路或:&&,左边为true,右边不参与运算
-
7.语句:if/else
-
8.函数:
-
修饰符 返回值类型 函数名(参数类型 形参)
-
-
9、数组
-
java分了5片内存:寄存器、本地方法区、方法区、栈、堆
-
栈:存储局部变量
-
堆:存储数组和对象,即实体(封装多个数据的)
-
-
10、面向对象
-
理解:所有的事物都是对象,java的对象是对现实世界的抽象与简化
-
对象均有属性和行为
-
多个对象均有的相同或相似的行为和属性,抽提为类
-
匿名对象:当仅对对象进行一次调用时
-
成员变量/局部变量:成员变量定义在类中,存在在堆中。局部变量定义在方法中,存储在栈中
-
构造函数:对对象进行初始化。
-
面向对象特征:封装、多态、继承
-
静态代码块----》构造代码块----》构造函数
-
继承的弊端:打破了封装性
-
使用final关键字修饰类、方法、常量,不可被继承、重写
-
-
抽象类/抽象方法:
-
抽象方法只能定义在抽象类中,abstract
-
抽象类不可以被实例化,但可以不定义抽象方法
-
不能和final、private,static共存
-
-
模板设计模式:
-
功能内一部分实现确定(不想被改变,可用final),一部分不确定,可以把不确定的部分暴露出去(abstract),让子类实现
-
-
-
接口:
-
接口的成员:
-
全局变量:public static final
-
抽象方法:public abstract
-
-
接口可以多实现,但继承只能单继承
-
接口用于功能的扩展
-
接口和抽象类,都是不断向上抽取的结果,但接口一般用于定义对象的扩展功能,抽象是对一个体系单元的抽取
-
-
多态:父类或接口的引用指向了子类的对象
-
instanceOf 判断对象是否实现了指定的接口或继承了指定的类
-
-
-
异常:
-
编译被检查的异常在函数内被抛出,函数必须要声明,否编译失败。
-
声明的原因:是需要调用者对该异常进行处理。
-
运行时异常如果在函数内被抛出,在函数上不需要声明。
-
不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所以,不让调用处理的,直接让程序停止,由调用者对代码进行修正。
-
-
多线程:
-
进程:正在进行中的程序,其实就是一个应用程序运行时的内存分配空间。
-
线程:进程中的一个程序执行控制单元,共享线程的空间和资源。
-
主线程:main函数
-
单独一个线程:垃圾回收
-
-
随机性:哪个线程获取到CPU的执行权,哪个线程就执行
-
状态:
-
被创建:start
-
运行:执行资格 + 执行权
-
冻结:释放执行资格 + 执行权
-
临时阻塞:有执行资格 + 无执行权
-
消亡:stop()
-
-
步骤:
-
1,定义类继承Thread类或者继承Runnable接口;
-
2,目的是复写run方法,将要让线程运行的代码都存储到run方法中;
-
3,通过创建Thread类的子类对象,创建线程对象
-
4,调用线程的start方法,开启线程,并执行run方法。
-
-
实现runnable接口可以避免单基础的局限性
-
同步:
-
好处:解决了线程安全问题,synchronized
-
坏处:降低了执行效率
-
锁:字节码文件对象,
-
同步函数:对于静态方法:类名.class,否则是this锁
-
同步代码块:任意对象
-
-
-
-
字符串
-
String:用String类进行描述,对字符串进行了对象的封装
-
特点:“一旦被初始化,就不可以被改变”
-
方法:valueOf() 转换字符数组,基本数据类型为字符串
-
-
StringBuffer:字符串缓冲区---线程安全的
-
构造一个不带字符的字符串缓冲区,初始容量为16个字符,可变长度
-
方法:
-
增:append()\insert()
-
删:delete(),左闭右开
-
修改:replace()
-
查找:indexOf()
-
其他:reverse()
-
-
-
StringBuilder:字符串缓冲区---线程不安全的
-
该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍),线程不安全但是效率高。
-
-
-
包装类:
-
Integer i = 4; //自动装箱,1.5版本后的写法;
-
-
集合框架*
-
集合和数值的区别:
-
1:数组是固定长度的;集合可变长度的。
-
2:数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。
-
3:数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。
-
-
Collection
-
List:元素有序,可重复,判断元素是否相同,使用equals判断,因此需要重写equals()
-
ArrayList:主要实现类,底层数据机构是数组,线程不同步,查询元素快
-
可变长度原理:按照原数组的50%延长,初始含量为10,将新元素加入新数组
-
-
LinkedList:双向链表,线程不同步,增删速度快
-
可变长度原理:按照原数组的50%延长,初始含量为10,将新元素加入新数组
-
-
Vector:古老是实现类,线程同步
-
-
Set:元素无序,不可重复
-
HashSet:底层链表+数组,无序高效,可以储存null值
-
通过hashCode、equals 共同保证唯一性
-
LinkedHashSet:按照添加顺序,用于遍历
-
-
TreeSet
-
对Set进行指定元素的指定排序
-
元素需要时同一类型
-
实现Comparable(复写compareTo)\Comparator(复写Compare)
-
保证唯一的方式,就是参考比较方法的结果是否为0
-
-
-
-
-
Map 键值对,保证键的唯一性
-
|——Hashtable:底层是哈希表(底层链表+数组)数据结构,是线程同步的。不可以存储null键,null值。
-
|——HashMap:底层是哈希表数据结构,是线程不同步的。可以存储null键,null值。替代了Hashtable.
-
|——TreeMap:底层是二叉树结构,可以对map集合中的键进行指定顺序的排序。
get(key) 通过键,获取值
-
遍历
-
keySet()
-
values()
-
entrySet()
-
-
-
-
-
使用集合的技巧:
看到Array就是数组结构,有角标,查询速度很快。
看到link就是链表结构:增删速度快,而且有特有方法。addFirst; addLast; removeFirst(); removeLast(); getFirst();getLast();
看到hash就是哈希表,就要想要哈希值,就要想到唯一性,就要想到存入到该结构的中的元素必须覆盖hashCode,equals方法。
看到tree就是二叉树,就要想到排序,就想要用到比较。
比较的两种方式:
一个是Comparable:覆盖compareTo方法;
一个是Comparator:覆盖compare方法。
LinkedHashSet,LinkedHashMap:这两个集合可以保证哈希表有存入顺序和取出顺序一致,保证哈希表有序。
-
Arrays 用于操作数组对象的工具类
-
.asList(arr) 把数组转换成List集合
-
集合变数组 :Collection接口中的方法:toArray();
-
增强for,可用于集合 +数组
-
泛型
-
泛型技术
原文地址:https://www.cnblogs.com/xiaokai1110001237/p/15091165.html
- BZOJ2199: [Usaco2011 Jan]奶牛议会(2-SAT)
- 数据结构之链表、栈和队列 java代码实现
- 洛谷P3209 [HNOI2010]PLANAR(2-SAT)
- javascript 面向对象(多种创建对象的方式)
- 1711: [Usaco2007 Open]Dingin吃饭
- 1574: [Usaco2009 Jan]地震损坏Damage
- HTTPS科普(转) 为什么需要https
- 1590: [Usaco2008 Dec]Secret Message 秘密信息
- 1751: [Usaco2005 qua]Lake Counting
- 算法模板——单个值欧拉函数
- webpack前言:前端模块系统的演进
- webpack学习(一):webpack 介绍&安装&常用命令
- pd_ds中的hash
- webpack学习(二):先写几个webpack基础demo
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- wordpress上传图片无法显示的几种解决方法
- 交换二维数组
- 每天手撕一道算法-53. 最大子序和
- 基于 HTTP Header 传输签名参数
- 【原创】Java并发编程系列32 | 阻塞队列(下)
- 深入理解swap交换分区理解及扩存
- client-go 之 Reflector 源码分析
- Vue.js点击按钮弹出隐藏菜单的几种方式
- 【Vue.js】Vue.js组件库Element中的单选框、多选框、输入框和计数器
- 【Vue.js】Vue.js组件库Element的基础用法
- 常见的图像处理技术
- docker浅入深出续
- 【21期】你能说说Java中Comparable和Comparator的区别吗
- 昨天晚上熬夜整理的Java注解相关学习笔记
- 对图标的坐标轴进行调整