zoukankan      html  css  js  c++  java
  • Java-------->>类与对象

    (一)重要知识点

    内存分析:

    内存分析:运行原理:首先将.class将代码加载到code segment,然后解析code,此时会牵扯到其他三块的内存区域
    code segment:
    data segment:静态static变量,字符串常量
    stack:局部变量
    heap:new出来的对象
    引用(即对象)和new出来的存储可能不同,引用(局部变量)在栈中,new出的存在堆中

    案例:

    内存分析:
    从main方法开始:
    关键点基本类型是值传递,而引用类型是地址传递
    方法结束,如果是void传递结束,形参在栈的存储空间消失
    如构造方法:public Date(int year,int month,int day){
    this.year=year;
    this.day=day;
    this.month=month;
    }
    main{ Date date=new Date(1111,11,11);}
    内存变化:
    date为引用变量存在栈中并同时在堆中申请一块内存有new的东西(属性等),调用Date的构造方法,形参year,month,day为局部变量存在栈中,然后将1111,这些值赋给形参,并形参
    的值给堆中的实参,方法结束,这些形参在栈内存中消失。mian结束,对象消失,栈中date引用对象和new 出实参值消失

    Static用法:

    1,static 作用于方法时:该方法属于类方法,无需本类的对象即可调用此方法(可以直接通过类来调用),局限性:只能调用static 方法和数据,且不能以任何方式引用this和super关键字。

    2,static作用于变量:相当于全局变量,static以最后一个调用为准(可统计方法被执行的次数),static{}这类静态块优先执行,不论顺序,静态变量只会需要要初始化一次,即未其分配好了内存,而如果普通的全局变量每调用该类,都会被执行一次。

    3,static作用于类时:即内部静态类,可以直接做为普通类来new 出来   详细见这里

    变量对比分析:

    static(类)变量和全局(实例)变量,局部变量:
    1,类变量被多个对象共享,生命周期跟类一样,存储在共享方法区中,类加载的时候产生
    2,全局(实例)变量,是单个对象变量,不共享,生命周期跟类一样,存储在堆内存中,对象实例时出现,通过访问控制符来设置子类访问权限。
    3,局部变量没有默认值,所以局部变量被声明后,必须经过初始化(不一定),才可以使用。存储在栈中,和方法共生命

    This用法:

    1,调用本类中的属性;2,调用本类中的其他方法(静态方法不能)3,返回对象的值(如:return this)

    参数的传递

    传递方式:值传递(实参传入给形参),而非对象传递,在传递的参数区分好是基本类型(传值)还是引用类型(形参为地址值)

    传递多个同类型的参数 如test(int i ,String ...books)

    Super方法:调用父类的方法,如super.成员变量,super(方法参数)

    Final关键字:

    1,final修饰基本类型和引用类型区别:基本类型:值不变,引用类型:引用地址不变,对象内容可以改变。

    2,final修饰的方法不能被重写

    3,final修饰的类不能有子类

    方法的重载:方法名相同和参数列表不同,与返回类型等无关

    方法的重写:两同两小一大

    1,方法名相同,参数列表相同

    2,方法返回类型小于或等于父类,子类抛出的异常小于等于父类

    3,方法访问权限大于等于父类

    变量说明:

        

    访问权限:

     包的分类:

        

    ==与equal一些易忘点:

        1,对于基本类型变量,只要两个变量都是数值类型且值相等,则==成立如(3==3.0F)true;和(65=='A’)true,对于对象,要求引用类型指向同一个对象,则返回True

        2,字符串常量池,如String a="23";String b="2",String c="3";String d=b+c; a==d false;a=b+"3" false;//因为在编译时无法确定(在赋值时不能直接识别类型。)

    抽象类和抽象方法的特点:

    1,抽象类和抽象方法必须用Abstract修饰,且抽象方法没方法体,如public abstract String test();即可无括号

    2,抽象类无法被实例化(即new)

    3,抽象类中可以包含成员变量,方法体(抽象方法和普通方法),构造器,初始化块,内部类(接口,枚举)

    4,含有抽象方法的类只能定义为抽象类

    接口:

    1,抽象类中可以包含成员变量,方法体(抽象方法和默认方法(default),类方法(static)(Java8允许的)),内部类(public static修饰)

    2,成员变量默认public static final ;方法默认是public abstract

    3,接口支持多继承,

    内部类:

    1,内部类有(private,protected,static)三个权限访问,内部能访问外部变量,而外部不能直接访问内部成员(可以借用对象)。

    2,非静态内部类不能含有静态变量,方法,初始块

    3,静态内部类:静态类不能访问实例成员(即非静态)

    4,局部内部类:声明在方法中,不能设置static和访问权限,

    5,匿名类:1,不能为抽象类;2,不能定义构造方法(匿名类没有类名);

    枚举类与普通类区别:

     垃圾回收机制:

        

    其中堆内存对象的三种状态转换:

    Jar文件常用命令:

    1,创建jar:jar cvf hello.jar hello//c:创建  f:文件信息  v:详细过程报告

    2,解压jar:jar xvf hello.jar //x:解压

    3,往jar中添加文件:jar uf hello.jar HelloWorld.java //u:添加

    4,显示jar内容:jar tvf hello.jar 

  • 相关阅读:
    jsp输出当前时间
    java连接操作Oracle
    Oracle 内置函数
    伪表和伪列
    关于listview视图的 作业
    5月21日 课堂总结
    网格布局作业
    网格布局视图整理
    5月19日课堂总结
    拷贝程序
  • 原文地址:https://www.cnblogs.com/ksWorld/p/6746192.html
Copyright © 2011-2022 走看看