10)object

Eclipse中内容辅助键的使用

  • A:Alt+/ 起提示作用

  • B:main+alt+/,syso+alt+/,给出其他提示

  • C:补充输出语句,选中需要输出的部分,alt+/选择最后一项即可

  • C:定义自己的alt + /

    • windows–perference-Java-Editor-Templates–New
  • A:新建 ctrl + n

  • B:格式化 ctrl+shift+f

  • C:导入包 ctrl+shift+o

  • D:注释 ctrl+/,ctrl+shift+/,ctrl+shift+\

  • E:代码上下移动 选中代码alt+上/下箭头

  • F:查看源码 选中类名(F3或者Ctrl+鼠标点击)

  • G:查找具体的类 ctrl + shift + t

  • H:查找具体类的具体方法 ctrl + o

  • I:给建议 ctrl+1,根据右边生成左边的数据类型,生成方法

  • J:删除代码 ctrl + d

  • K:抽取方法alt + shift + m

  • L:改名alt + shift + r

Eclipse中如何提高开发效率

  • alt + shift + s
  • A:自动生成构造方法
  • B:自动生成get/set方法

Eclipse中如何生成jar包并导入到项目中

  • A:jar是什么?
    • jar是多个class文件的压缩包。
  • B:jar有什么用?
    • 用别人写好的东西
  • C:打jar包
    • 选中项目–右键–Export–Java–Jar–自己指定一个路径和一个名称–Finish
  • D:导入jar包
    • 复制到项目路径下并添加至构建路径。

Object类的概述

  • A:Object类概述
    • 类层次结构的根类
    • 所有类都直接或者间接的继承自该类
  • B:构造方法
    • public Object()
    • 子类的构造方法默认访问的是父类的无参构造方法
  • A:
    • public int hashCode()
    • a:返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。
    • b:不同对象的,hashCode()一般来说不会相同。但是,同一个对象的hashCode()值肯定相同。
  • A:
    • public final Class getClass()
    • a:返回此 Object 的运行时类。//对象字节码文件
    • b:可以通过Class类中的一个方法,获取对象的真实类的全名称。
      • public String getName()
  • A:
    • public String toString()
    • a:返回该对象的字符串表示。
	public Stirng toString() {
		return name + "," + age;
	}
* b:它的值等于: 
	* getClass().getName() + "@" + Integer.toHexString(hashCode()) 
* c:由于默认情况下的数据对我们来说没有意义,一般建议重写该方法。
  • B:最终版
    • 自动生成
      打印对象引用 默认调用toString()方法 方便显示 sout(s)

Object类的equals()方法

* a:指示其他某个对象是否与此对象“相等”。 
* b:默认情况下比较的是对象的引用是否相同。
* c:由于比较对象的引用没有意义,一般建议重写该方法。

==号和equals方法的区别

  • ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值
  • equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性
package objectEquals;

import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Objects;

class Employee
{
	private String name;
	private double salary;
	private Date  hireDay;
	

	public Employee(String name, double salary, int year,int month,int day) {
		this.name = name;
		this.salary = salary;
		GregorianCalendar calendar=new GregorianCalendar(year,month-1,day);
		//0代表一月
		hireDay=calendar.getTime();
	}

	public String getName() {
		return name;
	}

	public double getSalary() {
		return salary;
	}

	public Date getHireDay() {
		return (Date) hireDay.clone();
	}

	public void raiseSalary(double byPercent)
	{
		double raise=salary*byPercent/100;
		salary+=raise;
	}
	
	public boolean equals(Object otherObject)
	{
		if(this == otherObject) return true;
		
		if(this == null) return false;
		
		if(this.getClass() != otherObject.getClass()) return false;
		//不写this也行
		//现在可以确认otherObject指向一个不空的 Employee对象
		Employee other = (Employee) otherObject;
		
		//测试是否域值相同
		return     Objects.equals(name, other.name)
				&& salary==other.salary
				&& Objects.equals(hireDay, other.hireDay);
//		     Objects.equals(a,b) 如果两个参数为null 返回true
//		            一个null返回false   都不为null返回a.equals(b)
	}
	
	public int hashCode()
	{
		return Objects.hash(name,salary,hireDay);
	}
	
	public String toString()
	{
		return getClass().getName() + "[name=" + name + ",salary=" + salary + ",hireday=" + hireDay +"]";
	}
}

