黑马程序员——java核心类库

本文深入讲解Java中的核心类,包括Object基类的功能介绍及其提供的关键方法,如equals(), toString(), hashCode()等。同时,详细解析String类的特点及操作方法,如长度获取、字符检索、字符串替换等,并对比String与StringBuffer/StringBuilder的区别。此外,还介绍了基本数据类型包装类的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

一、Object(基类)(java所有类的父类)

是所有类的直接或者间接父类,该类中定义的肯定是所有对象都具备的共性功能

常用方法

1、equals(){}//比较
2、toString(){}//转成字符串
3、hashCode(){}//对象的哈希地址值
4、getClass(){}//返回运行时类
5、finalize(){}//当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。System.gc()调用垃圾回收方法

二、String类( 不可变类)字符串是一个特殊的对象,字符串一旦初始化就不可以被改变。

public class StringDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		/*
		 * String类的特点:
		 * 字符串对象一旦被初始化就不会被改变。
		 * 
		 */
		stringDemo2();
	}

	public static void stringDemo2() {
		// TODO Auto-generated method stub
		
		String s = "abc";//创建一个字符串对象在常量池中。		
		String s1 = new String("abc");//创建两个对象一个new一个字符串对象在堆内存中。
		
		System.out.println(s==s1);//false
		
		System.out.println(s.equals(s1));
		//string类中的equals复写Object中的equals建立了string类自己的判断字符串对象是否相同的依据。
		//其实就是比较字符串内容。
		
		
//		System.out.println("s="+s);
//		System.out.println("s1="+s1);
		
	}

	/**
	 * 演示字符串定义的第一种方式,并明确字符串常量池的特点.
	 * 池中没有就建立,池中有,直接用。
	 */
	private static void stringDemo1() {
		String s = "abc";//"abc"存储在字符串常量池中。
//		s = "nba";
		String s1 = "abc";		
		System.out.println(s==s1);//true?
//		System.out.println("s="+s);
	}

}


1、获取:

1·)、字符串中的包含的字符数,也就是字符串的长度,int length():获取长度。
2)、根据位置获取位置上某个字符,char charAt(int index)
3)、根据字符获取该字符在字符串中位置:
int indexOf(int ch):返回的是ch在字符串中第一次出现的位置;
int indexOf(int ch, int fromIndex) :从fromIndex指定位置开始,获取ch在字符串中出现的位置。
int indexOf(String str):返回的是str在字符串中第一次出现的位置。
int indexOf(String str, int fromIndex) :从fromIndex指定位置开始,获取str在字符串中出现的位置。
int lastIndexOf(int ch) 

2、判断

1)、字符串中是否包含某一个子串,boolean contains(str):
2)、字符中是否有内容,boolean isEmpty(): 原理就是判断长度是否为0.
3)、字符串是否是以指定内容开头。boolean startsWith(str)
4)、字符串是否是以指定内容结尾。boolean endsWith(str)
5)、判断字符串内容是否相同。复写了Object类中的equals方法。boolean equals(str);
6)、判断内容是否相同,并忽略大小写。boolean equalsIgnoreCase()

3、转换

1、将字符数组转成字符串:构造函数(String(char[]),  String(char[],offset,count):将字符数组中的一部分转成字符串。)
  静态方法(static String copyValueOf(char[]);,static String valueOf(char[]):,static String copyValueOf(char[] data, int offset, intcount) )
2、将字符串转成字符数组,char[] toCharArray():
3、将字节数组转成字符串。String(byte[]),String(byte[],offset,count):将字节数组中的一部分转成字符串。
4、将字符串转成字节数组。byte[]  getBytes():
5、将基本数据类型转成字符串。static String valueOf(int),static String valueOf(double)
6、特殊:字符串和字节数组在转换过程中,是可以指定编码表的。
public class StringConstructorDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		/*
		 * 将字节数组或者字符数组转成字符串可以通过String类的构造函数完成。
		 */
		
		stringConstructorDemo2();
	}

	private static void stringConstructorDemo2() {
		char[] arr = {'w','a','p','q','x'};
		String s = new String(arr,1,3);
		
		System.out.println("s="+s);
	}

	public static void stringConstructorDemo() {
		String s = new String();//等效于String s = "";  不等效String s = null;
		
		byte[] arr = {97,66,67,68};
		
		String s1 = new String(arr);
		System.out.println("s1="+s1);
		
	}



}


