首页 > 代码库 > java基础知识大杂烩

java基础知识大杂烩

基本类型一旦声明就会被分配内存空间,而普通类型(自定义类)需要使用new关键字来分配内存空间。

 

当我们创建一个衍生类的对象时,Java实际上先创建了一个基类对象(subobject),

并在基类对象的外部(注意,这里是基类对象的外部,衍生类对象的内部),增加衍生类定义的其他成员,构成一个衍生类对象。

外部使用者能看到的,就是基类和衍生类的public成员。

 

new是在内存中为对象开辟空间。具体来说,new是在内存的堆(heap)上为对象开辟空间。

这一空间中,保存有对象的数据和方法。

引用变量存在于内存的栈(stack)中栈的读取速度比堆快,但栈上存储的数据受到有效范围的限制。 

基本类型(primitive type)的对象,比如int, double,保存在栈上。当我们声明基本类型时,不需要new。

一旦声明,Java将在栈上直接存储基本类型的数据。所以,基本类型的变量名表示的是数据本身,不是引用。

 

Java的参数传递为值传递。也就是说,当我们传递一个参数时,方法将获得该参数的一个拷贝。

实际上,我们传递的参数,一个是基本类型的变量,另一个为对象的引用。

 

基本类型变量的值传递,意味着变量本身被复制,并传递给Java方法。Java方法对变量的修改不会影响到原变量。

 

引用的值传递,意味着对象的地址被复制,并传递给Java方法。Java方法根据该引用的访问将会影响对象。

 

字符串的不变性(immutable)

任何字符串对象一旦被创建,就不能被更改,通过引用变量导致字符串的修改,都将导致新字符串对象的创建。

大量的字符串相加操作会产生大量的字符串对象,比如:

System.out.println("sfd"+"sf"+"ty");

 如果有涉及到较多的字符串相加操作,请使用StringBuffer类。

   

        String s=" this is a book! ";

       System.out.println(s.length()); //求字符串长度,包含所有空格;

       System.out.println(s.trim().length()); //去除头尾空格

       System.out.println(s.toUpperCase()); //将小写字母转换为大写字母

       System.out.println("aBcD".toLowerCase()); //将大写字母转换为小写字母

       System.out.println(s.indexOf(‘s‘)); //找出s这个字符在字符串中首次出现的位置,字符串第一个位置是0位置;

       System.out.println(s.lastIndexOf(‘s‘));//找出s这个字符在字符串中最后一次出现的位置

       System.out.println(s.indexOf("book")); //找出子串出现的位置,即:"book"中‘b‘字符的位置

       System.out.println(s.indexOf("world!"));

       System.out.println(s.toCharArray()[3]); //输出为 i

       System.out.println(s.charAt(3));  //输出为 i

       System.out.println(s.concat("hello,world!")); //字符串相加

       System.out.println("abc".compareTo("bca"));  //输出-1,

       System.out.println("abc".compareTo("abc"));  //输出 0,

       System.out.println("cbc".compareTo("bca"));  //输出 1

       System.out.println("Abc".compareToIgnoreCase("aBc"));

       System.out.println(s.contains("book"));   //输出 true

       System.out.println(s.endsWith("! "));     //输出 false

       System.out.println(s.isEmpty()); //是否为空

       System.out.println(s.replace(‘s‘, ‘m‘));

       System.out.println(s.valueOf(1));

       System.out.println(1+"");

       System.out.println("abcdefg".substring(3));  //输出defg

        System.out.println("abcdefg".substring(3,6));  //输出def

 

 

子类可以继承父类的方法,也可以复写父类的方法,但所有复写的方法不能有比父类方法更严格的访问权限。