public String addSparator(String str, String separator) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < str.length(); i++) { if (i == str.length() - 1) { sb.append(str.charAt(i)); } else { sb.append(str.charAt(i)); sb.append(separator); } } return sb.toString(); }
1. switch语句格式:
switch(表达式){
case 值1:
语句体1;
break;//break可以省略,但会出现case穿透现象,建议不省略
case 值2:
语句体2;
break;
...
default://对不正确的情况给出提示,可以省略,建议不省略,可以在任意位置,但建议在最后
语句体n+1;
break;
}
表达式可以是byte,short,int,char,JDK5以后可以是枚举,JDK7以后可以可以是String。
------------------------------------------------------------------以下是学习慕课网的视频Java----------------------------------------------------------------------------------------------------------
1. 封装---------------------------------------------------------------------------------------------
加了private 对象就不能直接访问到属性了,而是需要通过get set 方法来改变
2. Java中的包就像是 文件夹
系统中的包:
3. 访问修饰符
钱包:自己,屋子里的,屋子里的和儿纸,艾瑞巴蒂
4. Java中的this关键字
5. Java中的内部类
问:什么是内部类呢?
答:内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。
问:那为什么要将一个类定义在另一个类里面呢?清清爽爽的独立的一个类多好啊!!
答:内部类的主要作用如下:
1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据
3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便
问:内部类有几种呢?
答:内部类可分为以下几种:
- 成员内部类
- 静态内部类
- 方法内部类
- 匿名内部类
// 创建外部类对象
HelloWorld hello = new HelloWorld();
// 创建内部类对象 (静态内部类就可以直接创建了)
Inner i = hello.new Inner();
// 调用内部类对象的方法
i.show();
插播一条非广告: javac命令之后 形成字节码文件
6. Java中的成员内部类
System.out.println("外部类中的name:" + HelloWorld.this.name );
7. Java中的静态内部类
(1)、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问
(2)、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员
(3)、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();
8. Java中的方法内部类
方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。
一定要注意哦:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。
9. 继承 extends ---------------------------------------------------------------------------------
主函数里面:
结果:
这就说明当我们创建一个子类对象的时候,初始化顺序为:
10. 方法的重写
插播两条:方法重写与方法重载不同,方法的重载是方法的参数个数或种类或顺序不同,方法名相同。
方法重写是要注意权限的问题,子类中的权限不能小于父类的权限,当父类的权限为private时,子类无法继承。也就无法产生所谓的重写。(修饰符高低:private < 默认修饰符 < public)
11. final关键字
12. super关键字
如果子类的构造方法中没有显示调用父类的构造方法,则系统默认调用父类无参的构造方法。
如果显示的调用构造方法,必须在子类的构造方法的第一行。
子类的构造的过程当中必须调用其父类的构造方法。
如果子类的构造方法中既没有显示的调用父类的构造方法,而父类又没有午参的构造函数,则编译出错。
13. Java中的Object类I
(1) toString()方法
所以要输出对象的属性,就需要重写toString()方法
(2) equals()方法
比较的是对象的引用是否指向同一块内存地址。
== 比较两个引用类型的时候也是比较的地址值
两个对象的类型是否相同。
重写完之后就是比较的是比较字符串中所包含的内容是否相同。
14. 多态 (继承是多态的实现基础) ----------------------------------------------------------
(1) 引用多态
(2) 方法多态
就是new一个父类的子类对象。
15. 多态中引用类型转换
(1)向上类型转换(隐式/自动类型转换),是小类型到大类型的转换
(2)向下类型转换(强制类型转换),是大类型到小类型
(3)instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题。
16. Java中的抽象类
应用场景:
作用:
使用规则:
abstract class
17. 接口
若我们没有写,系统会自动给我们加上。
匿名内部类1:
匿名内部类2:
18. UML (这个部分好像比较薄弱)
用例图:
序列图:
类图:(类和类之间的关系)
- 表示私有的
+ 表示公有的
PowerDesigner 会根据我们设计的图形自动生成Java 代码。
19. 人类 中国人 美国人
(1) 人类里面写了say 中国人和美国人继承
(2) 人类定义为抽象类 public abstract class APerson
我们使用抽象类来描述一个类的规则更合理一些。
20. 项目练习
项目分析:
(1) 数据模型分析
(2) 业务模型分析
(3) 显示和流程分析
参考系统:
------------------------------------------- 第二季 END ------------------------------------------
- 异常 简介
捕获到的异常可以在当前方法的catch块中处理,也可抛出给调用者去处理。
22. Java中字符串的不变性
23. Java中String类的常用方法
24. Java中的String类常用方法
==: 判断两个字符串在内存中首地址是否相同,即判断是否是同一个字符串对象
equals(): 比较存储在两个字符串对象中的内容是否一致
PS:字节是计算机存储信息的基本单位,1 个字节等于 8 位, gbk 编码中 1 个汉字字符存储需要 2 个字节,1 个英文字符存储需要 1 个字节。所以我们看到上面的程序运行结果中,每个汉字对应两个字节值,如“学”对应 “-47 -89” ,而英文字母 “J” 对应 “74” 。同时,我们还发现汉字对应的字节值为负数,原因在于每个字节是 8 位,最大值不能超过 127,而汉字转换为字节后超过 127,如果超过就会溢出,以负数的形式显示。(关于编码,我们在后面课程中会详细介绍,小小期待哦~~)
str.charAt(i) ==’a’ 字符比较用等号
25. Java中的StringBuilder类的常用方法
26. Java 中的包装类
27. Java中基本类型和字符串之间的转换
其中,基本类型转换为字符串有三种方法:
1. 使用包装类的 toString() 方法
2. 使用String类的 valueOf() 方法
3. 用一个空字符串加上基本类型,得到的就是基本类型数据对应的字符串
将字符串转换成基本类型有两种方法:
1. 调用包装类的 parseXxx 静态方法
2. 调用包装类的 valueOf() 方法转换为基本类型的包装类,会自动拆箱
28. 使用Date和SimpleDateFormat类表示时间
在程序开发中,经常需要处理日期和时间的相关数据,此时我们可以使用 java.util 包中的 Date 类。这个类最主要的作用就是获取当前时间,我们来看下 Date 类的使用:
使用 Date 类的默认无参构造方法创建出的对象就代表当前时间,我们可以直接输出 Date 对象显示当前的时间,显示的结果如下:
其中, Wed 代表 Wednesday (星期三), Jun 代表 June (六月), 11 代表 11 号, CST 代表 China Standard Time (中国标准时间,也就是北京时间,东八区)。
从上面的输出结果中,我们发现,默认的时间格式不是很友好,与我们日常看到的日期格式不太一样,如果想要按指定的格式进行显示,如 2014-06-11 09:22:30 ,那该怎么做呢?
此时就到了 java.text 包中的 SimpleDateFormat 类大显身手的时候了!!可以使用 SimpleDateFormat 来对日期时间进行格式化,如可以将日期转换为指定格式的文本,也可将文本转换为日期。
1. 使用 format() 方法将日期转换为指定格式的文本
代码中的 “yyyy-MM-dd HH:mm:ss” 为预定义字符串, yyyy 表示四位年, MM 表示两位月份, dd 表示两位日期, HH 表示小时(使用24小时制), mm 表示分钟, ss 表示秒,这样就指定了转换的目标格式,最后调用 format() 方法将时间转换为指定的格式的字符串。
运行结果: 2014-06-11 09:55:48
2. 使用 parse() 方法将文本转换为日期
代码中的 “yyyy年MM月dd日 HH:mm:ss” 指定了字符串的日期格式,调用 parse() 方法将文本转换为日期。
运行结果:
一定要注意哦:
1、 调用 SimpleDateFormat 对象的 parse() 方法时可能会出现转换异常,即 ParseException ,因此需要进行异常处理
2、 使用 Date 类时需要导入 java.util 包,使用 SimpleDateFormat 时需要导入 java.text 包
任务
亲, Date 类和 SimpleDateFormat 类的使用您掌握了吗?让我们来检验下吧。
功能:实现将日期转换为指定格式的文本,将文本转换为日期
请在编辑器中的第 15、18、27 行中将代码填写完整
运行结果:
29. Calender类的应用
Date 类最主要的作用就是获得当前时间,同时这个类里面也具有设置时间以及一些其他的功能,但是由于本身设计的问题,这些方法却遭到众多批评,不建议使用,更推荐使用 Calendar 类进行时间和日期的处理。
java.util.Calendar 类是一个抽象类,可以通过调用 getInstance() 静态方法获取一个 Calendar 对象,此对象已由当前日期时间初始化,即默认代表当前时间,如 Calendar c = Calendar.getInstance();
那么如何使用 Calendar 获取年、月、日、时间等信息呢?我们来看下面的代码:
其中,调用 Calendar 类的 getInstance() 方法获取一个实例,然后通过调用 get() 方法获取日期时间信息,参数为需要获得的字段的值, Calendar.Year 等为 Calendar 类中定义的静态常量。
运行结果:
Calendar 类提供了 getTime() 方法,用来获取 Date 对象,完成 Calendar 和 Date 的转换,还可通过 getTimeInMillis() 方法,获取此 Calendar 的时间值,以毫秒为单位。如下所示:
运行结果:
关于如何获取昨天的当前时刻:
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
Date time = cal.getTime();
System.out.println(time);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
String date = sdf.format(time);
System.out.println(date);
}
30. 使用Math类操作数据
Math 类位于 java.lang 包中,包含用于执行基本数学运算的方法, Math 类的所有方法都是静态方法,所以使用该类中的方法时,可以直接使用类名.方法名,如: Math.round();
运行结果:
31. 集合框架
Collection接口
List 排列有序,可以重复
Queue 排列有序,可以重复
Set 排列无序,不可重复
Map接口
32. Collection接口
关于下标越界
list.addAll(集合对象);把一个集合添加到另一个集合的队尾位置
list.addAll(index,集合对象);把一个集合添加到另一个集合的指定位置
Arrays.asList(数组):把一个数组转换成List集合
list的remove方法 removeall方法
33. 泛型
34. set方法只能用foreach方法和iterator方法,不能使用set方法,set是无序的不可重复的。
35. Map和HashMap的简介
查看API文档就好
一般来说HashMap的存取顺序是不一致的,但是LinkedHashMap可以做到这点,TreeMap也可以做到
Map中通过containsKey()方法和containsValue()方法来判断键和值是否存在
Map 中对对象进行了 Key 标记,通过 get(Key)可以取得对应的对象
Map 的containsValue()方法的参数是 Object 对象,因为Map 的 Value 值是对象元素
Map 的containsKey()方法取得 Map 映射的 Key 值
List中的contains()方法借Map中的containsValue()方法调用equals()方法来进行比较。所以要重写Hashcode和equals方法
跟 List 的 contains()方法一样,Map 中的 containsValue()方法也会调用每个 Value 值的 equals()方法去和参数对象比较
36. Arrays工具类 Collections工具类