没有合适的资源?快使用搜索试试~ 我知道了~
java刷题补充基础知识枚举类序列化集合线程run(),是定义线程的执行体,即线程具体的执行内容join(),停止当前执行的线程synchronized(),是
资源详情
资源评论
资源推荐
java刷题补充
基础知识
枚举类
序列化
集合
线程
run(),是定义线程的执行体,即线程具体的执行内容
start(),启动线程
join(),停止当前执行的线程
synchronized(),是同步代码块加锁解锁用的
length,数组的属性
length(),字符串的方法,返回字符串的长度
size(),集合List的方法,返回集合的长度,相当于数组的长度
修饰符
default,拒绝一切外包访问 = 包权限
protected,允许外部包中的子类访问
public,允许所有包访问
private,只允许自己的类访问
length()
构造方法
调用
重载条件:方法的名称相同,但参数类型或参数个数不同,才能构成方法的重载
创建
当子类的某个构造方法没有通过super关键字调用父类的构造方法,通过这个构造方
法创建子类对象时,子类默认调用父类的构造方法,super()是默认调用的,
构造方法不能被static、final、synchronized、abstract、native修饰
但可以被public、private、protected修饰
构造方法不是类的成员方法,不能被继承。
异常
Pocket包分为:本包和外包
能被java.exe成功运行的java class文件必须有main()方法,main()方法是程序执行
的入口
权限修饰符
关键字
static
final
static静态方法属于类本身,可以使用类名调用,它在类加载的时候就完成了,而那
时对象还没创建完成,而this表示类的实例化对象,就不能用this 来调用静态方法
静态块只执行一次。static块和方法不能出现this和super
静态方法也是类的方法,实例对象也可以调用静态方法
最终类就是被final修饰的类,最终方法就是被final修饰的方法。
最终类中可以有最终方法也可以没有
最终类不能被继承,最终方法不能被重写。
abstract
抽象类和接口都不可以实例化。
final不能与abstract同时修饰一个类,final只能使用一次,而abstract类就是被用
来继承的;
抽象类中可以有抽象方法,也可以没有抽象方法。
返回值:构造方法无返回值
线程安全类,喂,SHE
线程的几种方法
喂(Vector类)
S(Stack类)
H(Hashtable类)
E(enumeration类)
继承自Object类——Throwable类,有运行时异常、编译时异常
运行时异常,需要直接修改代码,不需要特殊处理
编译时异常、或非运行时异常,需要未雨绸缪,用try-catch捕捉处理
Java程序初始化顺序:
父类中的静态代码块
自身的静态代码块
父类普通代码块(构造代码块,类一实例化就会被实行)
父类构造方法
自身普通代码块
自身构造方法
构造方法的作用是为了初始化成员属性,而不是初始化对象
初始化对象是通过new关键字实现的
创建子类对象会调用父类构造方法但不会创建父类对象,只是调用父类构造方法初始
化父类成员属性
类一创建就执行,并且只执行一次
实现序列化接口 Serializable
序列化的作用:把数据长久的保存在磁盘中,磁盘和内存是不同的,内存一般在程序
运行时占用,数据保存周期短,随程序结束而结束,磁盘可以长久保存数据
transient关键字的作用,在已实现序列化的类中,有的变量不需要保存在磁盘中,
就要transient关键字修饰,在已序列化的类中使变量不序列化
transient
&&与短路运算符,一旦第一个不成立,后面就不会再执行了。
细碎知识
++x,先加再赋值
x++,先赋值再加
x+1
把x的值赋给别人
先赋值x给别人
然后自己再偷偷变
自加
数据类型
byte型占一个字节,也就是8位010101这样的,
>>为带符号右移
赋值符号
<<为左移,补零
>>>为不带符号右移
没有<<<这个符号
接口只能继承接口,不能继承类
调用构造函数,不能把它当作普通方法来调用
用Base这个构造方法应该这样 new Base(a,b)
char和String的区别
形式:单引号VS双引号
含义:char相当于一个整形值可以直接参加逻辑运算,而String只是表示一个地址
内存所占大小
int、float型4个字节,32位
java的可移植性一方面是因为这些基本类型的大小不因为机器硬件的架构而改变
Constructor 不能被 override(重写),但是可以 overload(重载),所以你可以看
到一个类中有多个构造函数的情况。
重写:长得一模一样但是实现的方法被完全改写
重载
子父类关系
要点
当一个类中没有定义任何构造方法,Java将自动提供一个缺省构造方法
一个构造方法可以通过this关键字调用另一个构造方法
this语句必须位于构造方法的第一行;
命名规则
不能以数字开头
不能是关键字
不能以除$和_之外的其它符号开头
switch
没有break,会产生穿透,从满足条件的case开始执行到底
start()方法是启动线程,启动线程后执行的run()方法
char存储的unicode码,不仅可以存储ascII码,汉字也可以
被final修饰的常量必须赋值,可以在当时赋值,也可以后面再赋值,但是只能赋一次
length得到的是字符,不是字节。中文英文都算字符
父类构造函数中执行的test()方法,如果子类重写了test()方法的,那么父类构
造函数中的test()方法实际执行的是子类的test()方法
HashMap允许一个key为null,多个value为null,而Hashtable不允许有null值
构造函数的作用是初始化不是创建
JDK1.8之前,接口中不能有静态方法
JDK1.8后,接口中也可以定义静态方法
如果try语句里有return,就把返回值保存到局部变量中再跳到finally语句里执行,
执行完finally语句后,返回之前保存在局部变量表里的值
子分类语句主题
try-catch
finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保
存的返回值
当try和catch中有return时,finally仍然会执行,忽略try的return,返回finally
的return
final用于可以声明属性和方法,分别表示属性的不可变及方法的不可覆盖。不是方
法的不可继承
当字符型与整型运算时会自动转换成整型的ASCII码值
线程的分类
分为用户线程:用户定义的线程
守护线程:daemon线程
为我们创建的用户线程提供服务的线程,比如说jvm的GC
守护线程创建的过程中需要先调用setDaemon方法进行设置,然后再启动线程.否则会
报出IllegalThreadStateException异常
类方法是指用static修饰的方法,普通方法叫对象方法。
this指的是当前对象,类方法依附于类而不是对象this会编译出错
类方法中不能有this关键字,直接调用类方法即可
类方法中可以通过创建实例对象调用类的实例方法,如main()方法
string和char数组都是引用类型
string是特殊引用类型,为什么呢?因为string类型的值是不可变的,
Java在内存中专门为string开辟了一个字符串常量池,用来锁定数据不被篡改
试图修改的str变量和原来的str已经不是一个东西了,它是一个局部引用,指向一个
修改的字符串,但是随着函数结束,就消失了,str还是原来的字符串
但是char数组是会改变原值的
如:var3&
static为成员变量或函数,在类初始化是加载完成,可以被成员函数调用或访问
继承Thead,重写run方法或者实现Runable接口,实现run方法,run方法就是线程执行
的入口
Properties实现了Map接口,是线程安全的
对应ArrayList类
对应HashMap类
内部类详解
成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和
静态成员)。
内部类分为成员内部类、局部内部类、匿名内部类、静态内部类
成员内部类
局部内部类
定义在一个类里面的类,相当于一个成员一样的地位,可以使用所有修饰符
出现同名的方法时默认就近原则调用自己的
但是外部类想要调用内部类的成员必须先创建内部类的对象,然后再根据引用调用
外部对它的访问,也依着修饰符而改变
定义在一个方法里面,相当于一个局部变量一样的存在,不能被任何修饰符修饰
匿名内部类
静态内部类
new创建,不能有访问修饰符和 static 修饰符的
匿名类只能使用一次,
定义在另一个类里面的类,只不过在类的前面多了一个关键字static
静态成员属性有点类似
它不能使用外部类的非static成员变量或者方法访问
如果变量被static修饰,那么该变量属于类,不管该类实例化多少个对象,该类的所
有对象操作的都是同一个变量
基础
基本数据类型
Math.floor(x) 返回小于等于x的最接近整数,类型为double
作用范围
内部类的上一级程序单元是外部类,它具有4个作用域:同一个类
(private)、同一个包(protected)和任何位置(public)
所以对于外部类,只有默认和public这两个修饰符,其它的没有意义。
局部内部类,本身其它的外部成员就无法访问成员方法内部的变量和属性,所以对于
局部内部类,修饰符页没有任何意义。
成员内部类,相应的就有四个修饰符
运行时常量池,是方法区的一部分
小数如果不加 f 后缀,默认是double类型
数组命名时名称与 []可以随意排列,但声明的二维数组中第一个中括号中必须要有
值
几个exe
java,exe是java虚拟机
javadoc.exe用来制作java文档
jdb.exe是java的调试器
javaprof,exe是剖析工具
true ,false , null在java中不是关键字,也不是保留字,它们只是显式常量值
比如:z=3,x=1
z--/++x = 3/2
Integer i = 1
int i1 = 1
i = i1,因为Integer无论new否都会自动拆箱成int类型
此时的i必须在(-128,127)这个范围之内
值的传递
基本数据类型在传递时,形参的值的改变不影响形参的改变
以用数据类型,如String、map等传递的是地址引用,所以改变的时候也会顺带把原
来的值改变
比如一个类的里面设置 int i = 15
下面创建该类对象,并设置A.i = 20
此时类里面的i也被改变为20
序列化是将数据转为n个 byte序列的过程
反序列化是将n个 byte转换为数据的过程
数据转换便于传输
私有线程区
线程共享区域
java虚拟机栈
程序计数器
本地方法栈
java堆
方法区
floor()向下取整,地板除。
接口中字段的修饰符:public static final(默认不写)
接口中方法的修饰符:public abstract(默认不写)
switch(i)中的i可以支持的类型:
jdk1.7之前byte,short ,int ,char
jdk1.7之后加入String
基本数据类型所占的字节和比特大小,可以用包装类调用属性的方法来实现
Short.SIZE
Integer.SIZE
Long.SIZE
Integer.BYTES
java共有8种基本数据类型
4种整数型:byte(1)、short(2)、int(4)、long(8)
2种浮点型:float(4)、double(8)
1种布尔型:boolean
1种字符型:char(2)
类的修饰符,都应该在class关键字之前
abstract class Animal{}
抽象方法不能有方法体
Interger的范围时[-128,127],在这个范围内相等为true,超过范围为false
jdk1.5引入:CurrentHashMap 弥补HashMap的线程不安全的特性
Map、HashMap、TreeMap、SortMap均不是线程安全
notify、notifyAll、wait均是超类Object类中的方法,只有sleep是线程类里面的方
法
共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后
保证其它线程对它操作之后,其它线程取到的都是它最新的值
对此变量的操作不会引起阻塞
但是对于多线程计数器,不能使用volatile修饰,必须是线程安全的。
包装类
转换进制
二进制:Integer.toBinaryString(int i );
八进制:Integer.toOctalString(int i );
十六进制: Integer.toHexString(int i );
十进制转换成其它进制
其它进制转十进制
valueof()
parseInt(String s, int radix)
使用第二个参数作为基数,转换成十进制的整数
parseInt("1100110", 2) returns 102
parseInt("-FF", 16) returns -255
16进制转十进制:Integer.valueOf("FFFF",16).toString()
8进制转十进制:Integer.valueOf("876",8).toString()
返回有符号int型
返回无符号Integer型
整数类型 默认为 int ,带小数的默认为 double
接口
抽象方法
接口里面的东西默认时public的
如果类可以存在非抽象的成员,如果接口继承了该类,那么接口必定从类中也继承了
这些非抽象成员,这就和接口的定义相互矛盾
接口内部变化
抽象类中因为有普通方法,故也可以有静态方法。
父类中syschronized修饰的方法,继承之后子类可以覆盖这个方法,但是对于子类来
讲并没有继承到线程安全关键字,还得自己加上
构造方法每一调用就创建新的对象,所以不需要同步加锁来保证安全
return和覆盖
try{}语句中的return方法时,它将要返回的结果存储到一个临时栈中,然后程序不
会立即返回,而是去执行finally{}中的程序
即便finary中也对该变量做了赋值操作,也不会改变返回的值
只有当同样是return 该变量才会最终返回新值
finally{}代码块比return先执行
多个return是按顺序执行的,多个return执行一个后,后面的return就不会执行了。
finally里面的return是例外
静态变量只能在类主体中定义,不能在方法中定义
concurrentHashMap采用分段加锁ReentrantLock的机制来确保安全
hashTable中使用synchronized关键字来实现安全机制
SimpleDateFormat对象是线程不安全的
byte b = 4+6,这样是错误的,byte只有一位,此时会自动转型成int
而b1和b2是byte类型,java中进行计算时候将他们提升为int类型,再进行计算
private、protected不能用来修饰interface中的方法和变量
%是取余,如10%3=1
ceil向上取整天花板,
round四舍五入,-4.6=-5
区分
一维数组初始化方法
int a[] = new int[]{1,2,3,4,5}
int a[] = {1,2,3,4,5}
int a[] = new int[5]
类中方法的调用
类的私有成员属性,入宫main 方法就在类内,也可以通过 “对象名.属性名” 的方
式调用
sstatic 不能使用this调用,因为this代表当前的实例化对象
普通成员无法用类名. 来调用,类名. 只能调用静态属性
比如: int i = 21;
final修饰方法,不能被子类重写,但是可以被重载
包装类都在java.lang包中
Float a = 1.0;这个东西不成立是因为浮点型的默认类型是double
执行
静态块:用static申明,JVM加载类时执行,仅执行一次
构造块:类中直接用{}定义,每一次创建对象时执行
调用
执行顺序优先级:静态块>main()>构造块>构造方法
关键字和保留字
Java的关键字对Java的编译器有特殊的意义,如表示数据类型、程序的结构等
Java保留字是指现有Java版本尚未使用,但以后版本可能会作为关键字使用
访问控制
类、方法、变量修饰符
程序控制语句、错误异常处理
public、default、private、protected
包相关
基本数据类型
变量引用
this、void、super
保留关键字
goto、const
byValue, cast,future, generic, inner, operator, outer, rest,
var,goto(保留关键字),const(保留关键字)
常用:false、true、null
成员方法又称为实例方法
静态方法又称为类方法
补充
byte的取值范围是-128—127
所以如byte b = 128这样的语句是错误的
long test=012
float f=-412
正常定义需要加l和f,但是long和float属于基本类型,会进行转化,不会报出异常
double d=0x12345678
int表示范围:负的2的31次方到正的2的31次方减1
表示范围:即按位,2的位-1次方
其它转换
字符转浮点型
字符转整型
Integer.parseInt(String s)
Double.parseDouble(String s)
多输入正则表达式分割
String[] s = new Scanner(System.in).nextLine.split("[ ; , ]")
将多输入的数据以特定的符号分割存储到数组中去
子类引用父类的静态字段,只会触发子类的加载、父类的初始化,不会导致子类初始
化
比如调用父类里面的静态变量
父类构造函数调用初始化
子类加载,但是不会调用子类的构造函数
外部类只有可见不可见两种类别:所以修饰符有:public、default
内存线程
JVM内存区:程序计数器、虚拟机栈、本地方法栈、堆、方法区(包括常量池)
不属于JVM内存区:直接内存(Direct Memory),用户I/O操作
声明抽象方法不可写出大括号:abstract void fun();
不能有空格
满足:Hello$World
String创建的两种方法
String s1 = "aaa",会直接在常量池里创建一个字符串对象
String s2 = new String("aaa"),创建两个字符串对象一个在堆中,一个在常量池
中
基础类型在使用时是从常量池中获取,更严谨的而言其实是在-128~127之间 使用时
是从常量池中获取,那么在使用的时候将常量池中的地址重复利用
内部类要求
一个class有多个类时,只能有一个public类
静态内部类,里面不能使用非静态成员
静态内部类才可以声明静态方法
抽象方法不能有函数体
枚举类所有的枚举值都是类静态常量,在初始化时会对所有的枚举值对象进行第一
次初始化。
比如该枚举类有三个枚举值
相当于要执行三次的public static final 枚举值
Integer的比较
int与Integer、new Integer()进行==比较时,结果永远为true
Integer与new Integer()进行==比较时,结果永远为false
Integer与Integer进行==比较时,看范围;在大于等于-128小于等于127的范围内为
true,在此范围外为false
Integer是创建了新的对象,有新的地址
理解:int是基本数据类型,创建为常量池里面的东西
而包装类创建时会先去常量池看是否有对象,有则指向其作为地址
所以总是相等
垃圾回收
回收的机制:没有引用指向对象,对象会被回收。
回收是不定时的,但不知道具体何时会回收
比如:b = null
创建数组:声明一个数组时,不能直接限定数组长度,只有在创建实例化对象时,才
能对给定数组长度.比如:
String a[]=new String[50]
String b[]
char c[]
父类没有无参的构造函数时,子类需要在自己的构造函数中显式调用父类的构造函
数, 添加 super(); 否则报错:
无能为力就要努力
- 粉丝: 16
- 资源: 332
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0