万类之祖——Object类
如果一个类没有继承父类,那它就是继承Object类:
package com.gao;
public class Test_0 {
public static void main(String[] args) {
Test test = new Test();
System.out.println(test);
}
}
class Test extends Object{
public Test() {
super();
}
@Override
public int hashCode() {
return super.hashCode();
}
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return super.toString();
}
@Override
protected void finalize() throws Throwable {
super.finalize();
}
}
内部类
一个类的内部可以嵌套另一个类
package com.gao;
public class Test_0 {
public static void main(String[] args) {
Outer test = new Outer("mimi");
}
}
class Outer{
public Outer(String name){
Inner person = new Inner(name);
}
class Inner{
String name;
public Inner(String name){
this.name = name;
System.out.println(this.name);
}
}
}
- 内部类可以直接访问外部类的属性,但反过来不行;
- 内部类前用“static”关键字修饰,那么这个内部类只能访问外部带有“static”的属性
内部类的调用
先生成外部类的对象,再用外部类的对象生成内部类的对象,如下面所写:
public class Test_0 {
public static void main(String[] args) {
Outer outer = new Outer("mimi");
Outer.Inner inner = outer.new Inner("timi");
}
}
内部类除了声明在类的内部之外,还可以声明于方法;
package com.gao;
public class Test_0 {
public static void main(String[] args) {
Outer outer = new Outer("nina");
}
}
class Outer{
public Outer(String name){
class Inner{
String name;
public Inner(String name){
this.name = name;
System.out.println(this.name);
}
}
Inner inner = new Inner(name);
}
}
匿名类与匿名对象
可以减少计算机资源的使用;
package com.gao;
public class Test_1 {
public static void main(String[] args) {
B b = new B();
//匿名对象,一般只用一次,作应急使用
new B().get(new A());
}
}
class A{
void talk(){
System.out.println("hello world!!");
}
}
class B{
public B(){
//匿名类
get(new A());
}
void get(A a){
a.talk();
}
}
数组的传入与传出
Java的数组传入与传出很简单;
package com.gao;
public class Test_3 {
public static void main(String[] args) {
//s_1分配到地址空间
Student s_1 = new Student();
//s_2没有分配到地址,没有任何意义
Student s_2 = null;
//在s_1的地址存储数据
s_1.age =23;
s_1.name = "mili";
System.out.println(s_1.age);
//将s_1的地址赋给s_2,让他们指向同一个地址
s_2 = s_1;
System.out.println(s_2.name);
//取消s_1指向的地址,现在只有s_2指向那个地址
s_1 =null;
}
}
class Student{
String name;
int age;
}
接口可以通过子类实现实例化。
this关键字
this大多用于表示当前对象;
static关键字
static用来声明静态变量,方法(相当于所有对象共享)的
package com.gao;
public class Test_4 {
public static void main(String[] args) {
People_0 people0 = new People_0();
People_0 people01 = new People_0();
people0.sex = "123";
people01.sex = "asda";
System.out.println(people0.sex);
}
}
class People_0{
String name;
static String sex;
}
静态代码块
//类用于创建对象时,静态代码块运行且仅运行一次
static
{
代码;
}
实例:
package com.gao;
public class Test_4 {
public static void main(String[] args) {
new People_0();
}
}
class People_0{
static {
System.out.println("People_0类别生成实例!!");
}
String name;
static String sex;
}
注意:静态代码块可以用于初始化静态方法
final关键字
- final标记的类无法被继承;
- final标记的方法无法被子类覆写;
- final标记的变量只能复制一次,即常量;
instanceof关键字
用于判断一个对象是否属于(extends)一个类或实现(implements)了一个接口
对象 instanceof 类或接口
测试:使用匿名对象,输出对象实例:
package com.gao;
public class Test_5 {
public static void main(String[] args) {
new Man();
}
}
class Man{
String name = "小李";
String sex = "男";
int age= 24;
public Man(){
System.out.println("名字:"+this.name);
System.out.println("性别:"+this.sex);
System.out.println("年龄:"+this.age);
}
}