类和对象

java是面向对象的编程语言。
类:模板
对象:事物的抽象化实体
面向对象有以下三个基本特征:封装 继承 多态
对象的初始化:
(1)为对象开辟空间
(2)调用合适的构造函数。
对象的初始方式:
(1)提供一系列的get set方法
(2)通过合适的构造函数进行初始化。
(3)静态块初始化 。
(4)实例快初始化。

class Person {
    private int age;//数据
    private String name ;
    private String sex ;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public void sleep() {//行为   方法  函数
        System.out.println("Person.sleep()");
    }
    public void eat() {
        System.out.println("Person.eat()");
    }

    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }

    public static void main(String[] args){
        Person person=new Person();//实例化出来一个对象
        person.setAge(10);
        person.setName("caocao");
        person.setSex("nan");
        System.out.println(person.getName());
        System.out.println(person.getSex());
        System.out.println(person.getAge());
    }
}

静态块初始化:由stati修饰的方法/数据成员不依赖于对象

class Person {
    private static int age;//数据
    private  static String name ;
    private static String sex ;
static {
    age = 10;
    name = "哈佛";
    sex = "women";
}
static {//static所修饰的方法或者数据成员不依赖于对象
        count = 10;

@Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }

    public static void main(String[] args){
        Person person=new Person();//实例化出来一个对象
        System.out.println(person);
    }
}

实例块初始化:

class Person {
    private  int age;//数据
    private   String name ;
    private  String sex ;
    {
        this.sex = "women";
        this.name = "hafu";
        this.age = 10;
    }

    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }

    public static void main(String[] args){
        Person person=new Person();//实例化出来一个对象
        System.out.println(person);
    }
}

不带参数的构造函数:

class Person {
    private  int age;//数据
    private   String name ;
    private  String sex ;

   public Person(){//不带参数的构造函数
        this.sex = "women";
        this.name = "hafu";
        this.age = 10;
    }
   @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }

    public static void main(String[] args){
        Person person=new Person();//实例化出来一个对象
System.out.println(person);
    }
}

带参数的构造函数:

class Person {
    private  int age;//数据
    private   String name ;
    private  String sex ;

   public Person() {

       this("songjiang", "man", 10);
   }
    public Person(String name,String sex,int age){
        System.out.println("Person(name,sex,age)");
   this.age = age;
   this.name = name;
   this.sex = sex;

}
    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }

    public static void main(String[] args){
        Person person=new Person();//实例化出来一个对象
        System.out.println(person);
    }
}

匿名内部类:

class  OuterClass3 {
}
    public class lj {
    public static void main(String[] args) {
         //第一种
         new OuterClass3() {
             public void sayHello() {
                 System.out.println("main : hello");
             }
         }.sayHello();

     }
 }
// 第二种:
class  OuterClass3 {
public void sayHello() {
        System.out.println("hello");
        }
        }
public class lj {

    public static void test(OuterClass3 out3) {
        out3.sayHello();
    }
    public static void main(String[] args) {
        test(new OuterClass3());
    }
}

静态内部类:

class OuterClass {
    public int data = 10;

    static class InnerClass {
        public int data;
        OuterClass out;

        public InnerClass(OuterClass out) {
            this.out = out;
        }

        public void test2() {
            System.out.println(data);
            System.out.println(out.data);//静态类访问外部非静态类的数据成员
        }
    }
}
    public class lj{
        public static void main(String[] args) {
            OuterClass outerClass = new OuterClass();
            OuterClass.InnerClass innerClass = new OuterClass.InnerClass(outerClass);
            innerClass.test2();
        }
    }

上述的data是外部类的非静态数据成员,当静态内部类要访问时,它不能直接去访问,但可以通过new外部类的数据成员去访问,如代码中的out对象去访问外部类的data。
静态内部类不拥有外部类的对象。
原因:静态内部类和方法只属于类本身,不属于该类的对象
外部类名.内部类名 内部类对象 = new 外部类名.内部类名(外部类对象)
实例内部类:

class OuterClass1 {
    public int data1;
    private int data2;
    private static int data3;
    {
        data1 = 111;
        data2 = 222;
        data3 = 333;
    }
    class InnerClass1 { //内部类
        private int data4 = 100;
        public int data5 = 10;
        //private static  int DATA4 = 1000;error
        private static final int DATA4 = 1000;//实例内部类当中是可以有静态数据成员 ,只能是在编译期间确定的值。final所修饰
        public void test2() {
            System.out.println(data1);//111
            System.out.println(data2);//222    OuterClass1.this.
            System.out.println(this.data4);//100
            System.out.println(OuterClass1.this.data3);//333  实例内部类有外部类的对象 OuterClass1.this.
        }
    }

    public static void main(String[] args) {
        OuterClass1 outerClass1 = new OuterClass1();
        //外部类名.内部类名    对象 =  外部类对象.new 内部类();
        OuterClass1.InnerClass1 innerClass1 = outerClass1.new InnerClass1();
        innerClass1.test2();
    }
}

(1)实力内部类是否有额外开销?
有额外开销,通过外部类的对象去访问内部类
(2) 实例内部类当中是否可以有静态数据成员???
可以有,但是:只能是在编译期间确定的值。final所修饰
(3)实例内部类是否拥有外部类对象????
拥有 this 可以通过外部类对象访问内部类数据成员,所以拥有外部类对象
实例内部类对象语法:

外部类名.内部类名 内部类对象 = 外部类对象.new 内部类();
类创建栈:

class Stack {
    private int top;//栈顶指针
    private int[] elem;
    private int usedSize;

    /*public Stack() {
        this.top = 0;
        this.elem = new int[10];
    }*/
    public Stack() {
        this(10);
    }
    public Stack(int size) {
        this.elem = new int[size];
    }
    //行为==》方法
    public boolean isFull() {
        if(this.top == this.elem.length) {
            return true;
        }
        return false;
    }

    public void push(int val) {
        if(isFull()) {
            return;
        }
        this.elem[top++] = val;
        this.usedSize++;
    }

    public boolean isEmpty() {
        return this.top == 0;
    }

    public void pop() {
        if(isEmpty()) {
            return;
        }
        this.top--;
        this.usedSize--;
    }

    public void show() {
        for (int i = 0; i < this.top; i++) {
            System.out.print(this.elem[i]+" ");
        }
        System.out.println(this.usedSize);
        //System.out.println(Arrays.toString(this.elem));
    }
}

public class TestDemoStack {
    public static void main(String[] args) {
        Stack stack = new Stack();
        stack.push(10);
        stack.push(20);
        stack.push(30);
        stack.show();
        stack.pop();
        stack.show();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值