day25_0523
选择题
题目中的运算符优先级排序是:'>','<','&&','||'
java.io.InputStream : 此抽象类是表示字节输入流的所有类的超类
java.io.OutputStream : 此抽象类是表示字节输出流的所有类的超类
java.os.InputStream , java.os.OutputStream 应该是不存在的,干扰项
当一个优先级高的线程进入就绪状态时,当前线程执行时,如果是抢占式的调度方式,是会暂停当前线程的执行的,当仍然不是终止它的执行。当不是抢占式的调度时,高优先级的线程将在当前线程终止后,得到优先的执行权。
调用sleep方法,当前线程j进入阻塞状态,sleep执行完成后重新进入就入就绪状态线程结束的三个原因:
1、run方法执行完成,线程正常结束
2、线程抛出一个未捕获的Exception或者Error
3、直接调用该线程的Stop方法结束线程(不建议使用,容易导致死锁)
当创建一个新的线程时,该线程也加入到了抢占cpu执行权的队伍中,但是是否能抢到,并不清楚接口中的变量默认是public static final 的,方法默认是public abstract 的
当一个实体类继承一个抽象类,必须实现抽象类中的抽象方法。所以Cat编译不通过。
A:注意jvm的版本,好比人穿裤子,一条裤子能被任何人穿上吗
B:.java编译成的是字节码,再被各系统的jvm翻译成本系统可以识别的机器码,这就是java一次编程多平台应用的跨平台性
C:java源文件生成的是class文件,与系统无关
D:注意字节码和机器码不是一回事 java程序在运行时字节码才会被jvm翻译成机 器码,所以说java是解释性语言在上面main()方法中,并没有创建一个新的线程,只是简单地方法调用而已,如果想要创建线程,需要t.start();创建线程,等待cpu时间片,而run()方法只是简单地方法调用,所以先执行run(),在输出dazhong
如果调用start后并不保证线程启动的顺序(并发执行)
运行时数据区包括:程序计数器、虚拟机栈、本地方法栈、Java堆、方法区以及方法区中的运行时常量池
(1)、程序计数器: 线程私有,是当前线程所执行的字节码的行号指示器,如果线程正执行一个java方法,计数器记录正在执行的虚拟机字节码指令的地址,如果线程正在执行的是Native方法,则计数器值为空;
(2)、虚拟机栈: 即栈区, 线程私有 ,为虚拟机执行 Java 方法(字节码)服务,每个方法在执行的时会创建一个栈帧用于存放局部变量表、操作数栈、动态链接和方法出口等信息,每个方法的调用直至执行完成对应于栈帧的入栈和出栈;
(3)、本地方法栈: 为虚拟机使用的 N ative 方法服务,也是 线程私有 ;
(4)、Java 堆: 在虚拟机启动时创建, 线程共享 ,唯一目的是存放对象实例,是垃圾收集器管理的主要区域——” GC 堆“,可以细分为新生代和老年代,新生代又可以细分为 Eden 空间、 From Survivor 空间和 To Survivor 空间;物理上可以不连续,但逻辑上连续,可以选择固定大小或者扩展;
(5)、方法区: 线程共享 ,用于存储被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。被称为“永久代”,是因为 H otSpot 虚拟机的设计团队把 GC 分代收集扩展到方法区,即使用永久代来实现方法区,像 GC 管理 Java 堆一样管理方法区,从而省去专门为方法区编写内存管理代码,内存回收目标是针对常量池的回收和堆类型的卸载;
(6)、运行时常量池pool: 线程共享 ,是方法区的一部分, C lass 文件中存放编译期生成的各种字面量和符号引用,类加载后进入方法区的运行时常量池中。
(7)多线程中栈是私有的,堆是公有的
编程
星际密码
例如18的意思就是要计算矩阵|1 1|的18次方;
而且|1 1|的1次方是1,2次方是2,3次方是3,4次方是5,5次方是8……明显是一个斐波那契数
补零的方法可以用format()
String.format()函数: 将括号里的量, 按照自己想要的格式拼接成一个字符串, 然后输出, 即将nums[xi]按照"%04d"输出。
"%04d": 十进制数, 输出4位, 不足4位就补0, 如果本身大于4位, 就正常输出
import java.util.Scanner; public class Main{ public static void main(String []args){ int[] nums=new int[10001]; nums[1]=1; nums[2]=2; for(int i=3;i<nums.length;i++){ nums[i]=nums[i-1]+nums[i-2]; nums[i]=nums[i]%10000;//保证元素不超过4位 } Scanner sc=new Scanner(System.in); while(sc.hasNext()){ int n=sc.nextInt(); StringBuffer sb=new StringBuffer(); for(int i=0;i<n;i++){ int xi=sc.nextInt(); sb.append(String.format("%04d",nums[xi])); } System.out.println(sb); } } }
数根
尽量要用数组
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); while(sc.hasNext()){ String s=sc.next(); while(s.length()>1){ s=numRoot(s)+""; } System.out.println(s); } } public static int numRoot(String s){ int root=0; for(int i=s.length()-1;i>=0;i--){ root+=s.charAt(i)-48; } return root; } }