4、替换

String replace(oldchar,newchar);

5、切割

String[] split(regex)

6、子串   获取字符串中的一部分。

String substring(begin);,String substring(begin,end);
public class StringMethodDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		
		
		stringMethodDemo_4();
		
//		System.out.println("abc".concat("kk"));
//		System.out.println("abc"+"kk");
		
//		System.out.println(String.valueOf(4)+1);
//		System.out.println(""+4+1);
		
	}

	private static void stringMethodDemo_4() {
		
		System.out.println("abc".compareTo("aqz"));
	}

	private static void stringMethodDemo_3() {
		String s = "abc";
		System.out.println(s.equals("ABC".toLowerCase()));
		System.out.println(s.equalsIgnoreCase("ABC"));
		
		System.out.println(s.contains("cc"));
		
		String str  = "ArrayDemo.java";
		
		System.out.println(str.startsWith("Array"));
		System.out.println(str.endsWith(".java"));
		System.out.println(str.contains("Demo"));
	}

	private static void stringMethodDemo_2() {
		
		String  s = "张三,李四,王五";
		String[] arr = s.split(",");
		
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
		
		char[] chs = s.toCharArray();
		
		for (int i = 0; i < chs.length; i++) {
			System.out.println(chs[i]);
		}
		s = "ab你";
		byte[] bytes = s.getBytes();
		for (int i = 0; i < bytes.length; i++) {
			System.out.println(bytes[i]);
		}
		
		System.out.println("Abc".toUpperCase());
		
		
		String s1 = "java";
		String s2 = s1.replace('q', 'z');
		System.out.println(s1==s2);//true
		
		System.out.println("-"+"    ab  c    ".trim()+"-");
		
	}

	private static void stringMethodDemo_1() {
		
		String  s = "abcdae";
		
		System.out.println("length:"+s.length());//6
		System.out.println("char:"+s.charAt(2));//c//StringIndexOutOfBoundsException
		System.out.println("index:"+s.indexOf('k'));//0//-1 我们可以根据-1,来判断该字符或者字符串是否存在。
		System.out.println("lastIndex:"+s.lastIndexOf('a'));//4
		
		
		System.out.println("substring:"+s.substring(2,4));
	}

}


7、转换,去除空格,比较

1、将字符串转成大写或则小写。 String toUpperCase();, String toLowerCase();
2、将字符串两端的多个空格去除。String trim();
3、对两个字符串进行自然顺序的比较。int compareTo(string);

8、需要注意的小细节

1,只要访问到字符串中不存在的角标,就会在运行时期,发生该异常。s1.charAt(10);StringIndexOutOfBoundsException
2,当要替换的字符不存在时,结果是原来的字符串。
3,截取子字符串,当头尾角标相等时,结果是 “” 空字符串。
4,截取子字符串,当开始角标等于长度时,结果是 "" 空字符串。

三、StringBuffer/StringBuilder

特点

1、字符串的组成原理就是通过该类实现的。
2、StringBuffer可以对字符串内容进行增删。
3、StringBuffer:字符串缓冲区,用于存储数据,所以它也称之为容器.
4、很多方法与String相同。
5、StingBuffer是可变长度的。

1、存储

StringBuffer append():将指定数据作为参数添加到已有数据结尾处。
StringBuffer insert(index,数据):可以将数据插入到指定index位置。

2、删除

StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end。
StringBuffer deleteCharAt(index):删除指定位置的字符。

3、获取

char charAt(int index) 
int indexOf(String str) 
int lastIndexOf(String str) 
int length() 
String substring(int start, int end) 

4、修改

StringBuffer replace(start,end,string);
void setCharAt(int index, char ch) ;

5、反转

StringBuffer reverse();

