Java基础Day12

day12

  1. API使用和类库
    1.1 API的使用
    API : Application Programming Interface 应用程序开发接口
    接口 : 规则限定
    API对于咱们开发人员,相当于是一个Java语言的而开发手册,API中包含JDK给开发人员写好的,所有的类文件,以及这些类文件的定义方式,以及使用方式

1.2 类库

类库 : 程序员最终开发的项目代码,需要交付给客户. 交付的都是.class文件
一系列的.class文件集合在一起,形成了一个jar包,jar包在Java中,属于标准的文件压缩包

在eclipse中,创建一个工程,在工程中,包含JRE System Libary (JRE系统类库),包含了JDK给你写好的,程序员可以直接使用的一些类文件

1.2.1 Jar包的导入和导出

  1. jar包的导出 : 将写好的程序中的.class文件,导出成一个jar包,可以给其他人或者客户使用
    点击项目工程—>鼠标右键—>Export(导出)
    在这里插入图片描述

点击Java---->JAR file---->Next

在这里插入图片描述

点击Next之后,需要填写一个jar包生成之后,存放的路径:
在这里插入图片描述
导出jar包成功

在这里插入图片描述

  1. 将jar包导入到项目中使用
    1)点击项目工程---->右键---->new —> Folder(文件夹),在项目工程下新建一个lib文件夹
    在这里插入图片描述

给文件夹起名为lib
在这里插入图片描述

  1. 将准备好的jar包,复制到lib文件夹下,ctrl+c ,ctrl+v
  2. 在lib文件夹下,点击jar包---->鼠标右键—>build path ----->add to build path

在这里插入图片描述
在这里插入图片描述
项目导入成功后,可以在使用导入项目中的类文件代码

  1. Object类
    2.1 Object类的概述
    Object类,来自于java.lang包
    Object是所有类的根类,最顶层父类. 每个类都使用 Object 作为超类。当一个类没有定义直接父类的时候,Object类就默认成为这个类的父类. 包括数组都实现Object类的方法
    class A extends B{}
    class B extends Object{}

  2. Object 类也有构造方法,可以创建对象,因为Object是顶层父类,Object再无父类,Object构造方法中,没有super()
    代码
    package com.zgjy.objectDemo;
    public class CreateObject {

    public static void main(String[] args) {
    // 创建一个Object对象, Java中,来自于java.lang包中的类
    // 可以直接使用,不需要导包
    Object obj = new Object();
    //java.lang.Object@15db9742
    System.out.println(obj);
    }
    }

2.2 Object类中的常用方法
2.2.1 getClass() 方法
getClass() : 返回运行时类(反射内容),返回值类型Class类型
所有类在内存运行时,都属于运动状态,这种运动状态的类型都属于Class类型
Class类中,有一个方法,叫做getName() : 能返回带有完整包的的类名字符串结果

代码
package com.zgjy.objectDemo;
public class CreateObject {
public static void main(String[] args) {
// 1. 创建一个Object对象, Java中,来自于java.lang包中的类
// 可以直接使用,不需要导包
Object obj = new Object();
// 2. Object中的getClass方法,返回正在运行的Object类的类型
Class c = obj.getClass();
System.out.println©;// class java.lang.Object
}
}

package com.zgjy.objectDemo;

// Person类没有直接父类,Object默认成为Person的父类
public class Person {
// Person继承了Object中的所有非私有方法
}

package com.zgjy.objectDemo;
public class TestObject {
public static void main(String[] args) {
Person p = new Person();
// 1. getClass() 方法,返回值类型Class类型
Class c = p.getClass();
//class com.zgjy.objectDemo.Person
System.out.println©;
// 2. Class类中方法,getName() : 返回带有完整包名的类名
// 返回值结果字符串类型
String name = c.getName();
//com.zgjy.objectDemo.Person
System.out.println(name);
}
}

2.2.2 hashCode()方法
hashCode() : 返回对象的哈希码值,返回值类型int类型
解释 :

  1. hashCode()方法一般用于比较,多个对象是否是同一个对象,去重复
  2. 将每一个对象的内存地址,转换成一个int类型的数据进行返回,根据int类型结果是否相等,判断对象是否是同一个对象

验证规律:

  1. 不同的对象,返回不一样hashCode值
  2. 相同的对象,返回的hashCode的值是相同的

