L09-枚举&注解
枚举入门
JDK1.5之前需要自定义枚举类
JDK 1.5 新增的 enum 关键字用于定义枚举类
若枚举只有一个成员, 则可以作为一种单例模式的实现方式
枚举类的属性
枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰
枚举类的使用 private final 修饰的属性应该在构造器中为其赋值
若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数
123456789101112131415161718192021222324252627282930313233343536373839public class TestSeason { public static void main(String[] args) { Season spring = Season.SPRING; System.out.println(spring); spring.show(); System.out.println(spring.getSeasonName()); ...
实战:Bank
实验一题目 创建一个简单的银行程序包。
目的 Java 语言中面向对象的封装性及构造器的创建和使用。
说明 在这个练习里,创建一个简单版本的 Account 类。将这个源文件放入 banking 程序包中。在创建单个帐户的默认程序包中,已编写了一个测试程序 TestBanking。 这个测试程序初始化帐户余额,并可执行几种简单的事物处理。最后,该测试程序显示该帐户的最终余额。
提示
创建 banking 包
在 banking 包下创建 Account 类。该类必须实现下述 UML 框图中的模型。
声明一个私有对象属性:balance,这个属性保留了银行帐户的当前(或即时)余额。
声明一个带有一个参数(init_balance)的公有构造器,这个参数为 balance 属性赋值。
声明一个公有方法 getBalance,该方法用于获取账户余额。
声明一个公有方法 deposit,该方法向当前余额增加金额。
声明一个公有方法 withdraw,从当前余额中减去金额。
打开TestBanking.java文件,按提示完成编写 ...
L08-泛型
泛型(Generic)作用
解决元素存储的安全性问题
解决获取数据元素时,需要类型强转的问题
123456789101112List list= new ArrayList<>();list.add(12);list.add(24);list.add(48);// 1、没有使用泛型,任何Object及其子类的对象都可以添加进来list.add(new String("AA"));for (int i = 0; i < list.size(); i++){ // 2、强转为int型时,可能报ClassCastException异常 int score = (Integer)list.get(i); System.out.println(score);}
123456789List<Integer> list= new ArrayList<>();list.add(12);list.add(24);list.add(48);for (int i = 0; i < list. ...
L07-Java集合
Java集合框架概述 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。
对于数组存储对象的弊端:
一旦创建,其长度不可变
真实的数组存放的对象的个数是不可知的
Java 集合类:可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组。
分类 Java 集合可分为 Collection 和 Map 两种体系。
Collection接口:
Set:元素无序、不可重复的集合 — 类似高中的“集合”
List:元素有序,可重复的集合 — “动态”数组
Map接口:具有映射关系“key-value对”的集合 — 类似于高中的“函数”
Collection接口继承树
Map接口继承树
Collection接口概述
Collection 接口是 List、Set 和 Queue 接口的父接口,该接口里定义的方法既可用于操作 Set 集合,也可 ...
Algorithm04-最长公共连续子串
最长公共连续子串题目 牛牛有两个字符串(可能包含空格),牛牛想找出其中最长的公共连续子串,希望你能帮助他,并输出其长度。
输入描述
输出描述
示例
代码123456789101112131415161718192021222324252627import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s1 = scanner.nextLine(); String s2 = scanner.nextLine(); int m = s1.length(); int n = s2.length(); char[] array1 = s1.toCharArray(); char[] array2 = s2.toCharArray(); i ...
L06-异常处理
Java异常 在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格式,读取文件是否存在,网络是否始终保持通畅等。
概述 异常:在Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)
异常分类
Error: Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。一般不编写针对性的代码进行处理。
Exception: 其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如:
空指针访问
试图读取不存在的文件
网络连接中断
解决方法 对于这些错误,一般有两种解决方法:
一是遇到错误就终止程序的运行。
另一种方法是由程序员在编写程序时,就考虑到错误的检测、错误消息的提示,以及错误的处理。
Java异常类层次 捕获错误最理想的是在编译期间,但有的错误只有在运行时才会发生。比如:除数为0,数组下标越界等。
...
L05-高级类特性2
关键字static 当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用。我们有时候希望无论是否产生了对象或无论产生了多少对象的情况下,某些特定的数据在内存空间里只有一份,例如所有的中国人都有个国家名称,每一个中国人都共享这个国家名称,不必在每一个中国人的实例对象中都单独分配一个用于代表国家名称的变量。
如果想让一个类的所有实例共享数据,就用类变量!
类属性、类方法的设计思想
类属性作为该类各个对象之间共享的变量。在设计类时,分析哪些类属性不因对象的不同而改变,将这些属性设置为类属性。相应的方法设置为类方法。
如果方法与调用者无关,则这样的方法通常被声明为类方法,由于不需要创建对象就可以调用类方法,从而简化了方法的调用。
static使用范围 在Java类中,可用static修饰属性、方法、代码块、内部类。
被修饰后的成员的特点
随着类的加载而加载
优先于对象存在
修饰的成员,被所有对象所共享
访问权限允许时,可不创建对象,直接被类调用 ...
Algorithm03-操作序列
操作序列题目 小易有一个长度为n的整数序列,a_1,…,a_n。然后考虑在一个空序列b上进行n次以下操作:
将a_i放入b序列的末尾
逆置b序列
小易需要你计算输出操作n次之后的b序列。
输入描述
输出描述
示例
代码12345678910111213141516171819202122import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String m = scanner.nextLine(); String[] s = scanner.nextLine().split(" "); int n = Integer.parseInt(m) - 1; StringBuilder stringBuilder = new StringBuil ...
Algorithm02-组装三角形
组装三角形题目 牛牛手里有N根木棒,分别编号为1~N,现在他从N根里想取出三根木棒,使得三根木棒构成一个三角形,你能计算出牛牛有多少种取法吗?(考虑两种取法中使用的木棒编号有一个不一样就认为是不同的取法)。
输入描述
输出描述
示例
代码12345678910111213141516171819202122232425import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String m = scanner.nextLine(); String s[] = scanner.nextLine().split(" "); int n = Integer.parseInt(m); int array[] = new int[n]; for (int i ...
Algorithm01-循环单词
循环单词题目 如果一个单词通过循环右移获得的单词,我们称这些单词都为一种循环单词。 例如:picture 和 turepic 就是属于同一种循环单词。 现在给出n个单词,需要统计这个n个单词中有多少种循环单词。
输入描述
输出描述
示例1
示例2
说明 并不是必须包含两个或两个以上的不同单词才算一种循环单词!
代码12345678910111213141516171819202122import java.util.LinkedList;import java.util.List;import java.util.Scanner;public class LoopWord { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()){ int n = scanner.nextInt(); L ...