标签:ati ide rom int OLE 为什么 can aries 无法
Object类是所有Java类的根父类;如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。子类重写 finalize 方法,以配置系统资源或执行其他清除。
public class FinalizeTest {
public static void main(String[] args) {
Person p = new Person("Peter", 12);
System.out.println(p);
p = null;//此时对象实体就是垃圾对象,等待被回收。但时间不确定。
System.gc();//强制性释放空间; 在此之前, 控制台打印 "对象被释放→..."
}
}
class Person{
...
//子类重写此方法,可在释放对象前进行某些操作
@Override
protected void finalize() throws Throwable {
System.out.println("对象被释放→" + this);
}
...
垃圾回收机制关键点:
// review ‘==‘
// 基本类型:比较两个变量保存的数值是否一致
int i = 10;
int j = 10;
int d = 10;
System.out.println(i == j); // true
System.out.println(i == d); // (自动类型提升) true
boolean b = true;
// System.out.println(i == b); Error!
System.out.println(b == false); // false
char c1 = 10;
System.out.println(i == c1); // true
char c2 = ‘A‘;
char c3 = 65;
System.out.println(c2 == c3); // true
// 引用类型:比较这两个引用是否指向同一个对象实体
Sth s1 = new Sth();
Sth s2 = new Sth();
System.out.println(s1 == s2); // false
// 特别地, 字符串常量池
String str1 = "abc";
String str2 = "abc";
System.out.println(str1 == str2); // true
public boolean equals(Object obj) {
return (this == obj);
}
class Sth {
private String attr;
private int num;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((attr == null) ? 0 : attr.hashCode());
result = prime * result + num;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Sth other = (Sth) obj;
if (attr == null) {
if (other.attr != null)
return false;
} else if (!attr.equals(other.attr))
return false;
if (num != other.num)
return false;
return true;
}
}
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
System.out.println(obj);
实际上就会调用 obj 的 toString 方法// PrintStream
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
// String
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
public class ArrayTest {
@Test
public void test() {
int[] arr = {1,2,3};
print(arr); // [I@1698c449
System.out.println(arr.getClass()); // class [I → [: 一维, I: int
System.out.println(arr.getClass().getSuperclass()); // class java.lang.Object
}
public void print(Object obj) {
System.out.println(obj);
}
}
import org.junit.Test;
@Test
针对 8 种基本数据类型定义相应的引用类型 —— 包装类(封装类)。让它们具有类的特征,调用类中的方法,Java才能真正的面向对象
Integer i1 = new Integer(10); // 10
Integer i2 = new Integer("123"); // 123
Float f1 = new Float(12.34); // 12.34
Float f2 = new Float(1.234f); // 1.234
Float f3 = new Float("3.14"); // 3.14
Float f4 = new Float("3.14abc"); // NumberFormatException!
Boolean b1 = new Boolean(true); // true
Boolean b2 = new Boolean("true"); // true
Boolean b3 = new Boolean("true1234"); // false, 为什么没报错?
public Boolean(String s) {
this(parseBoolean(s));
}
public static boolean parseBoolean(String s) {
return ((s != null) && s.equalsIgnoreCase("true"));
}
int a = i1.intValue();
boolean flag = b1.booleanValue();
Object obj = new Float(11.01);
float f = (Float) obj;
Float f1 = 1.23f;
Float f2 = 12.345; // Type mismatch: cannot convert from double to Float
Boolean b1 = true;
Double d1 = 1.2;
Double d2 = 12; // Type mismatch: cannot convert from int to Double
f = (float) obj; // 强制类型转换 + 自动拆箱
float f3 = d1; // Type mismatch: cannot convert from Double to float
double d3 = f2;
[包装类] public static [WrapperClass] parseXxx("....")
[String] public static String valueOf(...)
Object o1 = true ? new Integer(1) : new Double(2.0);
System.out.println(o1); // 1.0 [基础语法3-2.7 三元运算符]
// ---------------------------------------------------
Object o2;
if (true)
o2 = new Integer(1);
else
o2 = new Double(2.0);
System.out.println(o2); // 1
Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println(i == j); // false
Integer m = 1; // 直接从IntegerCache中拿的
Integer n = 1; // 拿的同一个
System.out.println(m == n); // true
Integer x = 128; // 创建新对象
Integer y = 128; // 创建新对象
System.out.println(x == y); // false
标签:ati ide rom int OLE 为什么 can aries 无法
原文地址:https://www.cnblogs.com/liujiaqi1101/p/13113471.html