java学习

来源:互联网 发布:微型linux 编辑:程序博客网 时间:2024/06/05 12:03
  • 创建对象时,声明对象和实例化对象两步缺一不可。Person Xiaoming = new Person("xiaoming",13);
  • Java中存在两种内存机制,栈内存和对内存。基本类型的变量和对象引用都在栈内存中分配,堆内存用来分配存放由new创建的对象。
  • c++中Object o创建一个对象 o,这句话创建一个对象o,并且开辟了这个对象所需的内存空间,而Java 中o是一个引用对象,它记录的是对象的内存地址,对象本身被存储在别处。
  • Object o1 = o2在c++中,存在两个对象,而在java中,则只是把o2的地址赋给o1,它们指向同一个对象,即存在一个对象。
  • Java只有一种参数传递形式,按值传递。如果传入方法的是基本类型的数据,方法声明的形参得到的是基本类型数据的一份拷贝。如果被引用的的方法声明的形参得到的是引用对象的拷贝,即实参和形参得到的是对象引用的拷贝,即实参和形参指向同一对象
  • 局部变量先声明后使用, java中没有为局部变量提供默认值,否则将编译出错。
  • 在成员方法中,局部变量和类的成员变量名相同,则必须使用关键字this.
  • 希望返回当前对象或把当前对象作为参数传递给其他方法的时候也使用this。
  • 如果某个构造函数的第一条语句具有形式this(....),那么这个构造函数将调用本类中其他的构造函数。
  • 静态变量不局限于某个具体的对象,它属于整个类,一个静态变量只有一个存储空间。
  • 静态方法没有响应的this引用
  • 静态方法中不能直接访问所属类的非静态变量和非静态方法,非静态方法可以直接访问所属的静态变量和静态方法。
  • 解决类名重用的问题,java引入了包。包名可以理解为一个目录名。import 包名,类名称。
  •  java中只可单向继承
  • 由于子类中的一部分成员属性是从父类继承而来 ,可以显式的调用父类的构造方法, 利用super(参数表)。
  • 若子类中的成员方法名与父类相同,参数表不同,则属于同名方法的重载,而不是覆写。覆写机制是指子类的方法与方法名,参数表,返回值与服了中被覆写的方法都相同,而方法体不同。
  • final修饰的类不能被其他类继承,即它没有子类。
  • static关键字 
     static 关键字可以用来修饰类的变量,方法和内部类。static 是静态的意思,也是全局的意思它定义的东西,属于全局与类相关,不与具体实例相关。就是说它调用的时候,只是 ClassName.method(),而不是 new ClassName().method()new ClassName()不就是一个对象了吗?static 的变量和方法不可以这样调用的。它不与具体的实例有关。

    final关键字 
    final 关键字有三个东西可以修饰的。修饰类,方法,变量。 详细解释一下: 

    在类的声明中使用 final 
    使用了 final 的类不能再派生子类,就是说不可以被继承了。有些 java 的面试题里面,问 String 可不可以被继承。答案是不可以,因为 java.lang.String是一个 final 类。这可以保证 String 对象方法的调用确实运行的是 String 类的方法,而不是经其子类重写后的 方法。 

    在方法声明中使用 final 
    被定义为 final 的方法不能被重写了,如果定义类为 final 的话,是所有的方法都不能重写。而我们只需要类中的某几个方法,不可以被重写,就在方法前加 final 了。而且定义为 final 的方法执行效率要高的啊。 

    在变量声明中使用 final 
    这样的变量就是常量了,在程序中这样的变量不可以被修改的。修改的话编译器会抱错的。而且执行效率也是比普通的变量要高。final 的变量如果没有赋予初值的话,其他方法就必需给他赋值,但只能赋值一次。

    ?
    注意:子类不能重写父类的静态方法哦,也不能把父类不是静态的重写成静态的方法。想隐藏父类的静态方法的话,在子类中声明和父类相同的方法就行了。

  • 如果某个类中包含了抽象方法,则这个类必须定义为抽象类。抽象类中可以包含非抽象的方法和抽象方法, 但不一定包含抽象方法。

  • 静态方法、私有方法、和final修饰的方法是不能被覆写的,因此这三类方法不能定义为抽象方法。

  • 接口是更深层次的抽象。interface interfaceName{....}接口成员方法默认为抽象的,公有的,成员属性默认为静态的,final修饰的。接口只是提供一种形式,具体的实现细节交由实现它的类完成。class Myclass implements A,B,C{.....}

  • 若类需要包含一些方法的实现,必须实现为抽象类,而其他情况两者皆可,则优先选择使用接口,使程序易于扩展。Java中类不支持多继承,但类可以实现多个接口。

  • JAVA中将数组作为对象来处理,不再仅仅是一块连续的存储空间。分为一维数组和多维数组。

  • 一维数组的生命type arrayname[]    or    type[] arrayname   = new type[20];type[] arrayname = {val0,val1,val2....}

  •  

    for(数据类型 迭代变量:数组|集合){ 循环体 }
  • Arrays类是数组类的操作,定义在java.util中,使用为Arrays.toString(arr1);
  • String类多用于字符串常量,而StringBuffer 和 String Builder则多用于变量。
  • main方法的参数为String类型的数组,这个参数表示main方法将接收一个字符串数组,换言之,我们可以使用命令行参数传递。
  • StringBuffer
    public void append(type  t)      public void insert(int i ,type t)
  • Vector视为允许不同类型元素共存的可变长数组。
  • 异常类型:Error和Exception类(RuntimeException和非RuntimeException)
0 0
原创粉丝点击