zoukankan      html  css  js  c++  java
  • Java关键字和基础问题

    1. Java关键字

    1.1 extends和implements

    extends继承普通class或abstract(抽象)类(java单继承)
    implements多继承能力,实现interface(接口)。 注: abstract implements interface  
    

    1.2 interface

    1)实现多重继承, public interface Tinterface 
    2)方法都是public(可不写,默认),只需定义返回值和名字,不能有实现
    3)属性默认是public static final(可不写,默认)
    

    1.3 abstract

    1)修饰class,可无抽象方法。public abstract class AbstractList<E>
    2)修饰方法,public abstract void sleep(); //子类中必须实现
    

    1.4 final

    1)属性/func参数--值不可改变
      a)final int i=100 , i值不能改变
      b)final File f=new File("c:\test.txt"); //f不能重新赋值,但f.xx可以
    2)方法--子类不得覆盖重写该方法,确保在继承中使方法行为保持不变
    3)class--表明不打算继承该类,而且也不允许别人继承。 fianl class Art {}
    

    1.5 static

    不需new对象即可调用到 静态方法/变量
    1)static方法-->  public static void print()
    2)static变量--> 静态变量为所有对象共享,内存中只一个副本,当且仅当类第一次加载时被初始化一次
    3)static代码块--> 可任何位置,形成静态代码块优化性能,类初次加载时会按照顺序执行static代码块,且只执行一次
     private static Date startDate,endDate;
     static{
        startDate = Date.valueOf("1946");
        endDate = Date.valueOf("1964");
     }
    

    1.6 this/super

    1)this 指当前对象自己 (可用于返回对象自己)  
    2)super指代父类。a)super() 调用父类中的初始化方法  b)super.ss()	 调用父类中方法/属性
    

    1.7 instanceOf**

    1) p instanceof Student
    

    1.8 泛型

    1)泛型必须是对象,不能是简单类型(int float)
    2)类型参数可以多个,<T extends SomeClass & interface1 & interface2 & interface3>  //仍保持单继承的规则
    3)限制类型,可使用extends, 如<T extends superclass>
    4)通配符?表示未知类型, 处理定义List<Object>, 但是传入list<String>时编译报错的情况(因类型擦除)。
    5)类型擦除:使用泛型的时候加上的类型参数,会被编译器在编译的时候去掉。这个过程就称为类型擦除。类型擦除的过程,首先是找到用来替换类型参数的具体类。这个具体类一般是Object。如果指定了类型参数的上界的话,则使用这个上界。把代码中的类型参数都替换成具体的类。同时去掉出现的类型声明,即去掉<>的内容。比如: T get()方法声明就变成了Object get(); List<String>就变成了List。 接下来就可能需要生成一些桥接方法(bridge method)。这是由于擦除了类型之后的类可能缺少某些必须的方法
    //示例1
    public class ObjectFoo<T>
    {
        private T x;
    	public ObjectFoo(T x)
        {
            this.x = x;
        }
    	public T getX()
        {
            return x;
        }
    	public void setX(T x)
        {
            this.x = x;
        }
    }
    ObjectFoo<Integer> in = new ObjectFoo<Integer>(123); System.out.println(in.getX());
    ObjectFoo<String> str = new ObjectFoo<String>("asdasd"); System.out.println(str.getX());
    
    //示例2
    public void inspect(List<Object> list)
    {
    	for (Object obj : list)
    	{
    		System.out.println(obj);
    	}
    	list.add(1); //这个操作在当前方法的上下文是合法的。 
    }
    public void test()
    {
    	List<String> strs = new ArrayList<String>();
    	inspect(strs); //编译错误, 如果不报错的话会导致往list<String>中添加了一个int 
    }
    

    1.9 synchronized同步锁

    1)所有对象自动含有单一的锁,当在对上调用其任一synchronized时,对象都被锁住。  
    2)当任务要执行被synchronized关键字保护的代码片段的时候,它将首先检查锁是否可用,然后获取锁,执行代码,释放锁。  
    3)对象里所有的synchronized方法共享一把锁  
    4)在并发时,将域设置成private很重要,否则synchronized关键字就不能防止其他任务直接访问域  
    5)用于static方法时,所有对象共享同一把锁  
    //用于代码块--优先
    public void println(String x) {
        synchronized (this) {
            print(x);
            newLine();
        }
    //用于方法
    public synchronized boolean add(E e) {}
    

    1.10 finally

    try{}catch(){} finally{//此处代码总会执行}
    

    1.11 transient

    0)变量将不被序列化,即反序列化后无值。(transient Object[] elementData)。transient只可修饰对象属性(不能func/class/局部变量)
    1)serilization--序列化,将对象转成字节(供存储或网络发送)。deserilization-反序列化,将字节重建成对象。(类似js的stringfy和parseJson,两个独立的对象)
    2)将需要序列化的类实现Serializable接口就可以
    

    1.12 threadLocal

    1、用于线程集的全局变量(当前线程共享),  private static ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>() 
        seqNum.set(1); seqNum.get(); 
    2、单的static是所有线程共享的全局变量
    

    1.13 enum枚举类型

        Color xx = Color.RED;
        switch (xx)
        {
            case RED:
                System.out.println(xx.getValue());
                break;
            default:
                break;
        }
        public class EnumTest
        {
            public static enum Color
            {
               //enum可给定值
                RED("AA"), YELLOW("ff");
                private String name;
                private Color(String namein)
                {
                    this.name = namein;
                }
                public String getValue()
                {
                    return name;
                }
            }
        }
    

    1.14 Java数组

    String[] cArray = new String[]{"a","b","c","d","e"};  	
    

    1.15 构造函数

    public class LiftOff implements Runnable {
        private  int index ;
        LiftOff(int xx) {
            this.index = xx;
        }
    }
    

    1.16 Date-格式化

    new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E").format(new Date())
    
    //数字转日期,注意月从0开始
    new GregorianCalendar(2017, 9, 26, 11, 54, 06);		
    

    1.17 Base64编解码-64个可见字母

    final Base64.Decoder decoder = Base64.getDecoder();
    final Base64.Encoder encoder = Base64.getEncoder();
    final String text = "字串文字";
    final byte[] textByte = text.getBytes("UTF-8");
    //编码
    final String encodedText = encoder.encodeToString(textByte);
    System.out.println(encodedText);
    //解码
    System.out.println(new String(decoder.decode(encodedText), StandardCharsets.UTF_8));
    

    1.17 MD5加密-512分组,结果16字节长

    MessageDigest md5=MessageDigest.getInstance("MD5");
    Base64.getEncoder().encodeToString(md5.digest(str.getBytes("utf-8")));
    

    1.30 Java正则表达式

    	在其他语言中,\ 表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义。
    	在 Java 中,\ 表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。
    a). \\	表示一个普通的反斜杠
    
    

    9. Java系统参数

    获取 System.getProperty / System.getProperties

    key 描述
    file.separator
    java.class.path
    java.home
    java.vendor
    java.vendor.url
    java.version
    line.separator
    os.arch
    os.name
    os.version
    path.separator
    user.dir 执行java命令的目录
    user.home
    user.name

    10. Java其它

    10.1 java配置

    1)安装,jdk和jre需安装到不同目录(F:programjava8jdk1.8.0_102) //java -version有值则安装成功
    2)环境变量-->系统变量-->新建JAVA_HOME,值F:programjava8jdk1.8.0_102(jdk的安装路径)	//windows环境变量key不区分大小写
    	  -->系统变量-->Path中添加 %JAVA_HOME%in;%JAVA_HOME%jrein;
    	  -->系统变量-->CLASSPATH(无则新建)中添加 .;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib	ools.jar;
    	  -->若成功,则javac有输出值
    3) 注:若javac还是无法执行,检查bin目录下是否有javac.exe,否则重装
    

    10.2 重写equals方法

        //同时必须重写hashCode方法,以维护相等的对象具有相等的hash码(不重写无效)
        @Override
        public boolean equals(Object obj)
        {
            if (this == obj)
            {
                return true;
            }
            Student xx = (Student)obj; //类型转换
            return this.firstName.equals(xx.firstName);
        }
        @Override
        public int hashCode()
        {
            return this.getFirstName().hashCode();
        }
    

    10.3 调用其它可执行文件-exe

    Runtime.getRuntime().exec("C:\Program Files\Notepad++\notepad++.exe 12344");    //参数使用空格传递即可
    
    //等待exe执行完成
    Process p = runtime.exec("asdasd");
    p.waitFor();
    
  • 相关阅读:
    《程序员修炼之道:从小工到专家》读后感2
    Java第五节课总结
    FirstJavaWeb
    Java第四节课总结
    《程序员修炼之道:从小工到专家》读后感1
    Java第三节课总结
    递归回文
    原码、补码和反码
    Java第二节课总结
    C++ STL的容器类型
  • 原文地址:https://www.cnblogs.com/Desneo/p/7228621.html
Copyright © 2011-2022 走看看