package objectEquals;

public class Manager extends Employee {
	
	private double bonus;

	public Manager(String name, double salary, int year, int month, int day) {
		super(name, salary, year, month, day);
		bonus = 0;
	}
	
	public double getSalary()
	{
		return super.getSalary()+bonus;
	}
	
	public void setBonus(double b)
	{
		bonus = b;
	}
	
	public boolean equals(Object otherObject)
	{
		if(!super.equals(otherObject)) return false;
		//先检测超类的域是否相等
		Manager other = (Manager) otherObject;
	    return bonus == other.bonus;	
	}
	
	public int hashCode()
	{
		return super.hashCode()+17* new Double(bonus).hashCode();
	}
	
	public String toString()
	{
		return super.toString()+"[bonus=" + bonus + "]";
	}
	
//	如果子类有自己相等概念 对称性需求 强制采用getClass检测
//	超类决定相等概念 用instanceof检测 
//	雇员经理
//	经理经理 getClass
}

package objectEquals;

public class EqualsTest {

	public static void main(String[] args) {
		Employee alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15);
		Employee alice2 = alice1;
		Employee alice3 = new Employee("Alice Adams", 75000, 1987, 12, 15);
		Employee bob = new Employee("Bob Brandson", 50000, 1989, 10, 1);
		
		System.out.println("alice1 == alice2: "+ (alice1 == alice2));
		
		System.out.println("alice1 == alice3: "+ (alice1 == alice3));
		
		System.out.println("alice1.equals(alice3):" + alice1.equals(alice3));
		
		System.out.println("alice1.equals(bob):" + alice1.equals(bob));
		
		System.out.println("bob.toString():" + bob);
//		        alice1 == alice2: true
//				alice1 == alice3: false
//				alice1.equals(alice3):true
//				alice1.equals(bob):false
//			bob.toString():objectEquals.Employee[name=Bob Brandson,salary=50000.0,hireday=Sun Oct 01 00:00:00 CST 1989]

		
		Manager carl = new Manager("Carl Craker",80000,1987,12,15);
		Manager boss = new Manager("Carl Craker",80000,1987,12,15);
		boss.setBonus(5000);
		System.out.println("boss.toString():"+boss);
		System.out.println("carl.equals(boss):" + carl.equals(boss));
		System.out.println("alice1.hashCode():"+alice1.hashCode());
		System.out.println("alice3.hashCode():"+alice3.hashCode());
		System.out.println("bob.hashCode():"+bob.hashCode());
		System.out.println("carl.hashCode():"+carl.hashCode());
		
//		boss.toString():objectEquals.Manager[name=Carl Craker,salary=80000.0,hireday=Tue Dec 15 00:00:00 CST 1987][bonus=5000.0]
//				carl.equals(boss):false
//				alice1.hashCode():-1252606650
//				alice3.hashCode():-1252606650
//				bob.hashCode():-223951770
//				carl.hashCode():1767051952

	}

}

参数可变的方法

package haha;

class  test
{
	public static void dealArray(int...intArray)
	{//可变参数类型必须作为参数列表的最后一项,而不能放在定长参数的前面。
		for (int i : intArray) {
			System.out.print(i+" ");
			
		}
		System.out.println();
	}
	public static void main(String[] args) 
	{
		//编译器转化参数为数组形参
			dealArray();//dealArray(int[] intArray{});
			dealArray(1);//dealArray(int[] intArray{1});  
			dealArray(1,2,3);//dealArray(int[] intArray{1, 2, 3}); 
			
			//可以是空参 可以不定
			//能匹配定长的方法,那么优先匹配该方法。含有不定参数的那个重载方法是最后被选中的。
			

枚举类

package haha;

import java.util.Scanner;

import java.util.*;

public class EnumTest {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Enter a size: (SMALL, MEDIUM, LARGE, EXTRA_LARGE) ");
        String input = in.next().toUpperCase();
        Size size = Enum.valueOf(Size.class, input);
        System.out.println("size=" + size);
        System.out.println("abbreviation=" + size.getAbbreviation());
        if (size == Size.EXTRA_LARGE)
            System.out.println("Good job--you paid attention to the _.");
    }
}

enum Size {
    SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");

    private Size(String abbreviation) {
        this.abbreviation = abbreviation;
    }

    public String getAbbreviation() {
        return abbreviation;
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值