java第十三天

toString()方法

  • toString()方法是在Object类里面的方法
  • public String toString() {

​ return “age=” + age + “, name=” + name + “”;

​ } 返回该对象的字符串表示。

例子:

public class Demo2_ToString {
    public static void main(String[] args) {
    Student stu = new Student("李青",22);
    String str = stu.toString();
    System.out.println(str);
	}
}

结果:

我的名字是李青年龄是22

  • 重写toString()方法(用上述例子继续举例):

(自己重写)

在Student类里面按Alt+Shift+S,点击Override,选择toString()方法

toString()方法原本形式:

public String toString() {

return super.toString();

}

重写后的形式:

public String toString() {

return “我的名字是” + name + “年龄是” + age;

}

结果:

我的名字是李青年龄是22

  • tostring()方法的作用:可以更方便的显示属性值
  • toString()方法与getXxx()的区别

toString()方法只是显示属性值

getXxx()方法可以显示,更多的是赋值,或对数据做其它操作

  • 直接打印对象的引用,会默认调用toString()方法
public class Demo2_ToString {
public static void main(String[] args) {
    Student stu = new Student("liyu",22);
    //String str = stu.toString();
    System.out.println(stu);
}

equals方法

equals()方法介绍:

JAVA当中所有的类都是继承于Object这个超类的,在Object类中定义了一个equals的方法

在object类中equals方法只能用来比较地址是否一样,equals的源码是这样写的:

public boolean equals(Object obj) { 
    return (this == obj);
}

String可以使用equals比较地址是因为它重写了equals方法

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())//反射
			//obj instanceof Student
			return false;
		Student other = (Student) 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;
	}

图例

在这里插入图片描述

内部类和匿名内部类

内部类使用
编译器如何处理内部类  Body.java--->body.class
              Body.Heat.java---->Body$Heart.class
1.内用外   随意访问
2.外部用内部  
普通类使用方式 类名称  对象名=new  类名称();
内部类   外部类名称.内部类名称  内部类对象=new  外部类名称().new  内部类名称();

3.内部类如果有同名

​ System.out.println(MyOuter.this.number);//外部类number
​ System.out.println(this.number);//内部类成员number
​ System.out.println(number);//局部变量number

访问修饰符总结 外部类  public  和 defualt
          内部类 public  protected  default  private
public static void main01(String[] args) {
	Body body=new Body();
	
	Body.Heart   heart=new Body().new Heart();
	heart.beat();
	
	MyOuter.MyInner  inner=new MyOuter().new MyInner();
	inner.func();
	
}

局部内部类  如果一个类定义在一个方法内部  这个类就是局部内部类
  局部内部类 只属于当前的方法,所以只有当前方法可以使用他 出了方法就没有了

局部内部类注意事项
1.如果局部内部类中的方法希望访问类 所在方法的局部变量   这个局部变量必须是有效final的
Java8以后   只要局部变量 是事实不变的  final可以省略

原因
1.new出来的对象 在堆上存储
2.局部变量是跟着方法走的,存在栈中  
3方法调用完成 局部变量就出栈了
4.new 出来的对象  会在堆中持续存在  直到垃圾回收 

所以 可能 number已经没有了  内部类对象还有   需要把number copy出来  copy出来到常量池


重要:匿名内部类  lambda表达式前提
如果、接口实现类或者父类的子类  只需要使用一次   而且是唯一的一次  
这种情况下 就可以省略实现类或子类的定义  改为使用匿名内部类   
语法:
接口名称/抽象类名称 对象名=new  接口名称/抽象类名称(){
重写接口和抽象类的抽象方法
}
调用   对象名.抽象方法 

注意事项
格式解析 
1.new 代表创建对象的动作
2.接口名称就是匿名内部类需要实现的接口

3{。。。。} 这才是匿名内部类的内容 

说明
1.匿名内部类 在创建对象的时候 只能使用一次 
2.匿名对象 在调用方法的时候 只能使用一次
3.匿名内部类 是省略了实现类或者子类  匿名对象是省略了对象名称

总结:引用(类 接口)类型作为成员变量 ,返回值和参数
public static void main(String[] args) {
	匿名对象和匿名类
	new MyClass(){
		@Override
		public void func() {
			System.out.println("哈哈哈,我只用一次");
			
		};
	}.func();
	匿名内部类  类匿名  没有这个类  类只用一次(创建对象 使用类)
	匿名对象      对象匿名  没有这个对象  做参数  做返回值   对象只需要用一次

与时间有关的API:

类Date 表示特定的瞬间,精确到毫秒
毫秒:千分之一秒 1000毫秒=1秒。

瞬间的定义:

2000-01-01 01-01-01:001 瞬间
2000-01-01 01-01-01:002 瞬间

作用:

可以对时间和日期进行计算。

Date

表示系统特定的时间戳,可以精确到毫秒。Date 对象表示时间的默认顺序是星期、月、日、小时、分、秒、年。

构造方法

Date 类有如下两个构造方法

  1. Date():初始化对象,获取本地的当前时间。
  2. Date(long date):输出:1970 年 1 月 1 日 00:00:00 GMT之后的long date毫秒的时间

实例

Date date1 = new Date();    // 调用无参数构造函数
System.out.println(date1.toString());    // 输出:当前时间
Date date2 = new Date(60000);    // 调用含有一个long类型参数的构造函数
System.out.println(date2);  //输出:1970 年 1 月 1 日 00:00:00 GMT之后的60000毫秒的时间

Date对象方法:

首先得先创建一个时间对象 new Date()

get系列:

getDate() 返回一个月中的某一天(1-31)

getDay()    返回一周中的某一天(0-6)

getFullYear()  返回四位数的年份

getMonth()   返回月份(0-11 0是一月)

getHours()   返回的是当前的小时(0-23)

getMinutes()  返回的是当前的分钟(0-59)

getSeconds()  返回的是当前的秒(0-59)

getTime()    返回的是1970年1月1日至今的毫秒数

set系列:

parse()    返回1970年1月1日到指定日期的毫秒数

setDate()   设置一月的某一天(1-31)

setFullYear()  设置年份

setMonth()   设置月份(0-11)

setHours()    设置小时(0-23)

setMinutes()   设置分钟(0-59)

setSeconds()  设置秒数(0-59)

setTime      以毫秒数设置Date

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值