代码
package com.zgjy.objectDemo;
public class TestObject {
public static void main(String[] args) {
Person p = new Person();
// 1. 再次创建一个Person对象
Person p1 = new Person();
// 2. Object中hashCode() 方法
int hash = p.hashCode();
int hash2 = p1.hashCode();
System.out.println(hash);
System.out.println(hash2);
System.out.println(hash == hash2);

	//3. 相同的对象,返回相同的hashCode值
	int  hash3 = p.hashCode();
	System.out.println("-----"+hash3);
	System.out.println(hash == hash3);
}

}

2.2.3 toString()方法
Object源代码: 将对象的地址值打印出来
public String toString() {
//com.zgjy.objectDemo.Person@6d06d69c
return getClass().getName() + “@” + Integer.toHexString(hashCode());
}

  1. getClass().getName() : 结果String类型,带有完整包名的类名
  2. “@” : 表示一个分隔符
  3. Integer.toHexString(hashCode()) : 将对象的hashCode的int类型结果,转换成一个16进制数
  4. toString方法打印出了对象在内存中对应的16进制地址值
  5. 很多场景下,toString方法打印出对象在内存中的地址值,意义不大,因此,需要子类重写父类Object中的toString方法,通常toString打印的结果是当前对象的成员变量值
    如何重写 :
    使用快捷键 alt + shift +s : 去选择你想要生成的代码

代码
package com.zgjy.objectDemo;

// Person类没有直接父类,Object默认成为Person的父类
public class Person {
private String name ;
private int age ;
// Person继承了Object中的所有非私有方法
// alt +shift +s : 能将eclipse提供的自动生成代码列表展示出来
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {// 重写了父类的toString方法,打印对象中成员变量的值
return “Person [name=” + name + “, age=” + age + “]”;
}
}

package com.zgjy.objectDemo;
public class TestObject {

public static void main(String[] args) {
	Person p1 = new Person();

	// 1. 没重写toString方法
	String ss = p1.toString();
	// com.zgjy.objectDemo.Person@6d06d69c
	System.out.println(ss);
    // 2. 重写toString方法后,打印结果Person [name=null, age=0]
	System.out.println(p1);
}

}

2.2.4 equals()方法
Object类是所有类的父类,equals方法的参数是一个父类类型,那么方法实际调用时,Object类本身以及Object类的任意子类对象,都可以作为参数传递,使用的是多态
equals(Object obj) : equals方法用于比较两个对象是否相等,两个对象分别是,一个是equals方法的调用者,一个就是equals方法的参数,返回值类型boolean

equals Object源代码比较的是两个对象的地址值是否相等
在真实的而开发场景中,一般不比较对象地址,比较对象的内容,比较对象的成员变量的值(去重复),重写equals, alt + shift + s ,重写equals方法

public boolean equals(Object obj) {//
return (this == obj);
}
this关键字 : 表示本类对象引用,this表示对象引用
哪个对象调用了带有this的方法,那么this就表示哪个对象

代码
package com.zgjy.objectDemo;
// Person类没有直接父类,Object默认成为Person的父类
public class Person {
private String name ;
private int age ;
// Person继承了Object中的所有非私有方法
// alt +shift +s : 能将eclipse提供的自动生成代码列表展示出来
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return “Person [name=” + name + “, age=” + age + “]”;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
package com.zgjy.objectDemo;
public class TestObject {
public static void main(String[] args) {
// 1. equals 方法
Person per = new Person();
Person per1 = new Person();
// 比较per对象和per1对象是否相等
// this == obj , this就表示per对象
// 哪个对象调用了带有this的方法,那么this就表示哪个对象
// Object源代码,比较的是两个对象的地址值是否相等
boolean boo = per.equals(per1);
System.out.println(boo);// false
}
}

2.2.5 == 和 equals的区别

  1. == 比较运算符,判断符号两边的数据是否相等
  2. equals 方法,判断两个对象是否相等

区别:

  1. == , 可以比较基本数据类型,判断两个数据是否相等
    == , 可以比较引用数据类型,判断两个对象的地址值是否相等

  2. equals , 不能比较基本数据类型
    equals比较引用数据类型, Object源代码比较的是两个对象的地址值是否相等
    Object子类重写了equals方法后,比较的是两个对象的成员变量值是否相等

  3. String类
    3.1 String类的概述
    String类,来自于java.lang包,使用的时候不需要导包(java.lang包下的所有的类使用的时候,不需要导包,可以直接使用)

  4. String就表示字符串,Java中,所有的字面意义上的””,都是String类型的对象

  5. String类型字符串,叫做常量字符串,常量指使用final修饰的变量
    private final char value[];
    在Java中定义了一个字符串,”字符序列”,String底层将一个字符串里面的每一个字符获取到,然后封装到一个数组中,private final char value[];

定义:
String s = “abc”;//private final char value[]; private final char[] value = {‘a’,’b’,’c’};

3.2 String类的构造方法