6、转换

void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将缓冲区中指定数据存储到指定字符数组中。
public class StringBufferDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		
		bufferMethodDemo_2();
	}
	
	private static void bufferMethodDemo_2() {
		StringBuffer sb = new StringBuffer("abce");
		
//		sb.delete(1, 3);//ae
		
		//清空缓冲区。
//		sb.delete(0,sb.length());
//		sb = new StringBuffer();
		
//		sb.replace(1, 3, "nba");
//		sb.setCharAt(2, 'q');
		
//		sb.setLength(10);
		
//		System.out.println("sb:"+sb);
//		System.out.println("len:"+sb.length());
		
		System.out.println(sb.reverse());
		
		
	}

	private static void bufferMethodDemo_1() {
		StringBuffer sb = new StringBuffer("abce");
		
//		sb.append("xixi");
		sb.insert(2, "qq");
		
		System.out.println(sb.toString());
	}

	public static void bufferMethodDemo(){
		//创建缓冲区对象。
		StringBuffer sb = new StringBuffer();
		
		sb.append(4).append(false);//.append("haha");
		sb.insert(1, "haha");
//		sb.append(true);
		
		System.out.println(sb);
		
	}
	
	

}


public class StringBuilderDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		
		/*
		 * jdk1.5以后出现了功能和StringBuffer一模一样的对象。就是StringBuilder
		 * 
		 * 不同的是:
		 * StringBuffer是线程同步的。通常用于多线程。
		 * StringBuilder是线程不同步的。通常用于单线程。 它的出现提高效率。
		 * 
		 * jdk升级:
		 * 1,简化书写。
		 * 2,提高效率。
		 * 3,增加安全性。
		 */
		
		
	}

}
/*

class StringBuffer jdk1.0
{
	object lock;
	public   StirngBuffer append(int x)
	{
		synchronized(lock)
		{
		}
	}
	
	
	public synchronized StringBuffer delete(int start,int end)
	{
		synchronized(lock)
		{
		}
	}
}



*/


四、基本数据类型包装类

1、byte——>Byte
2、short——>Short
3、int——>Integer
4、long——>Long
5、double——>Double
6、float——>Float 
7、char——>Character 
8、boolean——>Boolean

以上八种类型的常用方法:
1、字符串转成基本数据类型:xxx a = Xxx.parseXxx(String);,int a = Integer.parseInt("123");,double b = Double.parseDouble("12.23");,boolean b = Boolean.parseBoolean("true");,Integer i = new Integer("123");,int num = i.intValue();。
2、十进制转成其他进制:toBinaryString();,toHexString();,toOctalString();。
3、其他进制转成十进制:parseInt(string,radix);
public class WrapperDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		/*
		 * 基本数据类型对象包装类。
		 * 为了方便操作基本数据类型值,将其封装成了对象,在对象中定义了属性和行为丰富了该数据的操作。
		 * 用于描述该对象的类就称为基本数据类型对象包装类。
		 * 
		 * byte		Byte
		 * short	Short
		 * int		Integer
		 * long		Long
		 * float	Float
		 * double	Double
		 * char		Character
		 * boolean	Boolean
		 * 
		 * 该包装对象主要用基本类型和字符串之间的转换。
		 * 
		 * 基本类型--->字符串
		 * 		1,基本类型数值+""
		 * 		2,用String类中的静态方法valueOf(基本类型数值);
		 * 		3,用Integer的静态方法valueO(基本类型数值);
		 * 
		 * 字符串--->基本类型
		 * 		1,使用包装类中的静态方法   xxx parseXxx("xxx类型的字符串");*****
		 * 			int parseInt("intstring");
		 * 			long parseLong("longstring");
		 * 			boolean parseBoolean("booleanstring");
		 * 			只有Character没有parse方法 
		 * 		2,如果字符串被Integer进行对象的封装。
		 * 			可使用另一个非静态的方法,intValue();
		 * 			将一个Integer对象转成基本数据类型值。
		 * 
		 * 
		 */
		
		
//		System.out.println(Integer.MAX_VALUE);
		
