java核心编程笔记

1.一个对象变量并没有实际包含一个对象,而仅仅是引用一个对象,在java中任何对象变量的值都是对存储在另外一个地方的一个对象的引用,new 操作符的返回值也是一个引用。


2.所有类(静态类也是一个)只有被实例化的时候,它里面的属性才会被初始化。


3.代码执行步骤:

类初始化流程,都是按照以下1,2,3步骤来执行的

1.父静态域,静态块--》本类静态域,静态块--》子静态域,静态块--》
2.父实例域,实例块--》父构造函数 --》本类实例域,实例块--》本类构造函数--》子实例域,实例块--》子构造函数--》
3.完成初始化

将所有的静态域(类属性)进行初始化为默认值,0,false,null。
按在类中定义的顺序执行静态域(类属性)的初始化语句(如static int a=10中的a=10这个初始语句)和静态块。
所有的非静态域(对象属性)被初始化为默认值,0,false,null。
按在类中定义的顺序执行非静态域(对象属性)的初始化语句(如int a=10中的a=10这个初始语句)和非静态块。
执行函数构造器,如是构造器中调用了别的构造器,将先跳转到别的构造器,执行完成后再执行当前构造器

4.使用import static 包,可以直接使用包中类的静态方法。
import static java.lang.System.*;
out.println("hello");


5.权限修饰符
private 只允许本类使用
protected 只允许本类和本类的子类以及同包下的类使用
public 所有类都可以使用
不加修饰符  只有同包的类可以使用


6.final类不能被继承,并且其所定义的方法都是final类型而其中定义的属性成员则不会自动转成final。某一个方法被定义成final后,其子类不能覆盖此方法。


7.抽象类不能被实例化,也就是不能使用A a=new A();来实例化抽象类。抽象方法没有方法体。


8. 生成一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:Outer.Inner in = new Outer.Inner();而不需要通过生成外部类对象来生成。


9.代理模式:为其它对象提供一种代理以控制对这个对象的访问。在某些情况下,一 个客户不想直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介作用。 


10.泛型,T extends x,x可以是接口也可以是类。数组泛型不能被new实例化。虚拟机中不存在泛型,都是擦除泛型过后的普通类和普通方法。不能在静态属性或方法中引用类型变量


11.使用锁方式,
一, ReentrantLock锁(独占锁) ReentrantReadWriteLock(读写锁,只要没有在写就可以多线程读) Contition 条件等待 contition=lock.newContition创建一个条件, 条件成立contition.await用来等待,contition.signalAll或者signal用来唤醒等待,tryLock判断是否能获得锁
二,内部锁,每个对象有一个锁,synchronized修饰方法。 wait添加一个线程到等待中(wait,nodify等调用是对象本身),nodifyAll ,nodify用来唤醒等待,这些方法只能用于同步方法中。synchronized(obj){代码},如果修饰的是对象,那就会获取这个对象(obj)的锁。
三,阻塞队列,ArrayBlockingQueue循环数组构建,LinkedBlockingQueue链表构建,DelayQueue阻塞时间有限的队列,PriorityBlockingQu
eue优先级队列。队列中应该装的是要操作的数据,多个线程去访问队列。


12.RandomAccessFile断点续传


13.对象序列化,用来存储对象和传输对象,使用前8位的SHA应用于对象类,接口,方法散列算法获取指纹。用transient来标志某个类中的域不可被序列化,因此会在验证的时候跳过这些不被序列号的域。serialVersionUID使用自动生成的,这样将会直接读取这个值,而不用再计算指纹


14.Path和Files类的使用


15.XML解析,树解析Dom:读入整个文档形成树;流解析SAX,以事件驱动方式读入xml文件。


16.通过Socket new一个来建立客户端,通过ServerSocket new一个来建立服务端,ss.accept来在服务器端建立一个和客户端的链接。
半关闭,关闭输出流,但输入流还打开着,shutdownOutput,可中断的Socket-SocketChannel


17.JavaMail用来实现邮件的发送


18.动态编译,使用JavaCompiler对java源文件进行编译得到class文件,然后加密class文件,使用类加载器来实现对.class字节文件的解密,如可以将编译后的class文件进行加密,在程序运行时,实现一个类加载器,把.class文


