Java-对象和类、内存分析、构造方法、重载、变量

对象和类

-对象和类的关系:特殊到一般,具体到抽象。
-类:我们叨做class。
-对象:我们叫做Object, instance(实例)。以后我们说某个类的对象,某个类的实例。是一样的意思。
-类可以看成一类对象的模板,对象可以看成该类的一个具体实例。
-类是用于描述同一类形的对象的一个抽象的概念,类中定义了这一类对象所应具有的静态和动态属性。
-对象是Java程序的核心,在Java程序中“万事万物皆对象”。
-JDK提供了很多类供编程人员使用,编程人员也可定义自己的类。

/*
* 所有类定义的时候可以添加属性和方法,但是不是必须要写的
*   一个java文件中可以定义N多个class,但是只能有一个public class并且public class的类名跟文件名保持一致
* 属性:
*   语法:
*   [访问修饰符]    数据类型      属性名称  =  值;
*
*   注意:
*       定义属性的时候可以有值也可以没有值
*       必须要包含类型和名称
*
*
* 方法:表示行为
*   语法:
*       [访问修饰符]  返回值类型(任何类型)  方法名称(形参列表){
*               逻辑代码
*
*       }
*   注意:
*       1、方法的访问修饰符可以不写
*       2、方法可以有返回值,也可以没有,void表示没有返回值的意思
*       3、形参列表可以有,也可以没有
*       4、java中方法的传参都是值传递(后续会讲)
*
* 对象的创建和使用
*       1、使用new关键字来创建对象
*       ClassName objectName = new ClassName();
*       2、对象的使用
*           使用对象的时候可以通过 对象名称.属性 或者 对象名称.方法 来使用属性和方法
* 
* 
* 计算两点间的距离
* 1.可以设置两个坐标的方法
* 2.设置计算点距离的方法
*
* 交换两点的值
* 1.定义第三个数据
* 2.用加减法
* */

public class Point {
    int x;
    int y;

/*  自己写的,计算点距离的方法未写出来
    public Point(int x,int y){
        this.x = x;
        this.y = y;
    }

    public double caledistance(){
        return Math.sqrt();
    }

    public static void main(String[] args) {
        Point p1 = new Point(2,2);
        Point p2 = new Point(3,3);
        System.out.println("距离为:"+Math.sqrt((p2.x-p1.x)*(p2.x-p1.x+(p2.y-p1.y)*(p2.y-p1.y))));
    }
*/

    public void set(int x,int y){
        this.x = x;
        this.y = y;
    }

    //重点
    public double calcDistance(Point p){
        return Math.sqrt((p.x-x)*(p.x-x+(p.y-y)*(p.y-y)));
    }

    //交换两个坐标点的值
    public void change(Point p){
        int xx = p.x;
        p.x = x;
        x = xx;
        int yy = p.y;
        p.y = y;
        y = yy;
    }

    public void show() {
        System.out.println("["+x+","+y+"]");
    }

    public static void main(String[] args){
        Point p1 = new Point();
        p1.set(2,2);
        Point p2 = new Point();
        p2.set(3,3);
        System.out.println(p2.calcDistance(p1));

        p1.change(p2);
        p1.show();
        p2.show();
    }
}

内存分析

栈:
– 存放:局部变量
– 先进后出,自下而上存储
– 方法执行完毕,自动释放空间
堆:
– 存放new出来的对象
– 需要垃圾回收器来回收:System.gc()
方法区:
– 存放:类的信息(代码)、 static变量、字符串常量等

构造方法、重载

* 构造方法:
*   创建对象的时候默认会调用构造方法来创建对象,(在堆中开辟空间),可以完成成员变量的某些初始化操作
*   构造方法的语法:
*       方法名称:构造方法的方法名称必须跟类的名称保持一致
*       访问修饰符
*       形参:可以用户自定义添加,跟方法的普通参数一样
*       方法体:完成对象的初始化功能
*       返回值:没有返回值
*   注意:
*       1、创建完类之后,如果没有手动调用构造方法,会有一个默认的无参的构造方法供调用
*       2、当用户自定义了构造方法之后,默认的无参构造方法就不能够使用了,必须要手动定义无参构造方法
*       3、同一个类中可以包含多个同名的构造方法
* 
* *   重载:在一个类中可以包含多个重名的方法,但是注意方法的参数列表不能相同
*       三个方面的不同:
*           参数的个数不同
*           参数的类型不同
*           参数的顺序不同
*       注意:
*           一般构造方法都会进行重载(一个类中可能包含多个属性值,当只需要给部分属性初始化的时候需要调用不同的构造方法)
public class Teacher {

    String name;
    int age;

    public void teach(){
        System.out.println("上课");
    }

    public Teacher(){
        System.out.println("无参");
    }

    /*   //错误示范
       public Teacher(String name,int age) {
           System.out.println("有参");
           name = name;   //错误原因:局部变量是从方法类开始到结束,这里的name会当成局部变量
           age = age;     //当做局部变量的原因:就近原则
       }
     */

    //构造方法传递数据方法一
    public Teacher(String name1,int age1) {
        System.out.println("有参");
        name = name1;
        age = age1;
    }

  /*  //构造方法传递数据方法二
    public Teacher(String name,int age){
        System.out.println("有参");
        //没有下面两句话会缺少处理逻辑 name和age的值并未改变
        this.name = name;
        this.age = age;
    }*/

    public static void main(String[] args){
        Teacher teach1 = new Teacher();
        teach1.name = "哈哈";
        teach1.age = 20;
        System.out.println(teach1.age+"\t"+teach1.name);

        Teacher teach2 = new Teacher("hy",18);
        System.out.println(teach2.age+"\t"+teach2.name);

    }
}

变量

* 变量:
*   局部变量:
*       定义在方法中的变量称之为局部变量
*           作用域:从定义的位置开始到整个方法结束
*           局部变量不包含默认值,如果没有使用当前变量的话,可以不赋值
*           注意:局部变量只能在当前方法中使用,其他地方无法使用
*   成员变量:
*       定义在方法外,类内的变量叫做成员变量(全局变量)
*       成员变量包含初始值:int 0 、String null 、boolean false
*           作用域:整个类体内

public class VarDemo {
    int age = 20;

   public void test(){
       System.out.println(age);
       age = 10;
       System.out.println(age);
       int age = 30;
       System.out.println(age);
   }
    public void show(){
        //局部变量
        int a ;
        String name = "zhangsan";
        System.out.println(age);
//        System.out.println(a);
    }


    public static void main(String[] args) {
       VarDemo vd = new VarDemo();
        System.out.println(vd.age);
        vd.test();
        System.out.println(vd.age);


    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值