Java常见问题总结

1、关于length

string的长度为方法,需要使用“.length()”;数组的长度为属性,使用“length”。

另外,容器 “Collection” 与 “Map” 查看元素数量的方法为 size()

2、关系运算符

Java中没有诸如a<b<c,这样的连续进行关系判断的表达式写法,需要拆分来写:a<b && b<c 。

3、String与StringBuffer、StringBuilder

  • String类的内容一旦声明,则不可改变(使用+进行连接实际上是创建了新的变量);而StringBuffer及StringBuilder类声明的内容可以改变。
  • StringBuffer 类中提供的方法都是同步方法(使用“synchronize”进行同步定义),属于线程安全的操作;而StringBuilder列中的方法都属于异步方法,属于非线程安全的操作;StringBuffer与StingBuilder类的方法功能相同。
  • String 使用“+”作为数据的连接操作,另外两个类则使用append()方法进行数据的连接操作。

4、final与finally、finalize

  • final 表示终结器,用于定义不能被继承的父类,不能被覆写的方法、常量;
  • finally 是异常处理的出口;
  • finalize() 是Object类定义的一个方法,用于执行对象回收前的首位工作。此方法中即使产生任何异常或错误,都不影响程序的正常执行。
public class SystemTest {
	// 测试System类,该类主要是提供一些系统的支持操作
	public static void main(String[] args) throws Exception{
		// 对象回收操作
		Human mem = new Human(); // 实例化新的对象
		mem = null;			// 产生垃圾
		System.gc();		// 手动处理垃圾回收
		
	}
}

class Human{
	public Human() {
		System.out.println("一个孩子出生了!");
	}
	@Override
	protected void finalize() throws Throwable{
		System.out.println("活了100岁,是时候了。");
		throw new Exception("此处即使抛出异常也不会对程序产生影响。");
	}
}

5、数据类型转换

Java开发中,最常见的数据类型有6种,包括:java.lang.String、java.util.Date、int(Integer)、double(Double)、byte(Byte)、boolean(Boolean)。

转换规则:

  • Date 与 String 类之间的转换依靠 SimpleDateFormat;
  • String 与 基本类型之间的转换依靠包装类与 String.valueOf() 方法;
  • long 与 Date 之间转换依靠 Date 类提供的构造及getTime() 方法。
import java.util.Date;
import java.text.SimpleDateFormat;

public class DateClass {
	public static void main(String[] args) {
		// (1)取得当前日期时间
		Date date = new Date();
		System.out.println(date);  // 格式:Tue Jul 16 21:29:31 CST 2019
		System.out.println("");
		// (2) long与Date之间进行转换
		long cur = System.currentTimeMillis(); // 获取当前日期时间,以long型返回
		System.out.println(cur);   // 时间戳,单位毫秒,格式long
		Date date1 = new Date(cur);  // long型转换为Date
		System.out.println(date1);  
		System.out.println(date1.getTime()); // Date转换为long后输出
		// (3)格式化日期格式
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSS");
		String str = sdf.format(date1);
		System.out.println(str);
	}

}

6、Arrays类

数组操作类,对数组支持的操作包括:equals()、fill()、sort()、binarySearch()、toString()。

  • 其中,这里的toString方法为Arrays类下的方法,使用方法“Arrays.toString(int[] a)”,不同于“a.toString()”。
  • 使用sort()方法的前提:对象所在的类必须实现 Comparable 接口,否则代码执行会出现 ClassCastException 异常,Comparable 属于比较器的一种。String类、Integer等类都实现了Comparable接口,因此可以直接利用Arrays.sort()方法(这里涉及到普通数组与对象数组的概念,日后慢慢捋一捋。普通数组存放的为直接数据,对象数组存放的为地址数据)。
import java.util.Arrays;
public class ArraysClassTest {

	public static void main(String[] args) throws Exception{
		int data[] = new int[] {1,5,6,2,3,4,9,8,7,10};
		// (1)排序
		java.util.Arrays.sort(data);
		System.out.println(Arrays.toString(data));  // 排序
		System.out.println(Arrays.binarySearch(data, 5)); // 查找元素所在位置
		// 	(2)数组比较(内容及顺序)
		int dataA[] = new int[]{1,2,3};
		int dataB[] = new int[]{1,2,3};
		System.out.println(Arrays.equals(dataA, dataB)); // 相同则输出True,否则为False
		//  (3)数组填充
		int dataC[] = new int[10];
		Arrays.fill(dataC, 2, 4, 3);  // 指定被填充的数组对象,起始位置,终止位置,填充内容
		System.out.println(Arrays.toString(dataC));
		String dataD[] = new String[10];
		Arrays.fill(dataD, "x");  // 不指定起止位置,则统一填充指定内容
		System.out.println(Arrays.toString(dataD));
	}
}

7、比较器:Comparable 与 Comparator

定义BookComparable类,实现Comparable接口,以便于进行“比较”。

import java.util.Arrays;

class BookCompare implements Comparable<BookCompare>{  // 实现Comparable接口(比较器)
	private String title;
	private double price;
	public BookCompare(String title, double price) {
		this.title = title;
		this.price = price;
	}
	@Override
	public String toString() {
		return "书名:"+this.title+", 价格:"+this.price+"\n";
	}
	@Override
	public int compareTo(BookCompare o) { // 这里只对比了对象的价格属性
		if(this.price>o.price) {
			return 1;
		}else if(this.price<o.price) {
			return -1;
		}else {
			return 0;
		}
	}
}

public class ComparableClass {

	public static void main(String[] args) throws Exception{
		BookCompare books[] = new BookCompare[] {  // 实例化一个BookComparable的列表类
				new BookCompare("Java开发", 10.0),
				new BookCompare("Python开发", 20.0),
				new BookCompare("C++开发", 30.0),
				new BookCompare("Java开发", 10.0)
		};
		Arrays.sort(books);  // 对象数组排序,实现排序的前提是实现compareTo方法
		System.out.println(Arrays.toString(books));
	}
}
  • 如果对象数组要进行排序就必须设置排序规则,可以使用Comparable 或 Comparator 接口实现;
  • java.lang.Comparable 是在一个类定义时实现好的接口,本类的对象数组就可以进行排序,在 Comparable 接口下定义了一个public int compareTo() 方法;
  • java.util.Comparator 是专门定义一个指定类的比较规则,属于挽救的比较操作,里面有两个方法:public int compare() 与 public boolean equals()。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值