  1. 空参数构造 : String()
    String s = new String(); // 创建一个空的字符串

  2. String(String original) : 创建一个与original一致的字符串
    String类型字符串,存储在方法区的常量池中,如果有多个字符串常量内容一致,那么会指向常量池中的同一块内存区域
    在这里插入图片描述

  3. String(byte[] bytes) : 将一个byte类型的数组,通过系统默认的编码集,将byte类型数据,转换成字符,将字符转换成字符串

  4. String(byte[] b , int offset ,int length ): 将byte数组的一部分转换成字符串,从数组的offset索引位置开始,截取length长度的字节

  5. String(char[] ch) : 将一个字符数组,转换成字符串

  6. String(char[] ch, int offset , int length) : 将字符数组的一部分,转换成一个字符串,从数组offset索引值开始,截取length个字符

代码
package com.zgjy.stringdemo;
public class StringDemo {
public static void main(String[] args) {
// 1. "abc"就是一个String类型的对象,相当于new
String s = “123”;
System.out.println(“abc”);

	// 2. String类型的构造方法,String()使用很少
	String s1 = new String();
	System.out.println(s1);
	
	// 2.1 String(String org): 创建一个与org一致的字符串
	// 在内存中开辟两块内存空间
	String s2 = new String("1234");
	System.out.println(s2);
	
	// 2.2 String(byte[] b) : 3.将一个byte类型的数组,通过系统默认
	//的编码集,将byte类型数据,转换成字符,将字符转换成字符串
	byte[] b = {96,97,98,99};// a
	String s3 = new String(b);
	System.out.println(s3);//`abc
	
	// 2.3 String(byte[] b , int offset ,int length ): 将byte数组的一部分转换成字符串
	// ,从数组的offset索引位置开始,截取length长度的字符
	String s4 = new String(b,1,2);
	System.out.println(s4);// ab
	
	// 2.4 String(char[] ch) : 将一个字符数组,转换成字符串
	char[] ch = {'A','a','8','夹'};
	String s5 = new String(ch);
	System.out.println(s5);//Aa8夹
	
	// 2.5 String(char[] ch, int offset , int length) : 将字符数组的一部分,
	// 转换成一个字符串,从数组offset索引值开始,截取length个字符
	String s6 = new String(ch,0,3);
	System.out.println(s6);//Aa8
}

}

3.3 String字符串常量在内存中的存储

代码
package com.zgjy.stringdemo;
public class StringTest {
public static void main(String[] args) {
String s = “123”;
changeString(s);
System.out.println(s);// 123
}
public static void changeString(String s) {
s = “abc”;// 将s的地址值修改了
System.out.println(s);// abc
}
}
String常量在内存中的运行存储过程:

在这里插入图片描述

3.4 String类中的判断方法

  1. equals(Object obj) : String重写了父类的equals方法,比较字符串的内容是否相等,返回值类型boolean
  2. contains(String s) : 判断字符串中是否包含s字符串
  3. startsWith(String s) : 判断字符串是否以s字符串开头
  4. endsWith(String s) : 判断字符串是否以s字符串结尾
  5. isEmpty() : 判断字符串是否为空,如果字符串为空,返回true,如果不为空,返回false

代码
package com.zgjy.stringdemo;

public class StringPanDuanMethod {

public static void main(String[] args) {
	// 1. equals(Object obj) : 
	String s = "abc";
	String s1 = "123";
	boolean boo = s.equals(s1);
	System.out.println(boo);// false
	
	String s2 = "ABc";
	boolean boo1 = s.equals(s2);
	System.out.println(boo1);// false
	
	// 2. contains
	String s3 = "helloworld";
	boolean boo2 = s3.contains("llo");
	System.out.println(boo2);// true
	
	// 3. startsWith : 判断字符串是否以s字符串开头  
	// endsWith : 判断字符串是否以s字符串结尾
	String s4 = "hello1234";
	boolean boo3 = s4.startsWith("hello12");
	System.out.println(boo3);// true
	
	boolean boo4 =  s4.endsWith("1234");
	System.out.println(boo4);// ture
	
	// 4. isEmpty():判断字符串是否为空,如果字符串为空,返回true,如果不为空,返回false
	// null 值调用任何方法,全部报出NullPointerException
	String s5 = null;
	// NullPointerException
	// boolean boo5 = s5.isEmpty();
	System.out.println(s5);
	
	String s6 = "";// 空字符串
	boolean boo5 = s6.isEmpty();
	System.out.println(boo5);// true
	System.out.println(s4.isEmpty());// false
}

}

3.5 String类的获取功能

