基本程序设计结构
1. 整形
- int型 4字节
- short型 2字节
- long型 8字节(数值后有后缀L或l)
- byte型 1字节
2. 浮点类型
- float型 4字节(数值后有后缀F或f)
- double型 8字节
3. char类型
- char类型的字面量值要用单引号括起来
4. boolean类型
- boolean类型有两个值:false和ture,用来判断逻辑条件。
- 整型值和boolean值之间不能进行相互转换。
5. 类型转换
- 强制类型转换
-
- double x = 9.997; int nx = (int)x;
-
- int nx = (int)Mash.round(x); 对浮点数进行舍入运算,以便于得到最接近的整数。
6.字符串
- String类的substring(开始索引,结束索引)方法可以从较大字符串中提取子串
- 运算符+可以实现字符串的拼接
- 字符串不可变
- s.equalts(t)可以检测s字符串与t字符串是否相等
7.输入
- 首先需要导包:使用import关键字
- 构造一个Scanner对象:Scanner in = new Scanner(System.in);
- 然后使用变量来接收输入值:
- String name = in.nextLine();此方法可以输入空格
- String name = in.next();此方法不可以输入空格
- int age = in.nextInt();其他数据类型类似
8.条件语句
- if(条件判断){语句}else if(){语句} else{语句} 条件为真时执行语句块,若为假,判断下一条件,最后全为假则执行最后一个不需判断的语句块
- while(条件){语句};条件为真,执行语句块并再次进行判断;
- do{语句}while(条件);先执行一次语句块,再判断条件,若为真,则执行语句块并再次进行判断;
- for(初始化语句;条件;末尾语句){语句};先进行初始化且只有一次,在进行条件判断,若为真,则执行语句,在执行末尾语句,在进行条件判断;
- for(变量:数组){每一次给变量赋值一个新的数组元素};
- switch(n){ case 1:语句;break;…default :语句;break;} 当case后的值与n相同时执行该语句,若无,则执行default后的语句;
9.中断语句
- break:结束当前循环
- 标签break:执行后会跳转到带标签的语句块末尾
- continue:结束当前循环的后续部分,开始下一循环,不会跳过for循环的末尾语句
对象与类
1.类
- 类是构造对象的模板或蓝图
- 由类构造对象的过程称为创建类的实例
- 类之间的关系
-
- 依赖:如果一个类的方法使用或操纵另一个类的对象,则该类依赖于另一个类
-
- 聚合:一个类的对象包含另一个类的对象
-
- 继承:一个新类派生于一个已存在的类
2.对象
- 根据类所构造的
- 对象的行为是用可调用的方法来定义的
- 要想使用对象必须构造对象
3.var
- 定义局部变量时,若不明确变量的类型,可以var定义,可以从变量初值推导出变量类型
4.private
- 使用该关键字定义方法时,会将定义方法私有化,即仅限于本类使用
5.final
- 当使用final修饰方法时,这个方法将成为最终方法,无法被子类重写。但是,该方法仍然可以被继承。
- 当用final修改类时,该类成为最终类,无法被继承。简称为“断子绝孙类”。
- 当用final修改变量时,该变量成为常量,无法被修改。
6.static
- 修饰成员变量时,该类所创建的对象所拥有的的该数据统一
- 修饰代码块时,调用此类时,代码只会执行唯一的一次
- 修饰方法时,可通过类名称直接调用方法
7.重载
- 相同方法名,不同方法参数,可实现同名不同用
继承
1.extends
- 使用该关键字后表明正在构造的新类派生于一个已存在的类
- 这个已存在的类被称为超类,基类或父类
- 新类称为子类,派生类或孩子类
- 子类自动继承父类中的方法
2.覆盖方法
- 当父类中的有些方法对子类并不适用时,子类可以覆盖这个方法
- 当子类覆盖父类的方法之后又想调用父类的原方法,可使用关键字super来调用
3.多态
- 将子类对象赋值给超类变量
- 定义一个父类的子类对象,只可以调用父类方法,子类特有的方法不可用
- 向上转型 :一般都是正确的,
- 父类 变量名 = new 子类;
- 向下转型:有可能出错:
- 父类 变量名(a) = new 子类(前提);子类 变量名 = (父类)变量名(a)
4.abstract
- abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型,抽象类就像当于一类的半成品,需要子类继承并覆盖其中的抽象方法。
- abstract修饰方法,会使这个方法变成抽象方法,也就是只有声明(定义)而没有实现,实现部分以";"代替。需要子类继承实现(覆盖)。
5.Object
- Object类是Java所有类的始祖
- 可以使用Object类型的变量引用任何类型的对象
- equals方法用于检测一个对象是否等于另一个对象
- toSring方法会返回表示对象值的一个字符串
6.对象包装器与自动装箱
- 所有的基本类型都有一个与之对应的类,这些类称之为包装器
- Integer,Long,Float,Double,Short,Byte,Character,Boolean
- 包装器类是不可变的,一旦构造就不允许更改其中的值
- 包装器类不能派生子类
7. ···
- 方法的参数个数可以不确定,用"…"定义
- 在方法中定义可变参数后,我们可以像操作数组一样操作该参数
- 若该方法除了可变参数还有其它参数,可变参数必须放到最后
- 可变参数可以兼容数组参数,但数组参数无法兼容可变参数
接口与内部类
1.接口
- 定义接口需要使用 interface 关键字
- 接口不是类,不能实例化
- 接口中的所有方法默认为public方法
- 接口中变量默认修饰符为public static final
- 接口可以声明变量,但变量必须引用实现了这个接口的类对象
- 每个类可以实现多个接口
2.内部类
- 内部类是定义在另一个类中的类
- 普通内部类对象依赖外部类对象而存在
- 静态内部类也是作为一个外部类的静态成员而存在,创建一个类的静态内部类对象不需要依赖其外部类对象,静态内部类中也无法访问外部类的非静态成员
- 成员内部类定义在另一个类中。成员内部类可以无条件访问外部类的属性和方法,但是外部类想要访问内部类属性或方法时,必须要创建一个内部类对象,然后通过该对象访问内部类的属性或方法。
- 局部内部类存在于方法中。局部内部类的访问权限仅限于方法或作用域内。局部内部类就像局部变量一样,前面不能访问修饰符以及static修饰符
3.泛型
- 泛型类型在逻辑上可以看成是多个不同的类型,实际上都是相同的基本类型
- 泛指所有参数类型,用于不确定使用的参数类型范围时
- 可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法
- 不能实例化类型变量
- 不能构造泛型数组
集合
1.HashSet
- 不允许有重复的值
- 允许有NULL值
- 无序存储
2.TreeSet
- 保证了集合元素处于排序状态
3.ArrayList
- 通过一个数组去保存数据的
- 有索引
- 查询快,增删慢
4.LinkedList
- 双向链表实现的存储
- 无索引
- 查询慢,增删快
5.HashMap
- 同时存储两个元素key&value
- 数组集合链表实现的存储
- 无序存储
- 同步,效率高
- 可以存储null
- key不可重复,value可重复
- key相当于数组的索引,通过key来查询value
6.Hashtable
- 与HashMap类似
- 同步,效率低
- 不可以存储null