黑马程序员——Java基础-整理笔记

                                                  ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


        1、字符类型

               ①Java可以把字符作为整数来对待,例如char类型可以隐式转化为int类型。

                             char是用来存储Unicode编码的字符,占用2个字节(所以可以存储汉字)

                             若想得到一个0~65536之间的数字锁代表的Unicode码中相应位置上的字符,必须使用char类型显式转换。

                   ②在Java中允许使用汉字或其他语言文字作为变量名。

                   ③&&和&的区别:&&有“短路”运算符之称,即第一个表达式为false时,就不用再计算第二个表达式了,例如

                          x=4; y=1;

                          if(x==3%%++y>0){   //第二个表达式的y就不会自增

                                     x++;

                                    }

                   ④位移运算符(<<,>>)适用的数据类型有byte,short,char,int和long(精度从“低”到“高”依次为 byte

                       位移运算的效率最高,例如

                         y<<2与y*4的结果相同,但是y<<2的效率会比较高

                    ⑤多行注释何以嵌套单行注释,但不可以嵌套多行注释。

            2、字符串

                 ①java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。String不是基本数据类型。

                 ②一句相连的字符串不能分别在两行写,例如

                           System.out.println("I like

                                                     java");      //这样会报错

                ③String、StringBuffer和Stringbulider的区别?

                           String: String是字符串常量 ,它是一个基本类型,字符串是不可变
                           StringBuffer是在jdk1.0出现的,果要频繁对字符串内容进行修改,出于效率考虑最好使用StringBuffer,如果想转成String类型,可以调用StringBuffer的toString()方法。
                          StringBuffer 是线程安全的,可以从StringBuffer类中的代码看到
                                               public synchronized StringBuffer append(StringBuffer sb) {
                                                                            super.append(sb);
                                                                             return this;
                                                                      }
                   StringBulider 是StringBuffer的一个简易版,它是线程不安全
                              如果你是要操作少量的数据,直接用String就可以了,
                             如果在单线程中操作大量数据,用StringBuilder ;
                             在多线程操作大量数据,当然用StringBuffer,保证了线程的安全。

                         

                 StringBuilder s=new StringBuilder("abc");
		 s.append("ef");    //s="abcef"
		 s.insert(3, "d");  //s="abcdef"
		 s.delete(2, 3);    //s="adef"
		 System.out.println(s);


2.变量初始化

         java中的变量在使用之前必须被初始化,当创建一个对象的时候一些类的变量会自动初始化并赋予缺省值。

         数字类赋值0;char类型赋值'\u0000'; boolean类型赋值false;引用对象赋值null;

         注意的是在方法之外的类变量的值是自动赋初始值,而方法内的局部变量必须手工初始化。

       class AA{ 

               int num; 

            void test(){

                   int j;

                  j =5;//没有这一行则编译不会通过。

                 j = j+num;

          }

     }


3.switch语句

       这个点经常在求职笔试题目中出现。default放在最上边编译没问题;碰到符合分支的,如果没有break会一直向下运行。

    

public class tt {

	public static void main(String args[]) {

		tt t = new tt();
		t.test(4);// 如果参数为1和2 除外的数字会走default和case 1
	}

	void test(int i) {
		switch (i) {
		default:
			System.out.println("default");
			
		case 1:
			System.out.println("111");
			break;
			
		case 2:
			System.out.println("222");
			break;
		}

	}

}


4.方法重载(overloading)、方法覆盖(overriding)

    方法重载(overloading)一定要求名字相同,参数不同,返回类型可以相同也可以不同。

     class A{ 

         void test(int i){ }

        }

      class AA extends A{

           int test(int i, int j){

                   return 5; 

                 } 

          }

注:方法覆盖(overriding)要求名字,参数,返回类型全部必须相同,访问控制符可以不同,但必须大过父类的。因为如果名字和参数都已经相同了则一定要求返回类型相同,否则认为这是一个新的方法了,名字就必须不同了。

     class A{ 

       void test(int i){  }

       }

     class AA extends A{

        public void test(int i){//若是换成private则编译不通过。 

      } 

   }  

注:关于覆盖方法抛出异常的问题。如A是父类,B是继承A的子类。B中的方法meth()去覆盖父类A的此方法时,B中不能throws出新的异常,只能是父类抛出的异常或其子集。更甚至可以不抛出异常


5.关于类的构造器重载问题

     class A{

         public A(int i){ } 

       }

     class AA extends A{

       public AA(){

             int i = 5; // 这里出错,没有父构造器

            }

    }

  由于父类A自定义了构造器,所以缺省的构造器就丢失了,当子类的构造器自动试图调用父类没参数的构造器时却没有,所以会编译出错。 




                                     ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

你可能感兴趣的:(黑马程序员——Java基础-整理笔记)