数据类型 

    1.java 没有任何无符号(unsigned)形式的int、long、short、或byte类型。

常量

    2.关键字final这个变量只能被赋值一次,一旦赋值之后就不能再更改了,习惯上,常量名使用全是大写。参考C++中的const。

        而const是java保留的关键字,但是不免并没有使用,再java中,必须使用final来定义常量,如果希望某个常量可以在一个类的多个方法中只用,通常将这些常量称为:类常量,使用关键字static final来设置一个类常量。

        类常量的定义位于main方法的外部,所以在一个类的其他方法中也可以使用这个常量。

 

运算符:

    1.java中,没有幂运算,因此需要借助Math类的pow方法。

字符串

    2.Java类标准库中提供了一个预定义字符串类,叫做String,每个用双引号括起来的字符串都是String类的一个实例。


    3.String类的substring方法可以从一个较大的字符串中提取出一个子串。

        String greeting="hello";

        String s=greeting.substring(0,3); 

        ===>  hel

    4.java中可以使用"+"来实现字符串的拼接。

    5.使用equls方法来检测字符串是否相等 

        s.equls(t),返回值为true或false

        检测是否相等而不区分大小写可以使用equlsIgnoreCase方法

    6.空串""长度为0,null串表示目前没有任何对象与该变量关联

    7.String API(核心技术卷I第50页)


输入输出

    1.要想通过控制台进行输入,首先需要构造一个Scanner对象,并与“标准输入流”System.in关联

        Scanner in=new Scanner(System.in);

        int age = in.next();

控制流程

    1.与C++不同,java提供了一种带标签的break语句,用于跳出多重嵌套的循环语句。(有点像goto)

*/
/*
8.04

数组

    1. int a[]; 这个语句只是声明了变量a,若要将a初始化为一个真正的数组,需要int[] a =new int[100];

    2. 若要实现指定数组大小并进行输入:

       

int n = in.nextInt();
        int[] a = new int[n];
        for (int i:a) {
            System.out.printf("input a[%d]", i);
            a[i] = in.nextInt();    
        }

    3.java中一种功能很强的循环结构,用来依次处理数组中的每个元素,不必指定下标值。 (其实和C++中的一样)  

      

for(int element :a)
            System.out.println(element);

    4.java数组与C++中的指针数组int *p[n]一样,

      

int[] a=new int[100]; ->java 
        int* a=new int[100];->C++     二者等同

    

    5.在Java应用程序的main方法中,程序名并没有存储在args数组中,

        例如:java Message -h world

        其中的args[0]是“-h”而不是“Message”或者"Java"

    

    6.数组排序,使用Arrays类中的sort方法。

*/
/*
8.05

Arrays类的几个常用方法

    1.toString 返回数组中数据元素的字符串

    2.copyOfRange 返回与a类型相同的一个数组

    3.sort 快排

    4.BinarySearch 二分查找值V

    5.fill 将数组所有元素值设为v

    6.equals 两数组是否相等,bool

多为数组与不规则数组:

    Java中其实没有多维数组,因为Java中的一维数组其实是指针数组,多维数组就可以理解为数组的数组。


对象与类

    1. 如果将一个方法应用于一个值为null的对象上,会产生运行时错误,局部变量不会自动初始化为Null,

        必须通过调用new或者将它们设置为null进行初始化。

      

Date birthday=new Date();
        birthday= null;
        String s= birthday.toString();//err

    2.Java对象变量与C++的引用类似,但是C++中没有空引用,并且引用不能被赋值,Java对象变量相当于C++的对象指针。

      

Date birthday ==> Date* birthday

    3.Java构造器的工作方式与C++一样,但Java对象是在堆中构造的,而且构造器总是伴随着new操作符一起使用。

    

    4.构造器中不能定义与实例域重名的局部变量

    5.Java允许重载任何方法,并不只是构造器方法,因此,要完整描述一个方法,就需要指出方法名以及参数类型,

        这就叫做方法的签名。

    

    6.变量的分类:成员变量与局部变量

        a.在方法体外,类体内声明的变量称为成员变量。

        b.在方法体内部声明的变量称为局部变量。

            成员变量:1.实例变量(不以static修饰)

                     2.类变量(以static修饰)

*/
/*
继承

    1.Java中,所有的继承都是公有继承,而没有C++中的私有继承和保护继承  

*/

 

变量的分类:成员变量与局部变量

        a.在方法体外,类体内声明的变量称为成员变量。

        b.在方法体内部声明的变量称为局部变量。

            成员变量:1.实例变量(不以static修饰)

                        2.类变量(以static修饰)

 局部变量:1.形参 2.方法局部变量 3.代码块局部变量

 

成员变量与局部变量的区别

成员变量

  1. 成员变量定义在类中,整个类都可以被访问
  2. 成员变量分类类成员变量和实例成员变量,实例变量存在于对象所在的堆内存中。
  3. 成员变量有初始化默认值。
  4. 成员变量的权限修饰符可以根据需要选择任意一个。

局部变量

  1. 局部变量值定义在局部范围内,如:方法内,代码块内等。
  2. 局部变量存在于栈内存中。
  3. 作用的范围结束,变量空间会自动释放。
  4. 局部变量没有默认初始化值,每次必须显式初始化
  5. 局部变量声明时不指定权限修饰符。

匿名对象

 不定义对象的句柄,直接调用这个对象的方法,这样的对象叫做匿名对象。

  如:new Person().showInfo();

    经常将匿名对象作为实参传递给一个方法调用。

类的访问机制

1.在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。(例外:static方法访问非static的成员变量,编译不通过。)

   2.在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员。

面向对象思想“落地”法则之一

  1. 关注类的的设计,即设计类的成员:属性、方法。
  2. 类的实例化,即创建类的对象。
  3. 通过“对象.属性”、“对象.方法” 执行。

方法的重载

在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。

重载的特点:

 与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型),调用时,根据方法参数列表的不同来区别。

方法的可变个数参数:

  用数组的方式来传递可变个数的参数 (String[] args)

  用Java特有的...方式来传递可变个数的参数,这种参数在使用时与数组的使用方式相同。(String ... args)

  注意:日过一个方法有多个的形参,可变的形参(...这种的参数)一定要放在所有的参数最后。

      

printInfo(String s,int d,String ... args)

Java的实参值如何传入方法?

  Java里方法的参数传递方式只有一种,值传递。

方法的参数传递

  1. 如果方法的形参是基本数据类型,那么实参(实际的数据)向形参传递参数时,就是直接传递值,把实参的值复制给形参
  2. 如果方法的形参是对象,那么实参(实际的对象),向形参传递参数的时候,也是把值给形参,这个值是实参在栈内存中的值,也就是引用对象在堆内存中的地址

  基本数据类型都是保存在栈内存中,引用对象在栈内存中保存的是也引用对象的地址,那么方法的参数传递是传递值(是变量在栈内存中的值)。

包(package)

  关键字—package,其格式为:package 顶层包名.子包名

  等同于文件夹的概念,包和文件夹一样可以有多级,也就是包下可以有包和文件,多级的包使用的.分隔,例如

  com下的cn的test包,写法就是com.cn.test

信息的隐藏和封装

  Java中通过数据声明为私有的(private),再提供公共(public)方法:getXxx()和setXxx()实现对属性的操作,以实现下述目的:

  1. 隐藏一个类中不需要对外提供的实现细节。
  2. 使用者只能通过实现定制好的方法来访问数据,可以方便的加入控制逻辑,限制对属性的不合理操作。
  3. 便于修改,增强代码的可维护性。