第一节_基础知识

  • 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元素全部置为xx

  • java不显示地支持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-1

  • char[]转换为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
    6
    int 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

版权声明: 本文为原创文章,转载请注明出处