标签:饿汉 工具类 -- 创建 自定义类 ret int java 思考
答:1).Object类是所有类的父类,位于java.lang包中。
2).数组也是Object类的子类。
3).Object类的常用方法有:
--- toString();
--- equals();
--- hashCode();
---.....
* 1.Object类中的equals方法
* public boolean equals(Object obj){
return (this == obj);
}
* 2.像String,Data这些类已经重写了equals方法,用来比较内容
* 3.往往我们在自定义类中都会重写equals方法,用来进行内容的比较。
如果不重写equals方法,那么就会默认调用Object类中的equals方法进行地址值的比较。+
1.== : 如果比较的是基本数据类型,那么比较的是具体的值
如果比较的是引用数据类型,那么比较的是地址值(两个引用是否只指向同一对象)
2.equals:如果不重写equals方法,那么默认调用Object类中的equals方法进行地址值比较。
如果重写了equals方法,那么就进行内容的比较。
// 重写equals方法进行属性内容的比较 @Override public boolean equals(Object obj) { if(this == obj) { // 说明两个对象是同一个 return true; } if(obj instanceof Person) { Person p = (Person)obj; // 向下转型 return this.name.equals(p.name) && this.age == p.age; } return false;
1.设计模式:设计模式是在大量的实践中总结和理论化之后优选的代码结构,编码风格,以及解决问题的思考方式
2.常见的有23中设计模式:单例设计模式,代理设计模式,装饰设计模式,观察者设计模式.....
3.单例设计模式:在一个项目中某个类中只有一个对象
4. 懒汉式和饿汉式的区别?
1.饿汉式:线程安全的 2.懒汉式:线程不安全的,但是延迟了对象创建的时机。
// 懒汉式: 线程不安全的,但是延迟了对象创建的时机,一定程度上减少了内存的开销 class Bank2{ // 私有化构造器 private Bank2() {}; private static Bank2 bank = null; public static Bank2 getSingleton() { if(bank == null) { bank = new Bank2(); } return bank; } } // 饿汉式: 线程安全的 class Bank{ // 私有化构造器 private Bank() {} // 类内部创建一个私有化对象 private static Bank bank = new Bank(); // 创建一个共有方法获取对象 public static Bank getSingleton() { return bank; } }
1.static修饰变量:类变量
1.同一个类的对象共同拥有一份类变量。每个对象各自拥有一份实例变量
当一个对象对类变量进行修改后,其它的对象看到的都是修改后的类变量
2.类变量是随着类的加载而加载的,而实例变量是随着对象的创建而创建
3.类加载只加载一次
4.如何调用类变量:类名.类变量名 对象名.类变量名
2.static修饰方法:静态方法
1.静态方法是随着类的加载而加载的。
2.调用静态方法:类名.静态方法名 对象名.静态方法名
3.静态方法中不能调用,实例变量和非静态方法,非静态方法中可以调用类变量和静态方法
4.静态方法中不能使用"this"和"super"
3.思考?什么时候使用static修饰属性和方法
static修饰属性:
1.当一个变量为常量时必须使用static修饰
2.当多个对象共同使用一份属性时使用static修饰。
static修饰方法:
1.工具类中的方法一般都是用static修饰
2.有时为了调用类变量,方法也会使用static修饰
类加载的过程
a.当我们创建对象时,首先会在方法区查找该类的信息
b.如果方法区没有该类的信息,这是便会进行类加载。如果方法区有该类的信息则直接创建对象
c.类加载:将字节码文件加载到JVM中,同时在方法区特定的区域用来存放类变量
d.类加载完成后,再来创建对象
f.再次创建对象时仍在方法区查找该类的信息。如果存在将不再进行类加载(类加载只加载一次)
在Object类中的定义为:
public native int hashCode();
是一个本地方法,返回的对象的地址值。
但是,同样的思路,在String等封装类中对此方法进行了重写。方法调用得到一个计算公式得到的 int值
答:toString方法可以将任何一个对象转换成字符串返回,返回值的生成算法为:getClass().getName() + ‘@’ + Integer. toHexString(hashCode())。
例1):打印对象时直接调用类的toString方法
public static void main(){
Student stu1 = new Student();
stu1.setName(“张三”);
stu1.setAge(23);
System.out.println(stu1);
System.out.println(stu1);
}
打印: Student@152b6651;
例2).类本身重写toString方法重写Student类的toString方法后
public static void main(){
Student stu1 = new Student();
stu1.setName(“张三”);
Stu1.setAge(23);
System.out.println(stu1);
}
打印:Student:name = 张三,age = 23;
例3).public class Student{
Private String name = “123”; //学生姓名
private int age; //年龄
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;
}
public String toString(){
Return “Student:” + “name=” + name + “,age=” + age;
}
}
标签:饿汉 工具类 -- 创建 自定义类 ret int java 思考
原文地址:https://www.cnblogs.com/jiujiang/p/11613848.html