知识点到面2020.08.09

零碎知识点


1:
抽象类中的抽象方法默认不能加private,static,synchronized,native.private让方法私有化,和让子类继承相冲突。static,通过类名可以直接调用方法,可以抽象方法并没有方法体。synchronized,加在static后锁是该类,不加static锁是当前对象,当时抽象类不能实例化,也起冲突。native是让方法交给操作系统去实现,而abstract是将方法交给子类去实现,起冲突。
接口内的方法默认都是abstract.并且也不能使用protected修饰。protected范围只到该对象的子类,导致其他非子类不能实现接口,违背了接口的初衷。


2:
抽象类和接口的比较:
1.抽象类中可以有构造方法,接口中不可以有构造方法。
2.抽象类中可以有普通成员变量,接口不可以有普通成员变量。
3.抽象类中可以有非抽象的普通方法,接口中只能含有抽象方法。
4.抽象类中的方法可以用public,protected,修饰,接口中的方法只能用Public,默认是public abstract。
5.抽象类中可以有静态方法,接口中没有静态方法。
6.抽象类中定义的静态成员变量可以随意设置访问值,接口中设置的变量只能是public static final并且默认是public static final.


3:
jsp中使用pageContext中可以访问page,reques,session,Application范围的变量。


4:
成员方法又叫实例方法。
静态方法又叫类方法。
静态(类)方法无this指针。


5:
.xml : 可扩展文本标记语言,一种文本格式,常用来做配置文件。


6:
成员内部类的访问权限和成员变量一样有4种。


7:
单线程情况下使用HashMap加强效率,多线程情况下保证安全使用HashTable,使用synchronized确保安全,synchronized关键字是让线程独享整张表安全的同时也造成了资源的浪。CurrentHashMap使用的是分段枷锁的方式,1.7使用的是segment关键字,1.8用来synchronized和cas(比较交换,乐观锁)保证并发安全。


8:
Arrays.asList()返回的是Arrays的静态内部类。是List类型的ArrayList对象。


9:AOP和OOP
AOP,面向切面编程,注重于不同模块间相同行为的抽象,往往是和系统要实现的功能无关,但又在实现主要功能时不可缺少,将其于主要功能分割开,实现了解耦,减低了模块间的耦合度。
OOP,面向对象编程,注重于对象的抽象,更加偏重某些共同对象的共同行为的抽象。


10:
类与类之间继承,类与接口之间可以实现,接口与接口之间可以多继承。
类为什么不可以多多继承?
比如class A同时继承classB 和 class C , B和C同时拥有一个D方法,那么这时就会产生一个矛盾,A继承的D方法,会属于谁。接口则没有这个限制。


11:
在循环语句中删除集合的某个元素,使用迭代器的remove方法,可以不带参数直接删除,如果用来for方法可能会导致删除不干净的事情!


12:
start(),启动线程!run()调用方法。
countDownLatch:让一组线程等待其他线程执行完毕再执行
CyclicBarrier :让一组线程等待某种状态再执行。
Callable中的call()能抛出异常和有返回值
start(),让线程进入了可运行状态(Runnable),等待cpu使用权


13:
能被java.exe运行的class文件必须要有main方法,否则会报错。

J2SDK在Java5之后改名成Java SE DK,是Java编译开发的工具,包含编译功能和运行环境,包含jdk和jre。

Java API 是应用程序编程接口。

appletviewer(小程序浏览器),一种执行HTML文件的Java小程序类的Java浏览器,没有main()函数的继承applet类的java类。


14:
package 加包,把文件放到包下。
import:导包,使其可用。


15:
多行注释可以嵌套单行注释。
多行注释不能嵌套多行注释。


16:
ANSI,用七位bit位,用从 0x00 ~ 0x7f,表示一位1字节的英文字符,是标准的ASCII码,用八位,从0x80 ~ 0xFFFF表示扩展ASCII码,


17:
Boolean flag = flase;
if(flag=true) //代表的意思是 if((flag=true)==true)


18:
^异或 相同是零,不同是1
例如 14 ^ 3 == 1110 ^ 0011 == 1101 ==13


19:
原码到补码:符号位不变,取反加1.


20:
1.8版本后接口中的方法通过static 或者default 可以在方法中写方法体。


21:
interface前面没有final !!!里面的final是默认添加在接口类的变量前面的!!!
final修饰的方法可以被重载不能被重写。


22:
i++:先计算,再自增。
++i:先自增,再运算。


23:
java对象初始化顺序:
1.父类静态代码块,和父类静态成员(同级,按顺序执行)
2.子类静态代码块,和子类静态成员(同级,按顺序执行)
3.父类普通代码块,和父类普通成员(同级,按顺序执行)
4.父类构造方法
5.子类普通代码块,和子类普通成员(同级,按顺序执行)
6.子类构造方法
静态只在类加载时调用一次!