//		System.out.println(Integer.toBinaryString(-6));
		
//		int num = 4;
//		Integer i = new Integer(5);
		
//		int x = Integer.parseInt("123");
//		System.out.println(Integer.parseInt("123")+1);
		
//		Integer i = new Integer("123");		
//		System.out.println(i.intValue());
		
		
		/*
		 * 整数具备不同的进制体现。
		 * 
		 * 十进制-->其他进制。
		 * 		toBinaryString
		 * 		toOctalString
		 * 		toHexString
		 * 
		 * 其他进制-->十进制。
		 * 		parseInt("string",radix)
		 * 
		 */
		
//		十进制-->其他进制。
		System.out.println(Integer.toBinaryString(60));
		System.out.println(Integer.toOctalString(60));
		System.out.println(Integer.toHexString(60));
		
		
//		System.out.println(Integer.toString(60,16));
//		其他进制-->十进制。
//		System.out.println(Integer.parseInt("3c",16));
		
		
		Integer a = new Integer("89");
		Integer b = new Integer(300);
		
		System.out.println(a==b);
		
		System.out.println(a.equals(b));
		
//		System.out.println(3>3);
		System.out.println(a.compareTo(b));
		
		
		
	}

}


五、System

特点:
1、System类是最终类
2、System类不能创建对象
3、System类中的方法都是静态的
out:标准输出,默认是控制台。
in:标准输入,默认是键盘。
1、获取程序运行时间(毫秒)long currentTimeMillis()
2、终止当前正在运行的 Java 虚拟机。exit(int status) 
3、获取当前的系统属性Properties getProperties(),getProperty(String key) 
4、重新指定“标准”输入流目的,setIn(InputStream in) 
5、重新指定“标准”输出流目的,setOut(PrintStream out) 
6、设置系统属性,setProperties(Properties props) ,setProperty(String key, String value) 

六、Runtime 单例设计模式设计的类

1、//获取Runtime对象,Runtime r = Runtime.getRuntime()
2、//调用exec方法,执行,r.exec("可执行性文件的路径");,r.exec("notepad.exe 文件名");
3、Process p = r.exec("可执行性文件");
4、p.destroy()只能杀Rumtime exec开启的进程,windows已有进程杀不了

七、Math

1、double ceil(double d):获取大于指定参数的最小整数的double表现形式
2、double floor(double d):获取小于指定参数的最大整数的double表现形式
3、long round(double d):四舍五入
4、double pow(double a,double b)a是底数,b是指数
5、double random():伪随机数0到1直接的小数不包括1

八、Random

1、double nextRandom(),返回下一个伪随机数,在 0.0 和 1.0 之间均匀分布的 double 值
2、int nextInt() ,返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值
3、int nextInt(int n) ,返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。 

九、Date

日期对象和毫秒值之间的转换
1,将毫秒值转换成日期对象
//a,获取当前时间的毫秒值
long time = System.currentTimeMillis();
//b,将毫秒值转换成日期对象
Date d = new Date(time);
System.out.println(d);
//c,另一种方式,通过setTime方法
Date d1 = new Date();
d1.setTime(time);
2,将对象转换成毫秒值
Date d = new Date();
long time = d.getTime();//用Syestem.currentTimeMillis();也可以

1、 测试此日期是否在指定日期之后。 boolean after(Date when) 
2、测试此日期是否在指定日期之前。 boolean before(Date when) 
3、比较两个日期的顺序。 int compareTo(Date anotherDate) 
4、比较两个日期的相等性。 boolean equals(Object obj) 

十、DateFormat 日期/时间格式化子类的抽象类

1、SimpleDateFormat(可以选择自定义格式化模式)
格式化时间通过构造函数,格式由字符串形式封装SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日E hh:mm:ss");,String time = sdf.format(new Date());
2、Calendar(获取单独的日期时间)
1、获取实例对象,Calendar.getInstance()
2、获取年月日  //查阅API具体字段,Calendar.getInstance().get(Calendar.YEAR)
一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图与注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉和极轴追踪绘制放射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心和象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值