三.数据类型和运算符
3.3数据类型分类
数据类型可以分为基本类型和引用类型
基本类型又可以分为 数值类型和布尔类型
数值类型又可以分为byte(1) char(2) short(2) int(4) long(8) float(4) double(8)
引用类型又可以分为类、接口和数组类型,也包括特殊的null类型。(所谓的引用类型其实就是对象的引用,对象包括实例和数组两种)引用类型变量实际上就是指针,只是Java中不存在指针说法。
null只能变转换成引用类型
3.4.3浮点类型
只有浮点类型数值才可以使用科学计数法;
3.5.3表达式类型的自动提升
所有的byte short char类型将自动提升到int类型(典型例子:“hello”+‘a’+7 与 ‘a’+7+“hello”的运算结果)
20140710
四.流程控制和数组
if语句:if();if()else{}...if()else{}有条基本规则,就是将条件小的放在最前面先处理....
switch语句:switch语句的控制表达式只能是整型(byte int short char)
while语句:while(){... [迭代语句]} 和 do{... [迭代语句]}while()
for语句;
控制循环结构:break结束循环;continue跳出本次循环;
使用return结束方法;
4.5.2定义数组
type[] name;定义数组变量时只是定义了一个引用变量(也就是指针),未有有效内存空间
4.5.3数组的初始化
数组只有初始化后才能使用,数组的初始化方式有两种,一种是静态初始化(程序员指定赋值),一种是动态初始化(程序员只指定空间大小(长度)系统赋值)。
foreach循环只能用于读取,不能改变对应的值
4.6.4多维数组可以当成一维数组
type[] name一维数组
type[][] name 二维数组(相当于一维数组的type变成了type[],一维数组堆内存中的元素成为了数组引用....)
type[][][] name.......
数组模型:这是一个二维数组模型,int[][] b =new int[3][4];
这是使用静态初始化的二维数组模型
String[][] str1=new String[][]{"new String[3]","new String[]{"hello"}}
分析上面代码会有收获
数组习题:五子棋(结合习题参考...)
五.面向对象(上)
5.1.1类的定义
类可以包含三种最常见的成员是 属性 方法 构造器;
各成员间的定义的顺序没有影响,各成员间可以相互调用,但要注意static成员的不能访问没有static的成员
属性(Field也称为字段):用于定义该类或该类的实例所包含的数据
方法:则用于定义该类或该类的实例行为特征或功能实现
构造器:用于构造该类的实例,java语言通过new关键字来调用构造器,从而返回该类的实例
构造器是一个类创建的根本途径,如果一个类没有构造器,则这个类通常无法创建实例。
如果类中没有构造器系统会默认一个构造器,有则不提供
定义属性的格式
[修饰符]属性类型 属性名[=属性值]
修饰符:可以省略,也可以是(public、 protected、private), static、 final)前者可以后者组合
属性类型:可以是基本类型也可以是引用类型(类 数组 接口)
定义方法的格式
[修饰符]方法返回值类型 方法名(形参列表)
{
语句块
}
修饰符:可以省略,也可以是(public protected private【三选一】), static (final abstract【二选一】)
方法值的返回类型:返回值类型可以是java语言允许的任何数据类型,包括基本类型和引用类型(类 数组 接口);
如果声明了返回类型则方法体内必须有一个return语句,该语句返回一个变量或是一个表达式,这个变量或者表达式的类型必须与此处声明的类型匹配。除此之外,如果一个方法没有返回类型则用void来声明没有返回值
形参列表:用于定义方法可以接受的参数【参数类型 参数名】,多组形参用逗号隔开。一旦定义方法指定的形参列表,则调用该方法时必须传入对应的参数值——谁调用方法,谁负责为形参赋值
构造器的格式
[修饰符] 构造器名(形参列表)
{
语句块
}
修饰符:修饰符可以省略,也可以是 public protected private之一。但是没有static final abstract...
1.构造器不是通过继承得到的,所以没有必要把它声明为final的。
2.同理,一个抽象的构造器将永远不会被实现。(所以也不能声明为abstract的)
3.构造器总是关联一个对象而被调用,所以把它声明为static是没有意义的。
构造器名:必须与类名相同
形参列表:与方法定义一样
构造器不能定义返回类型包括void;而且构造器不能显式使用retrun
static是一个特殊的关键字,他可用于修饰方法 属性等成员,标明此成员是属于类共有的。而不是属于该类单个实例。
5.1.2对象的产生和使用
创建对象的根本途径是构造器,通过new关键字来调用某个类的构造器即可创建这个类的实例
Ps:
//定义一个Person类型变量
Person p;
//通过new关键字调用Person类的构造器,返回一个Person实例,将该实例给p变量
p=new Person();
权限允许,类里定义的方法和属性都可以通过类或实例来调用。
类或实例访问方法或属性的方法是:类.属性|方法或者实例.属性|方法
static修饰的方法和属性,即可通过类来调用,也可通过实例来调用;
没有使用static修饰的普通方法和属性,则只可通过实例来调用。
调用方法时必须为方法形参赋值
5.1.4对象this的引用
this关键字是一个对象的默认引用。this关键字总是指向调用该方法的对象。根据this出现位置不同,作为对象的默认引用有两种情形:
1.构造器中引用该构造器执行初始化的对象。
2.在方法中引用调用该方法的对象
this关键字最大的作用是让类中的一个方法访问该类的另一个方法或属性。
this可以代表任何对象,当this出现在某个方法体中是,它所代表的对象是不确定的,但它的类型是确定的,它代表的对象只能是当前类;只有当这个方法被调用时,它所代表的对象才确定下来:谁在调用这个方法,this就代表谁
java允许对象一个成员直接调用另一个成员(类似与同个对象两个方法之间的依赖),可以省略this前缀。
static方法中不能使用this
5.2.2方法的参数传递机制
值传递
5.2.3形参长度可变的方法
在定义方法时,在最后一个形参的类型后增加三点(...),则标明该形参可以接受多个参数值,多个参数值被当成数组传入。这类型的可变形参只能在形参列表的最后。
一个方法中最多只能有一个长度可变的形参。这个长度可变的形参可以传入多个参数,也可以传入一个数组
5.2.4递归方法
参考:http://www.2cto.com/kf/201301/181639.html
解释:程序调用自身的编程技巧叫做递归。
5.2.5方法重载
java允许同一个类里定义多个同名方法,只要形参列表不同就可。
5.3.2成员变量初始化和内存中的运行机制(图)
5.3.3局部变量初始化和内存中的运行机制
与成员变量不同,局部变量不属于任何类型或实例,因此它总是保存在其所在方法的栈内存中(成员变量将放在堆内存)
5.3.4变量使用规则
成员变量的作用域扩大到类存在范围或者对象存在范围,这种范围的扩大有两个害处:
1.增大变量放生存时间,这将导致更大的系统开销
2.扩大了变量的作用域,这不利于提高程序的内聚性
成员变量使用规则:http://blog.csdn.net/u011717922/article/details/37526693
5.4.1理解封装
封装是面向对象三大特征之一(还有多态和继承)它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。
封装就是将该隐藏的隐藏起来 该暴露的暴露出来,而实现就需要用到访问控制符
5.4.2访问控制符
private 私有的 最适合用来修饰属性,把属性隐藏在类的内部
protected 安全的 如果使用protected 来修饰一个方法,通常是希望其子类来重写这个方法。
一个类常常就是一个小的模块,我们应该只让这个模块公开必须让外界知道的内容,而隐藏其他一切内容,进行程序设计时,应尽量避免一个模块直接操作和访问另一个模块的数据,模块设计追求高内聚 低耦合