java基础一些学习总结

java 基础知识

1. 常见关键字总结:static、final、this、super

1.1 final关键字

final关键字,用来修饰类,方法,变量

  • final修饰的类不能被继承,final修饰类的所有的成员方法都会被隐式的指定为final方法。
  • final修饰的方法不能被重写
  • final修饰的变量是常量。如果是基本类型的变量,则其数值在出事化后不能被更改;如果是引用类型的变量,则其初始化后不能再指向另外的对象。
1.2 static关键字
  • 修饰成员变量和成员方法:
    被static修饰的成员被类中所有的对象共享,可以通过类名调用。 被static声明的成员变量属于静态成员变量,静态变量存放在java内存区域的方法区
  • 静态代码块:
    静态代码块定义在类中方法外。静态代码块在非静态代码块之前执行(静态代码块 ->非静态代码块 ->构造方法)。该类不管创建多少对象,静态代码块只执行一次。
  • 静态内部类(static修饰类只能修饰内部类):
    静态内部类与非静态内部类之间存在一个最大的区别:非静态内部类在编译完成之后会隐含的保存着一个引用,该引用是创建它的外围类。

静态内部类实现单例模式

public class Singleton {

    //声明为 private 避免调用默认构造方法创建对象
    private Singleton() {
    }

   // 声明为 private 表明静态内部该类只能在该 Singleton 类中被访问
    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getUniqueInstance() {
        return SingletonHolder.INSTANCE;
    }
}
1.3 this 关键字

this关键字用于引用类的当前实例。

class Manager {
    Employees[] employees;

    void manageEmployees() {
        int totalEmp = this.employees.length;
        System.out.println("Total employees: " + totalEmp);
        this.report();
    }

    void report() { }
}

this关键字用于两个地方:

  • this.employees.length:访问Manager类的当前实例的变量。
  • this.report():调用manager类的当前实例的方法。
1.4 super关键字

super关键字用于从子类访问父类的变量和方法。

public class Super {
    protected int number;

    protected showNumber() {
        System.out.println("number = " + number);
    }
}

public class Sub extends Super {
    void bar() {
        super.number = 10;
        super.showNumber();
    }
}

Sub类访问父类成员变量number并调用其父类Super的showNumber()方法。

注意:

  • 在构造器中使用 super()调用父类中的其他构造方法时,该语句必须处于构造器的首行。(this调用本类中的其他构造方法时也是要放置在首行)
  • this、super 不能再static方法中使用。
    this代表对本类对象的引用,指向本类对象;而super代表对父类对象的引用,指向父类对象。

2.其他重要知识点

2.1String、StringBuffer、StringBuilder

总结如下:

  1. 操作少量的数据时:适用String
  2. 单线程操作字符串缓冲区下大量数据:适用StringBuilder。
  3. 多线程操作字符创缓冲区下大量数据:适用StringBuffer(线程安全)
2.2 Object类的常见方法总结
2.3 == 与 equals

== :它的作用是判断两个对象的地址是不是相等。(判断两个对象是不是同一个对象,对于基本数据类型 " == "判断的是值。而引用数据类型比较的是内存地址)

**equals():**它的作用也是判断两个对象是否相等。

  • 情况1:类没有覆盖equals()方法。比较时则等价于 == 比较。
  • 情况2: 类覆盖了equals()方法。这时是比较两个对象的内容是否相等 。
2.4 hashCode()

hashCode()的作用是获取哈希码,也称为散列码。哈希码的作用是确定对象在哈希表中的索引的位置。

2.5java序列化

对于不想进行序列化的变量,使用transient关键字修饰。transient关键字只能修饰变量,不能修饰类和方法

3.集合

3.1Collections

Collections工具类常用的方法:

  1. 排序
  2. 查找、替换操作
  3. 同步控制(需要线程安全的集合类型时考虑使用JUC包下的)

排序操作

void reverse(List list) //反转
void shuffle(List list) //随机排序
void sort(List list)  //按自然排序的升序排序
void sort(List list,Comparator c)  //定制排序,由Comparator控制排序逻辑
void swap(List list,int i ,int j) //交换两个索引位置的元素
void rotate(List list,int distance)  //旋转。当distance为正数时,将list后distance个元素整体移到前面。当distance为负数时,将 list的前distance个元素整体移到后面。

定制排序的用法

public static void main(String[] args) {
    List<User> list = new ArrayList<User>();
    list.add(new User("zhangsan", 80));
    list.add(new User("lisi", 88));
    list.add(new User("wangwu", 60));
    Collections.sort(list, new Comparator<User>() {
        public int compare(User user1, User user2) {
            /**
             * 升序排的话就是第一个参数.compareTo(第二个参数);
             * 降序排的话就是第二个参数.compareTo(第一个参数);
             */
            return user1.getScore().compareTo(user2.getScore());//升序
        }
    });
    System.out.println(list);
}