24:
只有在没有申明任何构造函数的情况下,系统才会给我们提供一个默认的构造函数。


25:
String.valueOf(参数),返回String


26:
Web servies(WSDL,可描述网络服务),通信机制是使用XML数据交换,采用了SOAP协议(简单对象协议)。xml是重量级和json相比。


27:
对于java命令来说,java后面加的是类名和参数,类名和多个参数用空格隔开。
例如:java MyTest a b c;
运行MyTest类并传入a,b,c三个参数。


28:
linux中tar命令用法:
把常用的tar解压命令总结下,当作备忘:

tar

-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件

这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。

-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出

下面的参数-f是必须的

-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。

# tar -cf all.tar *.jpg

这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。

# tar -rf all.tar *.gif

这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。

# tar -uf all.tar logo.gif

这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。

# tar -tf all.tar

这条命令是列出all.tar包中所有文件,-t是列出文件的意思

# tar -xf all.tar

这条命令是解出all.tar包中所有文件,-x是解开的意思

压缩

tar –cvf jpg.tar *.jpg 将目录里所有jpg文件打包成tar.jpg
tar –czf jpg.tar.gz *.jpg 将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
tar –cjf jpg.tar.bz2 *.jpg 将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
tar –cZf jpg.tar.Z *.jpg 将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
rar a jpg.rar *.jpg rar格式的压缩,需要先下载rar for linux
zip jpg.zip *.jpg zip格式的压缩,需要先下载zip for linux
解压

tar –xvf file.tar 解压 tar包
tar -xzvf file.tar.gz 解压tar.gz
tar -xjvf file.tar.bz2 解压 tar.bz2
tar –xZvf file.tar.Z 解压tar.Z
unrar e file.rar 解压rar
unzip file.zip 解压zip

总结

*.tar 用 tar –xvf 解压
*.gz 用 gzip -d或者gunzip 解压
.tar.gz和.tgz 用 tar –xzf 解压
*.bz2 用 bzip2 -d或者用bunzip2 解压
*.tar.bz2用tar –xjf 解压
*.Z 用 uncompress 解压
*.tar.Z 用tar –xZf 解压
*.rar 用 unrar e解压
*.zip 用 unzip 解压

linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进行压缩。

1.命令格式:

tar[必要参数][选择参数][文件]

2.命令功能:

用来压缩和解压文件。tar本身不具有压缩功能。他是调用压缩功能实现的

3.命令参数:

必要参数有如下:

-A 新增压缩文件到已存在的压缩

-B 设置区块大小

-c 建立新的压缩文件

-d 记录文件的差别

-r 添加文件到已经压缩的文件

-u 添加改变了和现有的文件到已经存在的压缩文件

-x 从压缩的文件中提取文件

-t 显示压缩文件的内容

-z 支持gzip解压文件

-j 支持bzip2解压文件

-Z 支持compress解压文件

-v 显示操作过程

-l 文件系统边界设置

-k 保留原有文件不覆盖

-m 保留文件不被覆盖

-W 确认压缩文件的正确性

可选参数如下:

-b 设置区块数目

-C 切换到指定目录

-f 指定压缩文件

–help 显示帮助信息

–version 显示版本信息

4.常见解压/压缩命令

tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)

.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName

.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName

.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName

.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName

.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知

.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知

.Z
解压:uncompress FileName.Z
压缩:compress FileName

.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName

.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName

.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName

5.使用实例

实例1:将文件全部打包成tar包

命令:

tar -cvf log.tar log2012.log

tar -zcvf log.tar.gz log2012.log

tar -jcvf log.tar.bz2 log2012.log

(摘录于 https://www.nowcoder.com/test/question/done?tid=35726345&qid=516405#summary 中 寻觅201904140716355 的回


29:
子类只会隐式调用父类无参构造方法,不会管是否有带参构造方法。


30:
jvm:
1.通过ClassLoader寻找和装载class文件。
2.为编译字节码文件并提供运行环境。
3.在运行时可以进行垃圾回收操作。
4.提供和硬件交互的平台。


31:
JDK用于并发编程的同步器有哪些:
Semaphore : 可以通过信号许可,控制同时进行的个数,如果个数为1,那其他线程就需要等待别的线程给出许可。
CyclicBarrier(循环栅栏,也可能不是这个叫法):控制的线程需要一组都到达屏障之后才会一起执行。
CountDownLatch:有一个倒计时数,等到归0阻塞的进程才会归0.

你可能感兴趣的:(Java知识点)