  1. length() : 求字符串的长度,返回值int类型
  2. charAt(int index): 求字符串中指定的索引值index,对应的字符,返回值结果char类型
  3. subString(int index): 获取到字符串的一部分,从字符串的index索引开始,到字符串最后,截取成一个新的字符串,返回值类型String类型
  4. substring(int beginIndex , int endIndex):
    截取字符串的一部分,从beginIndex索引开始到endIndex索引结束
    包含开始索引,不包含结束索引
    JDK的方法中,针对于两个索引值的操作,一般情况下都是包含开始索引,不包含结束索引
  5. indexOf(String s) : 获取s字符串在方法调用字符串中第一次出现的所以位置,返回值类型int类型,没有指定s字符串,返回-1的索引值

代码
package com.zgjy.stringdemo;
public class StringGetMethod {
public static void main(String[] args) {
// 1. length() : 求字符串的长度
String s = “helloworld”;
String s1 = “”;
String s2 = " ";// 一个空格也作为一个字符存在

	System.out.println(s.length());//10
	System.out.println(s1.length());//0
	System.out.println(s2.length());//2		
	
	// 2. charAt(int index):返回字符串中指定索引位置的char字符
	// 字符串的索引位置从0开始
	char ch = s.charAt(7);
	System.out.println(ch);// r
	
	for( int i = 0  ; i< s.length() ; i ++) {
		System.out.println("----"+s.charAt(i));
	}
	
	// 3. substring(int index):获取到字符串的一部分,从字符串的index索引开始,
	//到字符串最后,截取成一个新的字符串,返回值类型String类型
	String s3 = "1234abcd";
	String ss = s3.substring(5);
	System.out.println(ss);//bcd
	
	// substring(int beginIndex , int endIndex):
	// 截取字符串的一部分,从beginIndex索引开始到endIndex索引结束
	// 包含开始索引,不包含结束索引
	// JDK的方法中,针对于两个索引值的操作,一般情况下都是包含开始索引,不包含结束索引
	System.out.println(s3.substring(1, 5));//234a

	//4. indexOf(String s): 获取s字符串在方法调用字符串中第一次出现的所以位置
	//,返回值类型int类型,没有指定s字符串,返回-1的索引值
	String s4 = "12234567ty"; 
	System.out.println(s4.indexOf("2"));//1
	System.out.println(s4.indexOf("9"));//-1
}

}

3.6 String类的转换功能和其他功能

  1. toCharArray() : 将一个字符串转换成一个字符数组,返回值类型字符数组类型
  2. toUpperCase(): 将字符串中的所有字符,转换成大写,返回值类型字符串类型
  3. toLowerCase(): 将字符串中的所有字符,转换成大写,返回值类型字符串类型
  4. trim(): 去除字符串前后的空格和制表符

代码
package com.zgjy.stringdemo;

import java.util.Arrays;

public class StringZHuanHuanMethod {

public static void main(String[] args) {
	// 1.toCharArray() : 将一个字符串转换成一个字符数组,
	// 返回值类型字符数组类型
	String s = "hello";
	char[] ch = s.toCharArray();
	System.out.println(Arrays.toString(ch));
	
	// 2. toUpperCase(): 将字符串中的所有字符,转换成大写,返回值类型字符串类型
	String s1 = "helloW一23";
	String ss = s1.toUpperCase();
	System.out.println(ss);
	
	// 3. toLowerCase(): 将字符串中的所有字符,转换成大写,返回值类型字符串类型
	System.out.println(s1.toLowerCase());

// 4. trim() : 去除字符串前后的空格和制表符
String s2 = " ";
String ss1 = s2.trim();
System.out.println(ss1.length());// 0

	String s3 = " 		34  5  ";
	String ss2 =s3.trim();
	System.out.println(ss2);
	System.out.println(ss2.length());// 5
}

}

快捷查看方法:

  1. 查看类或者方法的源代码,ctrl+点击类名或方法名

  2. 导入JDK源文件
    在这里插入图片描述

  3. 看一个类文件中的所有的成员大纲,outline中,可以查看,点击某一个成员,还会快速的定义到指定的成员位置

  4. alt + shift + s : 快捷键,生成eclipse自动生成代码列表,选择setter 和 getter,自动生成私有成员对应的set和get方法 ; 选择 toString ,自动生成toString方法重写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值