查找,替换操作

int binarySearch(List list,Object key)  //对List进行二分查找,返回索引,List必须是有序的
int max(Collection coll) //根据元素的自然顺序,返回最大的元素
int max(Collection coll , Comparator c) //根据定制排序,返回最大元素。(int min类比上面)
void fill(List list, Object obj)  //用指定的元素代替指定list中的所有元素
int frequency(Collection c,Object o) // 统计元素出现次数
int indexOfSubList(List list,List target) // 统计target在list中第一次出现的索引,找不到则返回-1。
boolean replaceAll(List list ,Object oldVal ,Object newVal)  //用新的元素替换旧的元素。
3.2 Arrays类的常见操作
  1. 排序:sort()
sort(int[] a)  //按照数字顺序排列指定的数组
sort(int[] a ,int fromIndex,int toIndex) //按升序排列数组的指定范围
parallelSort(int[] a)  //按照数字顺序排列指定的数组(并行的)
  1. 查找:binarySearch()
//二分查找需要先排序后再进行查找,不然查找不到
char[] e = {'a','f','b','c','g','h','i'};
Arrays.sort(e);
System.out.printlin(Arrays.toString(e));//输出排序后的数组
int s = Arrays.binarySearch(e,'i')  //查找出 i 在数组中的位置
  1. 比较:equals()
// *************比较 equals****************
		char[] e = { 'a', 'f', 'b', 'c', 'e', 'A', 'C', 'B' };
		char[] f = { 'a', 'f', 'b', 'c', 'e', 'A', 'C', 'B' };
		/*
		* 元素数量相同,并且相同位置的元素相同。 另外,如果两个数组引用都是null,则它们被认为是相等的 。
		*/
		// 输出true
  1. 填充:fill()
int[] g = { 1, 2, 3, 3, 3, 3, 6, 6, 6 };
		// 数组中所有元素重新分配值
		Arrays.fill(g, 3);
		//输出的结果为:333333333

int[] h = { 1, 2, 3, 3, 3, 3, 6, 6, 6, };
		// 数组中指定范围元素重新分配值
		Arrays.fill(h, 0, 2, 9);
		System.out.println("Arrays.fill(h, 0, 2, 9);:");
		// 输出结果:993333666
  1. 转列表 asList()
List<String> stooges = Arrays.asList("moe","jucky","joker");
System.out.println(stooges);
  1. 转字符串 toString()
  2. 复制 copyOf()
// copyOf 方法实现数组复制,h为数组,6为复制的长度
		int[] h = { 1, 2, 3, 3, 3, 3, 6, 6, 6, };
		int i[] = Arrays.copyOf(h, 6);
		System.out.println("Arrays.copyOf(h, 6);:");
		// 输出结果:123333

// copyOfRange将指定数组的指定范围复制到新数组中
		int j[] = Arrays.copyOfRange(h, 6, 11);
		System.out.println("Arrays.copyOfRange(h, 6, 11):");
		// 输出结果66600(h数组只有9个元素这里是从索引6到索引11复制所以不足的就为0)

3.异常

3.1异常的介绍

java异常类层次结构图
在java中,所有的异常都有一个共同的祖先 java.lang包中的Throwable类。Throwable:有两个重要的子类Exception(异常)Error(错误)

Error(错误):是程序无法处理的错误
Exception(异常):是程序本身可以处理的异常 Exception类中有一个重要的子类RuntimeException,该异常是java虚拟机抛出的。
NullPointException(要访问的变量没有引用任何对象时,抛出该异常)等等异常。

3.2Therowable类的常用方法
public String getMessage()  //返回异常发生时的简要描述
public String toString()  // 返回异常发生时的详细信息
public String getLocalizedMessage() //返回异常对象的本地信息。
public void printStackTrace()  // 在控制台打印Throwable对象封装的异常信息。
3.3 使用try-with-resource 来代替 try-catch-fianlly

面对必须要关闭的资源,我们总是应该优先使用 try-with-resources 而不是try-finally。随之产生的代码更简短,更清晰,产生的异常对我们也更有用。try-with-resources语句让我们更容易编写必须要关闭的资源的代码,若采用try-finally则几乎做不到这点

当然多个资源需要关闭的时候,使用try-with-resources实现起来也非常的简单。

try (BufferedInputStream bin = new BufferedInputStream(new FileInputStream(new File("test.txt")));
             BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(new File("out.txt")))) {
            int b;
            while ((b = bin.read()) != -1) {
                bout.write(b);
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }

未完待续…

《声明:本博客参考github的Guide哥的开源项目而记录,仅供参考和学习!》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值