zoukankan      html  css  js  c++  java
  • Java知识点:琐碎知识点(3)

    零碎

    • switch(x),x只可以是enum或byte、short、char、int。
    • 枚举在switch-case语句作为标签时必须是枚举常量的非限定名称,否则Compile Error。
    • Enum(枚举)的equals实现等价于==。
    • 如果String的字面值相等,则hashCode()和equals()都相等。
    • StringBuffer/StringBuilder的delete(int start,int end)实现中,如果end > length,则 end=length,也就是说如果end超出了字符串的长度length,则就把end当作length。
    • NumberFormatException extends IllegalArgumentException,且这两个异常都是 程序员 抛出的。
    • static方法中不能使用super关键字。
    • 实例变量不具有多态性。
    • 一般方法内不能声明任何静态变量,因为静态变量是在类加载时分配的空间。
    • High Cohension(高内聚): 类的目的单一明确。
    • Loose Coupling(松耦合): 一个类了解另一个类的程度,良好的封装有助于松耦合。
    • 不管在运行还是import某个类时,都需要使用类的完全限定名称,比如类的完全限定名称为com.hello.A.class,决不允许 java A ,而要 java com.hello.A。
    • Scanner如果nextXxx()与下一个标记不匹配,则抛出 InputMismatchException。

    线程

    • 如果对同一个线程调用两次start,则抛 IllegalThreadStateException(extends RuntimeException)。
    • 多个线程都不相关,一个线程抛异常了,其他线程照样正常运行。
    • t.wait()的线程如果不拥有t的锁,则抛出IllegalMonitorStateException。
    • wait、join、sleep都需要用try-catch块捕获 InterruptedException。
    • Thread.interrupt():当线程调用wait()、sleep()、join()时被"interrupt",则中断状态清除,并抛出“InterruptedException”。
    • Thread.yield()不会释放锁,只是会提供机会给别的线程运行。

    Thread的run方法实现如下:

    class Thread
    {
        Runnable target;
        public Thread(Runnable target)
        {
            this.target = target;
        }
        public void run()
        {
            if(target!=null)
            {
                target.run();    //调用Runnable的run方法
            }
        }
    }

    DateFormat(抽象类)

    • DateFormat.getInstance();
    • DateFormat.getDateInstance();
    • DateFormat.getDateInstance(int style);
    • DateFormat.getDateInstance(int style,Locale loc);
    • DateFormat.getDateTimeInstance();
    • DateFormat.getDateTimeInstance(int dateStyle,int timeStyle);
    • DateFormat.getDateTimeInstance(int dateStyle,int timeStyle,Locale loc);
    • String format(Date date);
    • Date parse(String str) throws ParseException:其中ParseException是检验异常,需要用try-catch捕获。
    • void setCalendar(Calendar calendar);
    • Calendar getCalendar();

    SimpleDateFormat(extends DateFormat)

    • new SimpleDateFormat(String pattern);
    • String format(Date date);
    • Date parse(String str) throws ParseException;

    Locale(设置指定区域)

    • Locale(String language);
    • Locale(String language, String country);
    • language可查询:http://www.loc.gov/standards/iso639-2/php/English_list.php
    • country可查询:http://www.iso.org/iso/prods-services/iso3166ma/02iso-3166-code-lists/country_names_and_code_elements
    • Locale loc = Locale.getDefault(); 获得默认的地区

    Date

    • new Date();
    • long getTime();
    • void setTime(long time);

    Calendar(抽象类)

    • Calendar.getInstance();
    • Calendar.getInstance(Locale loc);
    • void setTime(Date date);
    • Date getTime();
    • add(int field, int value);
    • roll(int field, int value);
    • set(int year,int month,int day);

    NumberFormat(抽象类)

    • NumberFormat.getInstance(): 数值转换
    • NumberFormat.getInstance(Locale loc): 特定地区的数值转换
    • NumberFormat.getNumberInstance():数值转换
    • NumberFormat.getNumberInstance(Locale loc): 特定地区的数值转换
    • NumberFormat.getCurrencyInstance():货币转换
    • NumberFormat.getCurrencyInstance(Locale loc):特定地区的货币转换
    • void setMinimumFractionDigits(int value):最小的小数点位数
    • void setMaximumFractionDigits(int value):最大小数点位数
    • void setParseIntegerOnly(boolean value):parse时是否只parse整数。
    • Number parse(String source) throws ParseException; //截断
    • String format(long/double number); //四舍五入

    泛型

    • 类型擦除:为了兼容Java5之前未使用泛型的代码,编译生成class时,泛型都自动被去除了(可以用反编译工具验证)。
    • <? extends X>:接受X或X的子类,没有<? implements X>和 <T implements X>
    • <? super X>:接受X或X的父类。
    • <?> 等价于 <? extends Object>,表示接受任何类。
    • 如果将通配符用于函数的参数,则如果使用<? extends X>或<?>( 不包括<? super X>),则该集合不能在函数中add元素,否则Compile Error
    • 创建泛型方法:public <T> void fun(T x),注意在返回类型之前需要加上红色的字段。

    哪些异常是编程方式抛出的,哪些是JVM抛出的?

    数组的注意点

    • int[]a = {1,2,3} 和 int[]a = new int[]{1,2,3}(这种声明方式也称为“匿名数组声明”) 有什么区别?最大最明显的区别就是下面的例子。
    public class Array07
    {
        public static void fun(int[]a)
        {
    
        }
        public static void main(String[] args) {
            //fun({1,2,3,4});           //Compile Error
            fun(new int[]{1,2,3,4});    //OK
        }
    }
    • int[][] myArray= {{6,7},{9,8,5}}; 在堆中创建了几个对象? 答案是3个,图示如下:

    匿名内部类

    • 因为匿名内部类是没有类名的,因此不能直接定义构造函数,但是可以在编译时,自动生成构造函数(可以是无参、也可以是有参)。
    public class InnerClass07
    {
        public static void main(String[] args) {
            A a = new A(5)        //OK
            {
            };
        }
    }
    class A
    {
        public A(int a)
        {
    
        }
    }

    匿名内部类反编译如下:

    static class InnerClass07$1 extends A
    {
            InnerClass07$1(int i)
            {
                super(i);
            }
    }

    构造函数

    • default constructor(默认构造函数):编译器自动生成的构造函数。
    • non-parameter constructor(无参构造函数):自己定义的构造函数。
    • 默认构造函数会初始化实例变量。
    • 默认构造函数可能不会调用父类的构造函数,比如Object没有父类。

    File

    • String getParent();
    • File getParentFile();
    • boolean isDirectory();
    • boolean isFile();
    • String[] list();
    • File[] listFiles();

    BufferedWriter

    • newLine():使用当前平台的换行符新起一行。
    • close()、flush()、write();

    FileWriter extends OutputStreamWriter

    • FileWriter(File file);
    • FileWriter(String file);
    • FileWriter(File file,boolean append);
    • FileWriter(String file,boolean append);

    printf的 %b

    • 规则:如果arg为null,则结果为false,如果arg是一个boolean或Boolean,则结果就是实际值,否则,结果为true。
    • 例子:System.out.printf("%b",1); //输出 true。
    • 对于其他的Conersion char如 %d,%s等,如果不能成功转换,则抛:IllegalFormatConversionException。
    public class Printf01
    {
        public static void main(String[] args) {
            System.out.printf("%b",Math.E);    //true
            System.out.printf("%b","false");//true
            System.out.printf("%b",false);    //false
            System.out.printf("%b",null);    //false
        }
    }

    语法糖(Syntactic Sugar)

    是由Peter J. Landin(和图灵一样的天才人物),是他最先发现了Lambda演算,由此而创立了函数式编程)创造的一个词语,它意指那些没有给计算机语言添加新功能,而只是对人类来说更“甜蜜”的语法。语法糖往往给程序员提供了更实用的编码方式,有益于更好的编码风格,更易读。不过其并没有给语言添加什么新东西。                                         ---百度百科

  • 相关阅读:
    websocket的理解及实例应用
    laravel框架cookie应用到中间件的理解
    PHP多机实现session共享
    mysql中exists的详细说明
    window环境下安装pear
    php 进程管理及操作
    PHP设计模式之职责链模式
    PHP设计模式之备忘录模式
    PHP设计模式之装饰模式
    PHP设计模式之策略模式
  • 原文地址:https://www.cnblogs.com/xiazdong/p/3274487.html
Copyright © 2011-2022 走看看