解密后再加载到虚拟机中。


Java可以通过反射机制去修改某一个实例化的对象的属性值(即使是私有的属性),用SecurityManager来防止使用反射访问私有属性,但是如果是class文件在别人手里,用自己的类加载器来加载class文件并修改其字节码,一样是可以攻破的


19.MessageDigest可用于对SHA算法操作,update读入要加密的文件,使用digest来获取sha


20.数字签名(防止文件被篡改),公共密钥可以传播,私有密钥自己保存,公共密钥是通过私有密钥(由一组算法)来产生的,别人无法推算出公共密钥。
一,keytool -genkeypair -keystore alice.certs -alias alice  通过keytool来建立一个密钥库,并创建一个别名为alice的密钥对
二,keytool -exportcert -keystore alice.certs -alias alice -file alice.cer 通过密钥库中的alice密钥对导出一个证书alice.cer
三,把证书发送到网上,供人下载,或者只是提供此证书的MD5,SHA1指纹信息
四,别人从网上下载证书到本地,keytool -printcert -file alice.cer 打印出证书的信息,以及证书的指纹SHA1,来确认是否是某个作者
五,别人也可以把下载到的证书导入本地密钥库中,keytool -importcert -keystore bob.certs -alias alice -file alice.cer后期可以使用此证书来验证某个文件是否为某人所创建的。
六,证书创建者对她要发布的一个文件进行签名,比如一个jar包。jarsigner -keystore alice.certs document.jar alice,并发布jar包
七,别人下载此jar包时,进行验证,jarsigner -verify -keystore bob.certs document.jar 结果为jar verified说明是正确的文件
八,或者直接读出一个文件的指纹信息,计算MD5或者SHA1用MessageDigest


21.apk在打包的时候会把证书也放到apk中,像百度一样会先要求你给他们你打包时候的密钥对的SHA1,当你发布这个apk时,则会从apk中提取打包进去的证书再取出证书中的SHA1然后进行你之前提供的SHA1进行比对,如果相同,说明文件合法。


22.对称密码AES,Cipher类;
非对称密码Rivest,RSA,
A生成一个随机对称加密密钥,用密钥对明文加密,生成了一个加密的明文;
A用B的非对称性公共密钥给自己的对称密钥进行加密
A把用B的非对称性公共密钥加密后的对称密钥和用A自己的对称密钥加密后的明文一起发给了B
B用自己的非对称性私有密钥解开A的对称密钥,B再用解密后的A的对称密钥对A发送过来的加密文档进行解密。
B得到解密后的文档


23.rhino js与java交互的引擎库


24.注解可存在的形式,一:source源代码,可通过读取源代码java文件来辨识注解,举例有java文档生成,在编译java文件的时候注解将会忽略丢掉。二,class,在编译成class文件的时候注解还在里面,用于分析,但是会在运行的时候丢掉。三,runtime,运行此类的时候可以通过反射类加载读取到,用于判断并做一些处理,或者是开发此注解的工具。


25.RMI远程对象调用


26.java用static修饰main方法是为了当虚拟机执行时,只要输入类名就可以去找main并执行,而不用实例化它。




27.JNI


28.匿名内部类,没有名字,必须要继承一个类或者接口,并实现其中的抽象方法。new MM(){void printf(){//打印}}。MM就是匿名内部类的父类或者接口,其自己是没有名字的类。


29.线程之间通信方式:
一,共享变量,提供方法去访问这个变量,并用synchronized修饰这个方法。
二,wait/nodify机制,对象锁
三,lock/condition 独占锁
四,管道,PipedOutputStream pos,PiepInputStream  pis ,关联,pos.connect(pis); Thread(pis) t1,Thread(pos) t2 .pos30.write();pis.read();


30.进程间通信,
一,管道(PIPE)   二,命名管道(FIFO)  三,信号(Signal) 四,信号量(Semphore)   五,消息队列(MessageQueue)   六,共享内存(SharedMemory)   七,内存映射(Mapped memory) 八,套接口(Socket)













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值