数据类型
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.代码块局部变量
成员变量与局部变量的区别:
成员变量
- 成员变量定义在类中,整个类都可以被访问
- 成员变量分类类成员变量和实例成员变量,实例变量存在于对象所在的堆内存中。
- 成员变量有初始化默认值。
- 成员变量的权限修饰符可以根据需要选择任意一个。
局部变量
- 局部变量值定义在局部范围内,如:方法内,代码块内等。
- 局部变量存在于栈内存中。
- 作用的范围结束,变量空间会自动释放。
- 局部变量没有默认初始化值,每次必须显式初始化
- 局部变量声明时不指定权限修饰符。
匿名对象
不定义对象的句柄,直接调用这个对象的方法,这样的对象叫做匿名对象。
如:new Person().showInfo();
经常将匿名对象作为实参传递给一个方法调用。
类的访问机制
1.在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。(例外:static方法访问非static的成员变量,编译不通过。)
2.在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员。
面向对象思想“落地”法则之一
- 关注类的的设计,即设计类的成员:属性、方法。
- 类的实例化,即创建类的对象。
- 通过“对象.属性”、“对象.方法” 执行。
方法的重载
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
重载的特点:
与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型),调用时,根据方法参数列表的不同来区别。
方法的可变个数参数:
用数组的方式来传递可变个数的参数 (String[] args)
用Java特有的...方式来传递可变个数的参数,这种参数在使用时与数组的使用方式相同。(String ... args)
注意:日过一个方法有多个的形参,可变的形参(...这种的参数)一定要放在所有的参数最后。
printInfo(String s,int d,String ... args)
Java的实参值如何传入方法?
Java里方法的参数传递方式只有一种,值传递。
方法的参数传递
- 如果方法的形参是基本数据类型,那么实参(实际的数据)向形参传递参数时,就是直接传递值,把实参的值复制给形参
- 如果方法的形参是对象,那么实参(实际的对象),向形参传递参数的时候,也是把值给形参,这个值是实参在栈内存中的值,也就是引用对象在堆内存中的地址
基本数据类型都是保存在栈内存中,引用对象在栈内存中保存的是也引用对象的地址,那么方法的参数传递是传递值(是变量在栈内存中的值)。
包(package)
关键字—package,其格式为:package 顶层包名.子包名
等同于文件夹的概念,包和文件夹一样可以有多级,也就是包下可以有包和文件,多级的包使用的.分隔,例如
com下的cn的test包,写法就是com.cn.test
信息的隐藏和封装
Java中通过数据声明为私有的(private),再提供公共(public)方法:getXxx()和setXxx()实现对属性的操作,以实现下述目的:
- 隐藏一个类中不需要对外提供的实现细节。
- 使用者只能通过实现定制好的方法来访问数据,可以方便的加入控制逻辑,限制对属性的不合理操作。
- 便于修改,增强代码的可维护性。