• Java基础知识点整理


    一、开发环境、数据类型、运算符、执行结构、数组
    1、常用快捷键
    Windows常用快捷键:Ctrl+C 复制 Ctrl+V 粘贴 Ctrl+X 截切 Ctrl+S 保存 Ctrl+Z 回退
    Dos 常用快捷键:Win+R cmd Dos界面 d:切换盘符 cd 切换目录(cd/ cd..) dir 浏览目录 cls 清屏 exit 保存退出
    idea 常用快捷键:
    Ctrl+D 复制一行 Ctrl+Y 删除 Ctrl+R 替换文本 Ctrl+F 查找文本 Ctrl+H 显示类结构 Ctrl+O 重写方法
    Shift+F6 重命名 F2 高亮错误,快速定位 Alt+Enter 自动导包 Shift+tab 回退一个tab

    Ctrl+Shift+F 全局查找文本
    Ctrl+Shift+E 最近修改文件
    Ctrl+Shift+Enter 完成语句
    Ctrl+Shift+V 选择剪贴内容插入
    2、简述JDK和JRE的区别
    JDK:Java开发工具
    JRE:Java运行环境
    JDK = JRE + Java开发工具(java javac jar javadoc )
    JRE = JVM + java核心类库

    3、标识符组成?注意事项?
    由字母、数字、下划线、$组成
    不能数字开头。不能是关键字。(关键字全小写)
    5、Java数据类型,基本数据类型取值范围
    基本数据类型和引用数据类型
    基本数据类型4类8种 :byte short int long float double char boolean
    对应的字节数: 1 2 4 8 4 8 2 1/4
    取值范围:byte short int long -2的(字节数*8-1)次方 到 2的(字节数*8-1)-1
    Interger的整型池范围-128 到127 范围内,从整型池获取对象,若值相同,对象相同。超出范围,值相同,对象不同。
    6、基本数据类型转换
    显示转换和隐式转换
    隐式转换大小顺序:byte,short,char--->int--->long--->float--->double

    7、流程控制
    顺序结构:默认
    循环结构:for while/do{}while() continue break(结束一层循环或多层,多层用:标记) return
    分支结构:if else switch switch 中数据类型 byte short char int 1.5 枚举 1.7 String

    8、运算符
    ++ -- % 三目运算
    += 不改变数据类型
    && & 区别:&& 前面为false不再计算后面
    “==”和“equals”区别:若没重写“equals”等价于“==”比较地址值,重写后一般比较对象值

    9、一维和二维数组常用定义方法
    int[] arr = new int[2];
    int[] arr = {1,2};
    int[][] arr = new int[2][];


    二、面对对象
    1、类的成员
    代码块:花括号括起来的代码
    静态代码块:类加载时,加载
    构造代码块:调用构造方法前调用
    局部代码块:方法内部,限定变量生命周期
    同步代码块:获取同步锁后执行
    成员变量:
    成员变量和局部变量区别
    定义位置 类中,方法外 方法中
    初始不同 初始化,有默认值 初始化,并赋值
    内存位置 堆内存 栈内存
    生命周期 对象销毁 方法调用完毕
    构造方法:
    无参构造 public 类名(){}
    有参构造 public 类名(参数列表){}
    注意事项:无返回值,方法中也没有具体返回值,方法名与类名完全相同,可以重载不可重写,方法内可以有return但没有意义
    成员方法:
    权限修饰符 其他修饰符 返回值类型 方法名(参数列表){方法体}
    可变参数格式:修饰符 返回值类型 方法名(数据类型… 变量名){} 若方法有可变参数,且有多个参数,那么,可变参数肯定是最后一个

    2、封装
    成员变量定义为private,提供getter setter
    3、继承
    “is-a”关系时使用继承,单继承,可多层继承。
    代码块:可以理解成继承和不可继承不影响结果
    属性和方法:只可继承非私有
    重载:发生类内部。只需要方法名相同,参数列表不同。
    重写:发生在子父类。方法签名必须相同,子类访问修饰符大于等于父类,返回值类型、异常小于等于父类。
    构造方法:不可继承
    this super:分别指当前对象和父类对象,可以调用本类或父类属性、方法、构造方法,可以在构造方法中共存但是super需要放在第一行
    先调用父类构造方法,再调用子类构造方法,因为子类可能会使用父类的数据,如果父类没有无参构造用super显示调用有参构造
    继承的好处和弊端:
    好处:增加代码的复用性 提高代码的维护性 多态的前提
    弊端:增加了代码的耦合性
    4、多态
    向上转型:Father f = new Son();
    向下转型:Son s = (Son)f;
    访问特点:
    成员变量:编译看左,运行看左
    成员方法(非静态):编译看左,运行看右 可以调用重写方法,但是不能调用子类特有方法
    静态方法:编译看左,运行看左
    好处:提高代码复用性(继承提供),提高代码扩展性(多态提供)
    弊端:不可访问子类属性和特有的方法
    5、抽象类特点,成员特点?
    特点:
    abstract 修饰
    不能实例化,可由子类实例化
    可以有抽象方法也可以没有 可以没有抽象方法,意义在于不让其他类实例化他
    若子类不是抽象方法,需要重写抽象方法
    成员特点:
    成员变量:可以是变量和常量 不可用abstract修饰
    成员方法:可以是抽象方法也可以不是
    构造方法:有构造方法,供子类调用
    6、接口特点,成员特点?
    特点:interface 修饰;可以多实现,接口可以继承接口 ;不能实例化;实现接口的类若不是抽象类需要重写方法。
    成员特点:
    成员变量:public static final
    成员方法:必须是抽象方法
    构造方法:没有
    7、抽象类和接口的区别?
    成员区别:成员变量、成员方法、构造方法
    关系区别:抽象类只能单继承或多层继承。接口可以多实现,接口间可以多继承。
    含义不同:抽象类代表“is-a”关系。接口代表“like-a” 多指功能的扩展
    8、package
    注意事项:
    一个类只能有一个 package
    package 只能在第一行
    如果没有显示定义 package,默认无包名
    package import class 顺序
    带包的类如何编译和运行:
    编译:javac -d . 类名.java
    运行:java 包名.类名
    9、权限修饰符
    public protected 默认修饰符 private
    10、static特点及注意事项
    特点:类加载时加载,优先于对象存在,所有对象共有,类名.形式调用
    注意事项:static方法不可调用非static方法,static方法内部不可使this
    11、final可以做什么?有什么特点?
    修饰类:该类不可被继承(类中方法隐式final修饰)
    修饰成员变量:该变量变为常量,不可改变其值。若是引用类型,不可改变地址值,可改变其内容。
    修饰成员方法:该方法不可被重写
    12、abstract不能和那些修饰词共用
    final:abstract 是为了让子类继承和重写,但是final不能重写或者继承。意义相反
    static:static 修饰的方法为类的方法,由类直接调用,abstract 修饰的方法没有方法体,调用没有意义
    private:private 修饰的方法,子类不能访问,也没有意义
    13、final,finally 和 finalize 的区别
    final 表示“最后的”不可修改。
    修饰类,该类不可被继承。且类中方法隐式定义为final
    修饰方法,该方法不可被重写。
    修饰变量,该变量为常量,不可修改值,若是引用类型,不可修改地址值,内容可改变。
    finally 用于try ..catch..finally 语句中,一般用于释放资源
    除了try不执行 或者 System.exit(0)等类似情况外 一定会执行
    finalize 定义于object。用于gc回收对象前,释放对象所占用的内存。一般不建议重写
    14、volatile
    15、匿名内部类格式?
    new 抽象类或接口(){
    重写方法
    };
    局部内部类访问局部变量,局部变量必须用final修饰


    三、常用API
    0、Math
    Math.random() [0,1) ceil 向上取整 floor 向下取整 round = Math.floor(a+0.5)
    1、String的常用方法:
    (1)String类的特征
    final 修饰,不可继承
    重写了equals方法
    (2)String类的构造方法
    new String();
    new String(byte[] bytes);
    new String(byte[] bytes,int index,int length);
    new String(char[] chars);
    new String(char[] chars,int index,int length);
    new String(String original);
    (3)String类的常见判断功能及课堂案例
    boolean equals(String str);
    boolean equalsIgnoreCase(String str);
    boolean contains(String str);
    boolean startsWith(String str);
    boolean endsWith(String str);
    boolean isEmpty();
    (4)String类的常见获取功能及课堂案例
    int length();
    char charAt(int index);
    int indexOf(String str);
    int indexOf(String str,int index);
    String substring(int index);
    String substring(int index,int end);
    (5)String类的常见转换功能及课堂案例
    String valueOf();
    String trim();
    String replace(String old,String new);
    String[] split(String regex);
    char[] toCharArray()
    2、String、 StringBuffer、 StringBuilder 区别?
    String 是不可变字符串
    StringBuffer 线程安全,效率较低
    3、正则表达式是什么?语法是什么?
    具有一定规则的字符串
    ^ 开始 d 数字 D 非数字 w 字母 W 非字母 . 任意 [a-z] 范围 | 或者 ()1 反向引用,与括号一起用 0整个表达式 1第一个括号内容 2第二个
    数量
    ? [0-1]
    * [0,无穷]
    + [1,无穷]
    {m,n} [m,n]
    4、正反斜杠
    斜杠“/” 向左,正派 反斜杠“”向右,反派
    斜杠一般用作分隔符 反斜杠一般用作转义
    java 中反斜杠是一个转义字符,非常特殊。所以需要用用它时需要用来转义
    中文匹配 [u4E00-u9FA5]

    5、Date Calendar GregorianCalendar SimpleDateFormat
    Date : 日期时间类,仅仅表示时间,或者存储某个特定的时间
    Calendar ca = new GregorianCalendar();
    或者Calendar.getInstance(); 日历类,可以获取时间的年月日等 获取的星期要减一,月份要加一
    SimpleDateFormat:可以实现文本和时间的互相转换,以及改变时间的表示格式 yyyy-MM-dd HH-mm-ss

    6、泛型
    好处:提高安全性(将运行期的错误转换到编译期);省去强转的麻烦
    注意:1.7的新特性菱形泛型;泛型必须是引用类型
    使用:
    定义在类上 public class 类名<泛型类型1,…>
    定义在方法上 public <泛型类型> 返回类型 方法名(泛型类型 变量名)
    定义在接口上 public interface 接口名<泛型类型>
    泛型通配符:
    任意类型,如果没有明确,那么就是Object以及任意的Java类了
    * B:? extends E
    * 向下限定,E及其子类
    * C:? super E
    * 向上限定,E及其父类

    7、list去重 contains
    LinkedList类特有功能
    public void addFirst(E e)及addLast(E e)
    public E getFirst()及getLast()
    public E removeFirst()及public E removeLast()
    public E get(int index);
    ArrayList 、LinkedList 、Vector 区别:
    ArrayList: 底层数组,线程不安全,效率较高。适合查询,不适合增删。每次增容50%
    Vector: 底层数组,线程安全,效率较低。 适合查询,不适合增删。每次增容1倍
    LinkedList:双向链表,线程不安全,效率较高。适合增删,不适合查询。有大量操作首尾元素方法。

    8、set 自动去重
    HashSet 去重原理
    当HashSet调用add()时,
    * 先调用对象hashCode()得到哈希值, 比较哈希值,无相同则存入集合
    * 有相同,再用equals()比较相同哈希值对象,结果为false存入,true则不存
    所以 ,将自定义类的对象存入HashSet,类必须重写hashCode()和equals()方法
    LinkedHashSet的特点
    * LinkedHashSet 是HashSet子类
    * 可以保证怎么存就怎么取
    TreeSet
    特点:
    * TreeSet是用来排序的, 可以指定一个顺序, 对象存入之后会按照指定的顺序排列
    使用方式:
    * a.对象实现Comparable,重写compareTo方法,this-参数 或 this compareTo 参数 为升序,反之逆序
    * b.创建TreeSet的时候可以new 一个Comparator,重写compare()方法,o1 -o2 或 o1 compareTo o2 为升序,反之逆序
    两种方式的区别:
    * TreeSet构造函数什么都不传, 默认按照类中Comparable的顺序(没有就报错ClassCastException)
    * TreeSet如果传入Comparator, 就优先按照Comparator
    9、Collections成员方法
    public static <T> void sort(List<T> list)
    public static <T> int binarySearch(List<?> list,T key)
    public static <T> T max(Collection<?> coll)
    public static void reverse(List<?> list)
    public static void shuffle(List<?> list)
    集合、数组互转
    * Arrays工具类的asList()方法的使用 Arrays.asList(T[] a);
    * Collection中toArray(T[] a)泛型版的集合转数组 list.toArray(new T[list.size()]);
    10、 三种迭代的能否删除
    * 普通for循环,可以删除,需要索引
    * 迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常
    * 增强for循环不能删除

    11、HashMap
    * Set<Map.Entry<K,V>> entrySet():
    * V get(Object key):根据键获取值
    * Set<K> keySet():获取集合中所有键的集合
    * Collection<V> values():获取集合中所有值的集合
    HashMap和Hashtable的区别
    * Hashtable是JDK1.0版本出现的,是线程安全的,效率低,HashMap是JDK1.2版本出现的,是线程不安全的,效率高
    * Hashtable不可以存储null键和null值,HashMap可以存储null键和null值

    12、异常
    继承体系:
    * Throwable
    * Error
    * Exception
    * RuntimeException 运行时异常,其他为编译时异常
    异常处理的两种方式
    * a:try…catch…finally
    注意:finally块的语句在try或catch中的return语句执行之后返回之前执行
    finally里的修改语句可能影响也可能不影响try或catch中 return已经确定的返回值,
    若finally里也有return语句则覆盖try或catch中的return语句直接返回
    * b:throws
    throws和throw的区别:
    * a:throws
    * 用在方法声明后面,跟的是异常类名
    * 可以跟多个异常类名,用逗号隔开
    * 表示抛出异常,由该方法的调用者来处理
    * b:throw
    * 用在方法体内,跟的是异常对象名
    * 只能抛出一个异常对象名
    * 表示抛出异常,由方法体内的语句处理
    Throwable的几个常见方法
    * a:getMessage()
    * 获取异常信息,返回字符串。
    * b:toString()
    * 获取异常类名和异常信息,返回字符串。
    * c:printStackTrace()
    * 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。

    13、File
    构造方法
    * File(String pathname):根据一个路径得到File对象
    * File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
    * File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
    创建功能
    * public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了
    * public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了
    * public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来
    重命名和删除功能
    * public boolean renameTo(File dest):把文件重命名为指定的文件路径。(路径名不同,就是改名并剪切)
    * public boolean delete():删除文件或者文件夹(删除一个文件夹,该文件夹内不能包含文件或者文件夹)
    判断功能
    * public boolean isDirectory():判断是否是目录
    * public boolean isFile():判断是否是文件
    * public boolean exists():判断是否存在
    * public boolean canRead():判断是否可读
    * public boolean canWrite():判断是否可写
    * public boolean isHidden():判断是否隐藏
    获取功能
    * public String getAbsolutePath():获取绝对路径
    * public String getPath():获取路径
    * public String getName():获取名称
    * public long length():获取长度。字节数
    * public long lastModified():获取最后一次的修改时间,毫秒值
    * public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
    * public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
    文件名称过滤器的概述
    * public String[] list(FilenameFilter filter)
    * public File[] listFiles(FileFilter filter)

    14、流
    按流向分为两种:输入流,输出流
    按操作类型分为两种:字节流,字符流
    字节流的抽象父类:InputStream OutputStream
    字符流的抽象父类:Reader Writer
    IO程序书写
    * 使用前,导入IO包中的类
    * 使用时,进行IO异常处理
    * 使用后,释放资源
    BufferedInputStream和BufferOutputStream:装饰者模式
    使用指定的码表读写字符:
    FileReader是使用默认码表读取文件, 如果需要使用指定码表读取, 那么可以使用InputStreamReader(字节流,编码表)
    FileWriter是使用默认码表写出文件, 如果需要使用指定码表写出, 那么可以使用OutputStreamWriter(字节流,编码表)
    BufferedReader br = //高效的用指定的编码表读
    new BufferedReader(new InputStreamReader(new FileInputStream("UTF-8.txt"), "UTF-8"));
    BufferedWriter bw = //高效的用指定的编码表写
    new BufferedWriter(new OutputStreamWriter(new FileOutputStream("GBK.txt"), "GBK"));
    15、实现线程的常用方法
    继承thread类 实现runnable接口 都可以使用匿名内部类
    获取当前线程的对象 Thread.currentThread()
    线程的生命周期:新生 就绪 运行 阻塞 死亡
    Java线程生命周期:新生 运行 阻塞 等待 超时等待 死亡
    sleep方法和wait方法的区别?
    * sleep在同步代码块或者同步函数中,不释放锁。必须传入参数,时间到了自动醒来。
    * wait 在同步代码块或者同步函数中,释放锁。 可以传入参数,也可以不传入参数 。通常用的都是没有参数的wait方法
    Timer类(计时器)
    Timer timer = new Timer();
    timer.schedule(TimerTask ,Date); TimerTask规定了计时结束后的操作,Date,规定了计时的时间和循环周期。

    16、反射(可以越过泛型检查)
    获取反射类的三种方法
    Class类的静态方法forName(String className) Class.forName("Reflect");
    类的静态属性class Reflect.class;
    对象的getClass()方法 new Reflect().getClass();
    通过反射获取带参构造方法并使用
    无参构造函数创建对象: Reflect reflect1 = (Reflect) clazz3.newInstance();
    有参或指定的构造函数:Reflect reflect2 = (Reflect) clazz3.getConstructor(String.class,String.class).newInstance("反射2","长度2");
    通过反射获取成员变量并使用
    获取可见指定字段并赋值: Field size = clazz3.getField("size"); size.set(reflect1,"长度1");
    获取私有指定字段并赋值:Field name = clazz3.getDeclaredField("name"); name.setAccessible(true); name.set(reflect1,"反射1");
    通过反射获取方法并使用
    获取可见指定方法并执行:Method method2 = clazz3.getMethod("method2", String.class); method2.invoke(reflect1,"参数2");
    获取不可见指定方法并执行:Method method1 = clazz3.getDeclaredMethod("method1",String.class); method1.setAccessible(true); method1.invoke(reflect1,"参数1");

    17、单例设计模式:保证类在内存中只有一个对象。
    (1)控制类的创建,不让其他类来创建本类的对象。private
    (2)在本类中定义一个本类的对象。Singleton s;
    (3)提供公共的访问方式。 public static Singleton getInstance(){return s}
    饿汉式:加载类时,便创建该类的对象,供调用者调用
    懒汉式:当第一次调用获取该类的方法时,才创建该类的对象

    适配器设计模式:定义一个抽象类,实现接口,重写接口所有的方法。当我们继承这个抽象类时,就可以选择性的重写方法。


  • 相关阅读:
    QT中文报错问题
    自动获取UILabel高度
    vi编辑器的使用
    命令例子
    WPF中textBlock 变色功能
    php 删除目录及子文件
    jquery autocomplete插件
    js日历选择控件
    centeros bash: ifconfig: command not found
    php 文件日志类
  • 原文地址:https://www.cnblogs.com/LiuChengGang/p/13756537.html
Copyright © 2020-2023  润新知