第一节_基础知识
api中查的都是类,函数查不到。
查包的话直接在首页按字母顺序找即可。不清楚数组长度的情况下遍历:
for(String/int.. a : array ){}控制double输出格式:decimalformat类
DecimalFormat df = new DecimalFormat(“0.0000000”);
df.format(xx);
“#.#######”与”0.0000000”的区别,【开头位置】出现0时是否用0占位。#舍去0,0则占位。测试代码执行时间
long a=System.currentTimeMillis();
//测试代码
System.out.println((System.currentTimeMillis()-a)/1000f+” 秒 “);基本数据类型从低级->高级为自动类型转换(因为不会丢失数据)
高级->低级有丢失数据的风险,所以需要强制类型转换。
但若低级->高级时有溢出可能,也需在右式强转,否则无法接收溢出的数据。
eg:
int n=xxx;
double d = n n;
【若n^2超出int范围,则无法接收溢出数据,在右式即截断了】
应为double d = (double)n n;java各数值类型范围
类型|字节数|取值范围
:-:|:-:|:-:
int|4|-2^31~2^31-1(-21亿~21亿)
long|8|-2^63~2^63-1(很大)
float|4|3.4x10^-38~3.4x10^38(绝对值)
double|8|1.7x10^-308~1.7x10^308(绝对值)
char|1|-128~127
boolean|1|true/false取绝对值函数:Math.abs(xx)
开方函数:Math.sqrt(xx)
Arrays.sort(a):将数组a从小到大排序
Arrays.fill(a,xx):将数组a元素全部置为xxjava不显示地支持2进制表示,可用16进制(0x开头)、8进制(0)来代替,直接int即可。
但位运算符:& | ^ ~等都是将数转化为二进制后运算。
十进制数转二进制输出:Integer.toBinaryString(xx);建立class数组
Class[] c = new Class[n];
for(int i = 0;i<n;i++){ c[i] = new Class(); }
还要逐个进行初始化java自定义类比大小
实现Comparable<自定义类名>接口
并重写int compareTo(<自定义类名> xx)方法,
this小于xx返回负值,等于返回零,大于返回正值。多线程时:实现runnable接口的方式便于多重继承,但在类体内可能无法使用一些Threadl类的方法(如sleep)。
继承Thread虽然只能单继承,但方便在类体内使用Thread方法。
第二节_String操作
访问字符串中的元素,返回char
String.charAt(index) 0 ~ lenth-1char[]转换为String:不能直接toString(),会乱码;正确方法为new String(char[])
字符串string匹配要用equals函数,不能直接==;直接==比较的是内存地址
但char可以直接==比较搜索字符串str.indexOf(char ch,int index):从index开始搜
分割字符串:
str.split(“xx”):以”xx”分隔str,返回String数组
str.substring(int begin,int end):返回begin~end-1,所以长度为end-begin。制表符\t,当它的前面有单词的时候,补的空格和单词长度加起来刚好能被 8 整除。
效果:使制表符后面的字符对齐int,double和string转换
1
2
3
4
5
6int i = 10;
double j=1.0;
String str_i=Integer.toString(i);
String str_j = Double.toString(j);
double dd = Double.parseDouble("123.2");
String str_j = Double.toString(j);
第三节_输入输出
使用System.in来创建流时,不可关闭。否则会把其他流也一起关掉
关于输入输出中的next()函数:
Scanner in的输入函数中:next()只接收有效字符,而nextLine()、nextInt()、nextDouble()等此类函数则会接收包括换行、空格在内的一切字符。
所有【next类函数】后接in.nextLine()\nextDouble()..函数会出错,会跳过in.nextLine()的输入语句。
因为nextLine()接收到上一句next()最后的回车符后就结束了。
next()不丢弃末尾的回车符,nextline()函数会丢弃。
【解决】:
(1).next()后单独跟一句nextLine()接收回车符;
(2).都采用next()形式,只接收有效字符。
另外,在同一个函数中,不管中间隔了多少语句,只要没有输入语句,nextLine()就还会接收next()的回车。ObjectInputStream()和ObjectOutputStream()用什么顺序写进去的就用什么顺序读出来。而且Object流和其他流不能混用,必须用同类流输入输出。
运用缓冲流BufferedWriter写文件时,write()函数后一定要接flush()函数,缓冲流中的内容才会写到文件中,否则就一直在缓冲流中。
网络流read、writer读取时只有关闭后才能正常显示-1。
最好用read(byte[])的方法而非一个一个byte read,因为函数的循环调用也会占用时间。
第四节_GUI
写jframe时,setvisible()函数要写到所有所有组件语句之后。
否则一开始不会显示组件,拖动下窗口才会显示。setvisible(true)目的是使控件可以显示出来,如果该控件已经被显示出来,那么该方法使控件显示在窗口的最前方。
但其使用的位置需要注意。setVisible的对象一般是该对象的使用者调用的。如果setVisible在某个控件的内部,那么在setVisible函数后面添加的控件就显示不出来了。
原因就在于,setVisible(true)并不是告诉JVM让该控件可见,而是在内部调用repaint方法把各个控件画出来进行显示。如果在控件还没完全添加完其他控件就setVisible(true)那么在方法后面添加的控件都不能显示。keylistener中的方法是对所有键盘上的按键都会调用。若要针对某个特定的键,可以调用if()方法来判断。
key pressed是按下键,typed是键值传到电脑,released是按键完成释放按键。顺序pressed->typed->released。
1).pressed和typed一般是紧接着的两个动作,中间不会插其他键的函数。而在typed和realesed间若同时按两个键可能会加另外一个键的函数。
2).就是realesed时按键才算按成。
3).长按键会有很多pressed和typed,但只有一个realesed。
Post Date: 2018-01-20
版权声明: 本文为原创文章,转载请注明出处