1.Object是所有Java类的父类,Object类是java中唯一没有父类的类
2.如果在类的声明的时候没有显示的通过extends去继承谁,默认会继承Object类
3.Object类的作用就是提供一些公用的属性和方法
常用的方法
Person p = new Person();
// 通过反射动态获取当前类的父类
System.out.println(p.getClass().getSuperclass());
4 ==和equals的区别(面试题)
==:比较运算符
equals()
public boolean equals(Object obj){
return (this == obj);
}
5 toString() 方法
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
public class TestObject {
public static void main(String[] args) {
Person p = new Person();
// 比较基本数据类型 ==
int a = 10;
int b = 20;
double d = 10.0;
System.out.println(a==b);// false
System.out.println(a==d);// true
Person pp = new Person();
Person p1 = new Person();
Person p2=pp;
System.out.println(pp==p1);// false
System.out.println(pp==p2);// true
Person p3 = new Person("张三",18);
Person p4 = new Person("张三",18);
System.out.println(p3==p4);// false
System.out.println(p3.equals(p4));// false
String str = new String("张三");
String str1 = new String("张三");
System.out.println(str.equals(str1));// true
System.out.println("=======toString方法========");
Person p5 = new Person("李四",20);
System.out.println(p5.toString());// 地址值
String str2 = new String("张三");
System.out.println(str2.toString());
}
}
String字符串,使用""引起来
public class Demo1 {
@Test
public void test(){
String s1 = "abc";
String s2 = "abc";
s2="asc";
//System.out.println(s1==s2);// false
String s3 = "abc";
s3 += "ddd";
System.out.println(s3);
}
@Test
public void test1(){
// 第一种方式:通过字面量的方式创建字符串
String s1 = "javaEE";
String s2 = "javaEE";
// 第二种:通过构造方法创建字符串,在堆里面开辟了空间
String s3 = new String("javaEE");
String s4 = new String("javaEE");
System.out.println(s1==s2);// true
System.out.println(s1.equals(s2));// true
System.out.println(s1==s3);// false
System.out.println(s1==s4);// false
System.out.println(s3==s4);// false
System.out.println(s3.equals(s4));// true
Person p = new Person("张三",12);
Person p1 = new Person("张三",12);
System.out.println(p.getName().equals(p1.getName()));// true
System.out.println(p.getName()==p1.getName());// true
}
@Test
public void test2(){
String s1 = "Hello";
String s2 = "Java";
String s3 = "HelloJava";
String s4 = "Hello"+"Java";
String s5 = s1+"Java";
String s6 = "Hello"+s2;
String s7 = s1+s2;
System.out.println(s3==s4);// true 两个字面量连接
System.out.println(s3==s5);// false s5相当于new了
System.out.println(s3==s6);// false
System.out.println(s3==s7);// false
System.out.println(s5==s6);// false
System.out.println(s5==s7);// false
System.out.println(s6==s7);// false
}
}
}
字符串对象操作
1.public int length():返回字符串的长度
2.public char charAt(int index):返回指定索引位置的字符,字符串索引从0开始
3.public boolean equals(Object anObject):比较两个字符串的实体内容是否相等
4.public int indexOf(String s):返回字符串s在当前字符串中首次出现的位置,如果没有返回-1
5.public int indexOf(String s ,int startpoint):返回字符串s从startpoint开始首次出现的位置,如果没有返回-1
6.public int lastIndexOf(String s):返回字符串s在当前字符串中最后一次出现的位置,如果没有返回-1
7.public int lastIndexOf(String s ,int startpoint):返回字符串s从startpoint开始最后一次出现的位置,如果没有返回-1
8.public boolean startsWith(String prefix):判断是不是以字符串prefix开头
9.public boolean endsWith(String suffix):判断是不是以字符串suffix结尾
10.String toLowerCase() :将 String 中的所有字符转换为小写
11.String toUpperCase() :将 String 中的所有字符转换为大写
12.boolean isEmpty() :判断是否是空字符串
13.public boolean contains(String anotherString):判断当前字符串中是否包含字符串anotherString
字符串对象修改
1.public String substring(int startpoint):根据startpoint进行截取字符串,返回截取后的字符串
2.public String substring(int start,int end):根据坐标start开始截取,到end结束,包含start不包含end位置字符(包含头,不包含尾)
3.pubic String replace(char oldChar,char newChar):把字符oldChar替换成newChar
4.public String trim():去掉字符串左右的空格
5.public String concat(String str):拼接字符串
6.public String[] split(String regex):根据字符regex对当前字符串进行拆分,返回一个字符数组
StringBuffer类的常用方法
1.构造
StringBuffer()
StringBuffer(int size)
StringBuffer(String str)
2.添加
StringBuffer append(data);
StringBuffer insert(index data);
3.删除
StringBuffer delete(start,end):包含头,不含尾
StringBuffer deleteCharAt(int index):删除指定位置的元素
4.查找
char charAt(index);
int indexOf(string)
int lastIndexOf(string)
5.修改
StringBuffer replace(start,end,string);
void setCharAt(index,char);
StringBuffer、String 、StringBuilder三者区别(面试题)
(1) String:不可变序字符列,如果要修改字符串的值,不是在原有字符串值的基础上修改,而是重新分配一块内存区域
(2) StringBuffer:可变字符序列,在原有字符串的基础上进行修改,线程安全,效率低
(3) StringBuilder:可变字符序列,在原有字符串的基础上进行修改,线程不安全,效率高
(4)StringBuffer、String 、StringBuilder三者效率:StringBuilder > StringBuffer > String
1.封装类的原因:
针对八种基本定义相应的引用类型——封装类
基本数据类型 | 封装类 |
---|---|
boolean | Boolean |
byte | Byte |
short | Short |
int | Integer |
long | Long |
char | Character |
float | Float |
double | Double |
2.包装类
java提供了8种基本数据类型,每个基本数据类型对应一个包装类,使基本数据类型的变量可以有类的特征
作用:对基本数据类型、包装类、String进行类型转换
装箱和拆箱(可手动或自动)(面试题)
装箱:基本数据类型转成对应的包装类
拆箱:包装类转成对应的基本数据类型
public class WrapperTest {
// 基本数据类型->包装类:调用包装类的构造方法,手动转换
// 装箱:基本数据类型转成包装类
// 拆箱:包装类转成基本数据类型
@Test
public void test(){
int num1 = 10;
//System.out.println(num1.toString());有错,是基本数据类型,不是类,不能封装这些方法
Integer int1 = new Integer(num1);
System.out.println(int1.toString());
Integer int2 = new Integer("1212");// 前提字符串必须是数字
System.out.println(int2);
boolean a = true;
Boolean b= new Boolean(a);
System.out.println(b);
// boolean有点特殊,只有值为true才是true,别的默认都是false
Boolean b1 = new Boolean("qwd");
System.out.println(b1);// false
// 手动拆箱:包装类转成基本数据类型,通过调用包装类xxxValue()方法
Integer i2 = new Integer(12);
int num2 = i2.intValue();
}
/**
* jdk5.0 新特性:自动装箱和自动拆箱
*/
@Test
public void test1(){
int num1 = 10;
// 基本数据类型转成包装类 --自动装箱
Integer i1 = num1;
// 包装类转成基本数据类型
Integer i2 = 30;
int num2 = i2;// 自动拆箱
}
// 基本数据类型、包装类->String之间的类型转换
@Test
public void test2(){
// 把整数转成String类型
int num = 10;
// 方式1
String str = num+"";
// 方式2 :转成谁就去谁里面找方法,转成String就去String里面找方法
// 调用String的valueOf()方法
int num1 = 20;
String str1 = String.valueOf(num1);
}
// String类型->包装类、基本数据类型的转换:调用包装类parseXxx(String s)方法
@Test
public void test3(){
String str = "123";// 必须是数字
// 把String转成Integer,Integer自动拆箱转成int
int num = Integer.parseInt(str);
double d = Double.parseDouble(str);
}
}
1.Date类可以获取当前系统时间,通过调用Date类的无参构造方法创建的对象可以获取本地当前的时间
2.SimpleDateFormat可用来实现日期的格式化
3.parse():可以把一个时间类型的字符串转成一个date对象
public class DateTest {
@Test
public void test(){
// 获取当前系统时间,java.sql用于映射和数据库相关的时间段,如果和数据库无关,用Java.util
Date date = new Date();
System.out.println(date);
// 用SimpleDateFormat实现日期的格式化
// format:根据定义的时间格式把日期对象转成一个字符串
SimpleDateFormat sdf = new SimpleDateFormat();// 自带的格式
String date1 = sdf.format(date);
System.out.println(date1);
// 可以自定义时间格式
// yyyy-MM-dd HH:mm:ss 年-月-日 时:分:秒
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date2 = sdf1.format(date);
System.out.println(date2);
// 把日期字符串转成date
// parse():可以把一个时间类型的字符串转成一个date对象
try {
// 因为不知道输入的字符串是否是时间格式的,所以要加异常处理
Date date4 = sdf1.parse("2021-02-06 15:34:00");
System.out.println(date4);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
Calender是一个抽象基类,主要用于完成日期字段之间相互操作的功能
1.获取Calendar实例的方法
2 常用方法
一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来获得想要的时间信息
set(int field,int amount):设置系统的时间
add():在原有天数的基础上增加或减少
public class TestCalendar {
@Test
public void test(){
Calendar calendar = Calendar.getInstance();// 创建了一个日历对象
// get()方法
// 获取年
int year = calendar.get(Calendar.YEAR);
// 获取月 返回的是 0-11 月
int month = calendar.get(Calendar.MARCH) + 1;
// 获取日
int day = calendar.get(Calendar.DAY_OF_MONTH);// 获取这个月的第几天
// 获取时
int hour = calendar.get(Calendar.HOUR_OF_DAY);
// 获取分
int minute = calendar.get(Calendar.MINUTE);
// 获取秒
int se = calendar.get(Calendar.SECOND);
// 获取星期
System.out.println(year+"-"+month+"-"+day+" "+hour+":"+minute+":"+se);
// set():设置
System.out.println(Calendar.DAY_OF_MONTH);// 本月的第几天
// 获取本月的天数,把本月的天数改成8
calendar.set(Calendar.DAY_OF_MONTH,8);
int day1 = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day1);
// add():在原有天数的基础上增加或减少
calendar.add(Calendar.DAY_OF_MONTH,2);
day1 = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day1);
}
}
1.LocalDate:日期类
2.LocalTime:时间类
3.LocalDateTime:日期和时间类(常用)
4.now()获取当前日期,时间信息
5.getxxx():获取相关的属性
6.DateTimeFormatter(针对于LocalDate类):日期格式化,相当于SimpleDateFormat(针对于Date类)
public class LocalDateTest {
@Test
public void test(){
// now()获取当前日期,时间,日期+时间
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);
System.out.println(localTime);
System.out.println(localDateTime);
// getxxx():获取相关的属性
System.out.println(localDateTime.getDayOfMonth());// 获取当月的第几天
System.out.println(localDateTime.getDayOfWeek());// 获取周几
System.out.println(localDateTime.getMonth());// 获取月份
System.out.println(localDateTime.getMonthValue());
System.out.println(localDateTime.getMinute());
// DateTimeFormatter(针对于LocalDate类)日期格式化,相当于SimpleDateFormat(针对于Date类)
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 格式化
String str = dateTimeFormatter.format(localDateTime);
System.out.println(str);
// 把一个时间类型的字符串转成时间格式,了解
TemporalAccessor accessor = dateTimeFormatter.parse("2021-02-06 16:15:38");
System.out.println(accessor);
}
}