Java基础记忆(类与对象01)

1.面向过程和面向对象概述

    面向过程特点:

    1.问题的复杂化,对事情进行一系列的操作与实施。

    2.过程的执行者,对所要达到的结果中的过程一步步完成。

    3.具有费时间,费精力。

    面向对象特点:

    1.将复杂问题简单化,符合人类思考的逻辑。

    2.从过程的执行者,转换成了对象的指挥者。

    3.具有省时间,省精力,将过程进行对象的封装,面向过程,有问题直接找对象即可。

2.对象和类

    对象:万事万物皆对象。

    比如:买电脑直接拜托行内人帮忙去电脑城购买;面试官对面试者提出问题;

    1.小张和小李是兄弟。

    2.你家的旺财咬人了。

    3.一辆坦克发射了三发炮弹打落十架飞机。

    类:具有相同属性和行为的对象的统称。

    1.小张、小李∈人类

    2.旺财∈狗

  •     人:属性:眼睛,耳朵。     类:飞机图纸       RMB模板

                  行为:走路。             对象:一个飞机       一张钞票

3.面向对象思想

    过程和对象在我们的程序中是如何体现的呢?

    过程其实就是函数。对象是将函数等一些内容进行了封装。

    //new 类名(); new 创建由类所描述的对象

    //Scanner scanner=new Scanner();

    范例:计算两个点的坐标距离

class Demo01{
    public static void main(String[] args){
        Cicle c1=new Cicle();    //创建一个c1的对象    Cicle是类名
        c1.radius=10;            //radius是c1的属性
        Point o1=new Point();    //创建一个o1的对象    point是类名
        o1.x=0;                  //x是o1的属性
        o1.y=0;                  //y是o1的属性
        c1.o=o1;                 //o是c1的属性  将o1这个对象的地址赋给o


        Cicle c2=new Cicle();    //创建一个c2的对象    Cicle是类名
        c2.radius=10;            //radius是c2的属性
        Point o2=new Point();    //创建一个o2的对象    point是类名
        o2.x=10;                 //x是o2的属性
        o2.y=10;                 //y是o2的属性
        c2.o=o2;                 //o是c2的属性  将o2这个对象的地址赋给o
        System.out.println(c1.getDistance(c2));//c1指向c2 打印距离
    }
}
class Point{
    double x;     //本体的属性x
    double y;     //本体的属性y
    public double getDistance(Point o2){
        return Math.sqrt(Math.pow(this.x-o2.x,2)+Math.pow(this.y-o2.y,2));
    }
}
class Cicle{
    double radius;           //本体的属性radius
    Point o;                 //本体的属性o
                             //this是这个类中的特指
    public double getArea(){ //获得面积
        return 3.14*Math.pow(this.radius,2);
    }
    public double getPerimeter(){//获得周长
        return 2*3.14*radius;
    }
    public double getDistance(Cicle c2){
        return this.o.getDistance(c2.o);//this.o指向c2.o
    }
}

    1.  javac 对Demo01.java进行编译的时候 产生3个字节码文件

            Demo02.class Circle.class Point.class
            没有主函数main的类(字节码),不能够独立运行(Circle.class Point.class)
            主类      Demo02 主要用于运行程序 作为程序的开始main
            实体类  Circle Point 主要用于描述事物 但不推荐写主函数

    2.java Demo02 意思将Demo02.class字节码文件加载进虚拟机开始运行

      Circle.class Point.class 虽然没有明显的写出加载 但是会随着Demo02加载而加载。

      这些字节码文件加载到JVM的方法区里边->JVM在方法区中找主函数-Demo01-main->将该段main代码加载进栈开始运行

4.成员变量和成员函数 

    在类中定义其实都称之为成员。成员有两种:
        1、成员变量:其实对应的就是事物的属性。
        2、成员函数:其实对应的就是事物的行为。
    因为类是对象的定义,对象从类创建。所以,其实定义类,就是在定义成员变量和成员函数。但是在定义前,必须先要对事物(对象)进行属性和行为的分析,才可以用代码来体现。
    成员变量和局部变量的区别:
        1、 源代码中定义的位置不同:
      成员变量定义在类中。
      局部变量定义在方法中,也可以定义在语句中。
        2、作用域不同:
      成员变量在这个类中有效。
      局部变量只在自己所属的大括号内有效,大括号结束,局部变量失去作用域。
       3、内存中的存储位置不同:
      成员变量存储在堆内存的对象中。
      局部变量存储在栈内存的方法中。
       4、生命周期不同:
      成员变量随着对象的出现而出现。
      局部变量随着所属区间的运行出现,随着所属区间的结束而释放。
    (局部变量随着方法的加载而出现,随着方法的消失而消失。)


5.权限修饰符private、set修改器、get访问器和this关键字

    private:属性前加了private修饰,只是访问权限降低,只可在本类被访问,但是创建对象后,相应的堆内存中,该属性还是真实存在的。
    私有的成员:其他类不能直接创建对象访问,所以只有通过本类对外提供具体的访问方式(函数)来完成对私有的访问。

    set修改器:间接修改

    get访问器:间接访问              因为加了private,直接修改和直接访问不可用了。

    this:1.代表的是对象。哪个对象调用this所在的函数,this就代表哪个对象,就是哪个对象的引用。

             2.this 还可以用于构造函数间的调用。

             3.this对象后面跟上 .       调用的是成员属性和成员方法(一般方法)。

             4.this(实际参数)      this对象后面跟上()          调用的是本类中的对应参数的构造函数。

    注意:用this调用构造函数,必须定义在构造函数的第一行!(因为构造函数是用于初始化的,所以初始化动作一定要先执行。 否则编译失败 )。一个构造函数里不可以使用两次this,即一个构造函数中不可以调用两个构造函数。

class Demo02{
    public static void main(String[] args){
        Person p1=new Person();            //创建p1对象       Person是类
        //p1.show();
        Person p2=new Person(10);
        p2.show();
        Person p3=new Person("旺财");
        p3.show();
        Person p4=new Person(10,"狗蛋");
        p4.show();
    }
}
class Person{
    private int age;
    private String name;
    Person(){
        this(0,null);//this(...) 调用当前类的其他构造函数 必须在第一句
        print();
    }
    Person(int age){
        this(age,null);
        System.out.println("1age参的");
    }
    Person(String name){
        this(0,name);
        System.out.println("1name参的");
    }
    Person(int age,String name){
        //this();
        System.out.println("2参的");
        this.age=age;
        this.name=name;
    }
    private void print(){
        System.out.println("无参的");
        System.out.println("无参的");
        System.out.println("无参的");
        System.out.println("无参的");
        System.out.println("无参的");
        System.out.println("无参的");
        System.out.println("无参的");
    } 
    public void show(){
        //如果局部变量没有重名 则默认用成员变量
        System.out.println(this.name+":"+this.age);
    }
    public void setAge(int age){
        //局部变量age 成员变量age
        if(age<0){
            this.age=0;
        }else{
            this.age=age;
        }
    }
    public int getAge(){
        return this.age;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值