Java学习笔记1

java程序执行过程

java是编译与解释共存的语言
Java程序运行过程
总结:
使用javac将.java文件编译成.class文件(java字节码)
然后经过jvm解释执行(不同平台有不同实现的虚拟机,可以执行相同的.class文件,不需要重新编译)
在解释执行的过程中,使用JIT即使编译器将热点代码编译成机器码,加快执行速度

什么是 Java 程序的主类 应用程序和小程序的主类有何不同?

  • 一个程序有多个类,但只有一个类是主类

  • 应用程序主类:包含mian()方法的类(不一定是public)–>应用程序是从主线程启动

  • 小程序主类:这个主类是一个继承自系统类 JApplet 或 Applet 的子类(一定是public)–>主要是嵌在浏览器页面上运行(调用init()或者run()来启动)

String StringBuilder 和 StringBuffer

  • String : 对象不可变,线程安全
  • StringBuilder : 对象可变,线程不安全
  • StringBuffer: 对象可变,在StringBuilder的基础上对方法和调用的方法上加了同步锁,实现线程安全

线程的基本状态

  • NEW:初始状态,线程被构建,但是还没有调用start()方法.
  • RUNNABLE:运行状态,Java线程将操作系统中的就绪(Ready)和运行(Running)两种状态笼统地称作"运行中"
  • BLOCKED:阻塞状态,表示线程阻塞于锁
  • WAITING:等待状态,表示线程进入等待状态,进入该状态表示当前线程需要等待其他线程做出一些特定动作(通知或中断)
  • TIME_WAITING:超时等待状态,该状态不用于WAITING,它是可以在制定的时间内自行返回的(sleep(long millis)方法或wait(long milli)方法) TERMINATED:终止状态,表示当前线程已经执行完毕

线程状态的转换

  • 线程创建之后它将处于 NEW(新建) 状态,调用 start() 方法后开始运行,线程这时候处于 READY(可运行)

  • 状态。可运行状态的线程获得了 cpu 时间片(timeslice)后就处于 RUNNING(运行) 状态。 当线程执行

  • wait()方法之后,线程进入 WAITING(等待)状态。进入等待状态的线程需要依靠其他线程的通知才能够返回到运行状态

  • TIME_WAITING(超时等待) 状态相当于在等待状态的基础上增加了超时限制,比如通过 sleep(long millis)方法或
    wait(long millis)方法可以将 Java 线程置于 TIMED WAITING 状态。当超时时间到达后 Java
    线程将会返回到 RUNNABLE 状态 当线程调用同步方法时,在没有获取到锁的情况下,线程将会进入到 BLOCKED(阻塞) 状态

  • 线程在执行 Runnable 的run()方法之后将会进入到 TERMINATED(终止) 状态

Java序列化过程中,如果有些字段不想序列化怎么办?

对于不想进行序列化的变量,使用transient关键字修饰。
transient关键字的作用是:阻止实例中那些用此关键字修饰的的变量序列化;当对象被反序列化时,被transient修饰的变量值不会被持久化和恢复。transient只能修饰变量,不能修饰类和方法

获取键盘输入的两个办法

Scanner:
Scanner input = new Scanner(System.in);
String s = input.nextLine();
input.close();
BufferReader:
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
String s = input.readLine();

BIO,NIO,AIO有什么区别?

  • BIO:同步阻塞IO–BLOCKING
  • NIO: 同步非阻塞IO–>NON-BLOCKING
  • AIO:异步非阻塞IO–>Asynchronous(NIO2)

总结:对于低负载、低并发的应用程序,可以使用同步阻塞I/O来提升开发速率和更好的维护性;对于高负载、高并发的(网络)应用,应使用 NIO 的非阻塞模式来开发

Collections工具类和Arrays工具类常用方法总结

Collections(对于集合):
排序操作:
void reverse(List list)//反转
void shuffle(List list)//随机排序
void sort(List list)//按自然排序的升序排序
void sort(List list, Comparator c)//定制排序,由Comparator控制排序逻辑
void swap(List list, int i , int j)//交换两个索引位置的元素
void rotate(List list, int distance)//旋转。当distance为正数时,将list后distance个元素整体移到前面。当distance为负数时,将 list的前distance个元素整体移到后面。

 查找替换操作:

int binarySearch(List list, Object key)//对List进行二分查找,返回索引,注意List必须是有序的
int max(Collection coll)//根据元素的自然顺序,返回最大的元素。 类比int min(Collection coll)
int max(Collection coll, Comparator c)//根据定制排序,返回最大元素,排序规则由Comparatator类控制。类比int min(Collection coll, Comparator c)
void fill(List list, Object obj)//用指定的元素代替指定list中的所有元素。
int frequency(Collection c, Object o)//统计元素出现次数
int indexOfSubList(List list, List target)//统计target在list中第一次出现的索引,找不到则返回-1,类比int lastIndexOfSubList(List source, list target).
boolean replaceAll(List list, Object oldVal, Object newVal), 用新元素替换旧元素

  同步控制(建议不要使用,使用JUC下的并发集合):

synchronizedCollection(Collection c) //返回指定 collection 支持的同步(线程安全的)collection。
synchronizedList(List list)//返回指定列表支持的同步(线程安全的)List。
synchronizedMap(Map<K,V> m) //返回由指定映射支持的同步(线程安全的)Map。
synchronizedSet(Set s) //返回指定 set 支持的同步(线程安全的)set。

  Arrays(对于数组):

排序 : sort()
查找 : binarySearch()
比较: equals()
填充 : fill()
转列表: asList()
转字符串 : toString()
复制: copyOf()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值