一.String,StringBuffer,StringBuilder
1.String是一个不可变的常量,每次修改都会产生新的对象
2.StringBuffer,StringBuilder都是可变字符序列,是字符串的增强版。
3.StringBuffer,StringBuilder作用:主要是当业务大量修改字符串的时使用
4.区别:StringBuffer是线程安全,StringBuild非线程安全
二.自动拆装箱
1.基本类型转换为封装类型为装箱过程,反之则是拆箱过程
2.八种基本数据类型对应的封装类型
Byte b;//byte
Short s;//short
Integer i ;//int
Long l;//long
Float f;//float
Double d;//double
Character c;//char
Boolean bool;//boolean
3.从字符串转换为基本据类型,都是由其封装类型的valueOf()方法实现
例如:int num4 = Integer.valueOf("12345");
float f2 = Float.valueOf("3.1415");
一.内部类
1.成员内部类 语法
public class InnerDemo{
class Inner{}
}
2.特点:
a.会产生多个class文件,文件名为:InnerDemo$Inner.class
b.内部类可以直接访问外部类的所有属性和方法包括私有的
c.外部类不能直接访问内部类的成员,要通过内部类的实例来调用
d.创建内部类的语法:InnerDemo.Inner in = new InnerDemo().new Inner();
e.所有的内部类都不能和外部类重名
f.内部类不能定义静态方法和属性,但是可以定义静态常量
二.内部匿名类
1.语法: new interface/superClass(){//实体}
2.特点:
a.没有名字
b.匿名类也会产生class文件,文件名是后缀加上1,2,3,4...
c.只能一次性使用
d.匿名类中不能定义静态代码块
三.局部内部类
1.定义在方法体或者代码块中
2.特点:
a.其作用范围只能是在该方法体中
b.不能用任何修饰符
c.也会产生类文件
枚举
1.定义:是一个类,可以有属性和方法,但其构造方法是私有的,外部不能访问
2.特点:不能直接构造,用类名.枚举值的方式创建枚举对象
3.用法:代替接口来定义常量
4.优势:可以对常量多定义,可以在获取常量值时加入逻辑代码,功能比接口更强大
5.语法:见案例
练习:
假设银行账户状态为:
0.开户
1.激活
2.正常使用
3.冻结
4.睡眠
5.注销
请设计枚举类型保存这些状态
要求:程序中可以随时调用状态值,和查看状态属性
思路:1枚举中有状态值属性和状态属性
2.重载枚举的构造方法
3.在get中添加逻辑代码
/*
* 练习:假设银行账户状态为:
0.开户
1.激活
2.正常使用
3.冻结
4.睡眠
5.注销
请设计枚举类型保存这些状态
要求:程序中可以随时调用状态值,和查看状态属性
思路:1枚举中有状态值属性和状态属性
2.重载枚举的构造方法
3.在get中添加逻辑代码
*/
package com.class1114;
public class Class1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(AccountState.OPENaccount.getKey());
System.out.println(AccountState.OPENaccount.getValue());
}
}
enum AccountState{
OPENaccount(0),ACTIVATEaccount(1),NORMALaccount(2),BLOCKEDaccount(3),DORMANCYaccount(4),LOGOUTaccount(5);
AccountState(int key){
this.key=key;
}
private int key;
private String value;
public int getKey() {
return key;
}
public void setKey(int key) {
this.key = key;
}
public String getValue() {
switch(key){
case 0:
value="开户";
break;
case 1:
value="激活";
break;
case 2:
value="正常使用";
break;
case 3:
value="冻结";
break;
case 4:
value="睡眠";
break;
case 5:
value="注销";
break;
default:
value="";
}
return value;
}
public void setValue(String value) {
this.value = value;
}
}
日期类型:
Date SimpleDateFormat Calendar
一.date常用方法
1.构造方法
2.getTime():获取时间的毫秒数
二.SimpleDateFormat常用方法
1.构造方法
2.formart:日期转字符串
3.parse:字符串转日期
三.Calendar常用方法
1.getInstence():获取日历对象
2.set:设置日历的字段值
3.get:获取日历的字段值
4.add:在日历的字段值上增加数值
5.getTime:返回日历的日期对象
练习
1.用java程序计算1到1000000的累加值,求这段程序运行的时间是多少?
2.打印输出当前时间
格式:2012年1月1日 23点33分56秒234毫秒 时区:XXXX
3.输入字符串 2012-12-12 2:21:24,把该字符串转换成日期对象
/*
* 1.用java程序计算1到1000000的累加值,求这段程序运行的时间是多少?
*/
package com.class1114;
import java.util.Date;
public class Class3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Date d1=new Date();
long t1=d1.getTime();
int sum=0;
for(int i=1;i<=1000000;i++){
sum+=i;
}
Date d2=new Date();
long t2=d2.getTime();
long t=t2-t1;
System.out.println(t);
}
}
/*
* 2.打印输出当前时间
格式:2012年1月1日 23点33分56秒234毫秒 时区:XXXX
*/
package com.class1114;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Class2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Date d=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒SSS毫秒 时区:ZZZZ");
String str=sdf.format(d);
System.out.println(str);
}
}
/*
* 3.输入字符串 2012-12-12 2:21:24,把该字符串转换成日期对象
*/
package com.class1114;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Class4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Date d=new Date();
String str="2012-12-12 21:21:24";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
d=sdf.parse(str);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
System.out.println(d);
}
}
例子
package com.demo1114;
import org.junit.Test;
import com.demo1114.Innerclass.Inner;
public class Demo {
@Test
public void test(){
StringBuffer sb = new StringBuffer("hello");
sb.append(" hwua");
sb.insert(5, " are you ");
System.out.println(sb.toString());
}
//拆装箱
@Test
void test2(){
int i = Integer.valueOf("123");
Integer number = 100;
int num2 = number;
}
public static void main(String[] args) {
Demo d = new Demo();
d.test2();
Inner in = new Innerclass().new Inner();
Iinter ii = new Iinter() {
@Override
public void hello() {
System.out.println("你好");
}
};
ii.hello();
}
}
class Innerclass{
String name;
private int age;
class Inner{
String sex;
void hello(){
age = 1;
name="sds";
}
}
void test(){
Inner in = new Inner();
in.sex = "";
class TestInner{
String hh;
}
}
}
interface Iinter{
void hello();
}
package com.demo1114;
import org.junit.Test;
public class EnumDemo{
public static void main(String[] args) {
System.out.println(Color.BLUE.getValue());
System.out.println(Color.BLUE.getKey());
}
}
enum Color {
RED(1),YELLOW(2),BLUE(3),GREEN(4),BLACK(5);
Color(int key){
this.key = key;
}
int key;
String value;
public int getKey() {
return key;
}
public void setKey(int key) {
this.key = key;
}
public String getValue() {
if(key==1){
return "红色";
}else if(key==2){
return "黄色";
}else if(key==3){
return "蓝色";
}else if(key==4){
return "绿色";
}else if(key==5){
return "黑色";
}
return "";
}
public void setValue(String value) {
this.value = value;
}
}
package com.demo1114;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.junit.Test;
public class DateDemo {
@Test
void test1(){
Date date = new Date();
System.out.println(date);
}
//日期和字符串的转换
//2012年1月1日 23点33分56秒234毫秒 时区:XXXX
@Test
public void test2(){
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒SSS毫秒 时区:z");
String str = sdf.format(date);
System.out.println(str);
}
public void test3() throws ParseException{
String str = "2017-11-14 23:23:23";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(str);
System.out.println(date.toString());
}
public static void main(String[] args) {
DateDemo dd = new DateDemo();
try {
dd.test3();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package com.demo1114;
import java.util.Calendar;
public class CalenderDemo {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
c.add(Calendar.YEAR, -3);
c.get(Calendar.DAY_OF_WEEK);
System.out.println(c.get(Calendar.DAY_OF_WEEK));
}
}
作业1
1.输入文件名,判断该文件是不是java文件
2.写一个方法,实现对敏感字的替换返回替换后的字符串 String replaceWord(String src,String word,String desc)
src:原字符串
word:敏感词
desc:替换后的词
3.将下列诗句替换格式:
白日依山尽,黄河入海流,欲穷千里目,更上一层楼。
替换为:
白日依山尽,
黄河入海流,
欲穷千里目,
更上一层楼。
4.写一个方法,判断字符串中字符出现的次数 int countChar(String src,String char)
src:原字符串
char:出现的字符
5.判断登录名和密码是否正确,登录名大小写忽略
登录名为:admin
密码为:sa123456
/*
* 1.输入文件名,判断该文件是不是java文件
*/
package com.class1113;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.println("请输入文件名");
String s=sc.next();
if(s.endsWith(".java")){
System.out.println("该文件是java文件");
}else{
System.out.println("不知道");
}
}
}
/*
* 2.写一个方法,实现对敏感字的替换返回替换后的字符串
* String replaceWord(String src,String word,String desc)
src:原字符串
word:敏感词
desc:替换后的词
*/
package com.class1113;
public class Test2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Test2 t2=new Test2();
String ss;
ss=t2.replaceWord("woshishuiawo", "wo", "ni");
System.out.println(ss);
ss=t2.replaceWord("我是中国人,我爱天空,天空是我亲祖宗", "天空", "xx");
System.out.println(ss);
}
public String replaceWord(String src,String word,String desc){
String s="";
s=src.replaceAll(word, desc);
return s;
}
}
/*
* 3.将下列诗句替换格式:
白日依山尽,黄河入海流,欲穷千里目,更上一层楼。
替换为:
白日依山尽,
黄河入海流,
欲穷千里目,
更上一层楼。
*/
package com.class1113;
public class Test3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String ss="白日依山尽,黄河入海流,欲穷千里目,更上一层楼。";
String[] s1=ss.split(",");
for(int i=0;i<s1.length;i++){
if(i!=s1.length-1){
System.out.println(s1[i]+",");
}else{
System.out.println(s1[i]);
}
}
}
}
/*
* 4.写一个方法,判断字符串中字符出现的次数 int countChar(String src,String char)
src:原字符串
char:出现的字符
用indexof也可以
*/
package com.class1113;
public class Test4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Test4 t4=new Test4();
int s=t4.countChar("oh;asgujho;hgwo;fhoa", "g");
System.out.println(s);
}
public int countChar(String src,String char1){
int count=0;
for(int i=0;i<src.length();i++){
if(char1.charAt(0)==(src.charAt(i))){
System.out.println("xx");
count++;
}
}
return count;
}
}
/*
* 5.判断登录名和密码是否正确,登录名大小写忽略
登录名为:admin
密码为:sa123456
*/
package com.class1113;
import java.util.Scanner;
public class Test5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String id="admin";
String password="sa123456";
Scanner sc=new Scanner(System.in);
System.out.println("请输入用户名:");
String s1=sc.next();
if(id.compareToIgnoreCase(s1)==0){
System.out.println("请输入密码:");
String s2=sc.next();
if(password.compareToIgnoreCase(s2)==0){
System.out.println("登录成功!");
}else{
System.out.println("密码错误!");
}
}else{
System.out.println("用户名错误!");
}
}
}
泛型作业
自己设计一个MyMap类,模拟完成HashMap的存放数据过程
要求完成:
put(K k,V v);
get(K k);
size();
Set keySet();返回所有键的集合
ensureCapacity(int i);判断是否需要扩容
思路:
1.写一个MyEntry类,来存放键值对
class MyMap<K,V>{
MyEntry<K,V>[] mes;
int size;
}
class MyEntry<K,V>{
K k;
V v;
set/get
}
/*
* 泛型
* 自己设计一个MyMap类,模拟完成HashMap的存放数据过程
要求完成:
put(K k,V v);
get(K k);
size();
Set keySet();返回所有键的集合
ensureCapacity(int i);判断是否需要扩容
*/
package com.class1113;
import java.util.HashSet;
import java.util.Set;
public class Test6 {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyMap<Integer,String> mmp=new MyMap<>();
int i=0;
String j=i+"";
while(i<20){
System.out.println(mmp.size());
System.out.println(mmp.put(i, j));
System.out.println(mmp.get(i));
i++;
}
System.out.println(mmp.size());
}
}
class MyMap<K,V>{
MyEntry<K,V>[] mes=new MyEntry[16];
int size;
int Capacity=16;
public boolean put(K k,V v){
boolean b1=false;
MyEntry<K,V> me1=new MyEntry<>();
me1.setK(k);
me1.setV(v);
if(size>mes.length*3/4){
ensureCapacity(size);
}
for(int i=0;i<mes.length;i++){
if(mes[i]==null){
mes[i]=me1;
b1=true;
break;
}
}
return b1;
}
public V get(K k){
V vv=null;
MyEntry<K,V> me2=new MyEntry<>();
for(int i=0;i<mes.length;i++)
{
if(mes[i].getK()==k){
vv=mes[i].getV();
break;
}
}
return vv;
}
public int size(){
int num=0;
for(int i=0;i<mes.length;i++){
if(mes[i]==null){
num=i;
break;
}
}
return num;
}
public Set keyset(){
Set set=new HashSet();
for(int i=0;i<mes.length;i++){
set.add(mes[i].getK());
}
return set;
}
public boolean ensureCapacity(int i){
boolean b2=false;
if(i>mes.length*3/4){
MyEntry<K,V>[] newmes=new MyEntry[mes.length+(mes.length>>1)];
for(int j=0;i<mes.length;j++){
newmes[j]=mes[j];
}
mes=newmes;
b2=true;
}
return b2;
}
}
class MyEntry<K,V>{
private K k;
private V v;
public K getK() {
return k;
}
public void setK(K k) {
this.k = k;
}
public V getV() {
return v;
}
public void setV(V v) {
this.v = v;
}
}
/*
* 写一个泛型类
写一个泛型方法 contact(p , o)
如果实参为两个整形,返回值为两数之和
如果实参为两个字符串,返回值为两格字符串的拼接
如果实参为两个浮点型,返回值为两数之积
*/
package com.class1113;
public class Class1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
GenricitiyClass<Integer,Integer> gn1=new GenricitiyClass<>();
gn1.contact(2,5);
GenricitiyClass<String,String> gn2=new GenricitiyClass<>();
gn2.contact("hehe", "da");
GenricitiyClass<Double,Double> gn3=new GenricitiyClass<>();
gn3.contact(12.5, 23.9);
GenricitiyClass<Integer,Double> gn4=new GenricitiyClass<>();
gn4.contact(12, 23.9);
}
}
class GenricitiyClass<E,T>{
public void contact(E e,T t){
Object a=null;
if(e.getClass().toString().equals("class java.lang.Integer")&&t.getClass().toString().equals("class java.lang.Integer")){
a=(Integer)e+(Integer)t;
}else if(e.getClass().toString().equals("class java.lang.String")&&t.getClass().toString().equals("class java.lang.String")){
a=(String)e+(String)t;
}else if(e.getClass().toString().equals("class java.lang.Double")&&t.getClass().toString().equals("class java.lang.Double")){
a=(Double)e*(Double)t;
}
System.out.println(a);
}
}
作业2
1.输入年月日,输出这个日期是星期几
2.输出香港回归那一天是星期几
3.输出新中国成立和澳门回归相差多少天
4.输出今年双十一的三天前是星期几
5.输入年份月份,打印输出这个月的月历 格式如下
一 二 三 四 五 六 日
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28
/*
* 1.输入年月日,输出这个日期是星期几
*/
package com.class1114;
import java.util.Calendar;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.println("请输入某年:");
int year=sc.nextInt();
System.out.println("请输入某月:");
int month=sc.nextInt();
System.out.println("请输入某日:");
int date=sc.nextInt();
Calendar c=Calendar.getInstance();
c.set(year,month-1,date);
int d=c.get(Calendar.DAY_OF_WEEK)-1;
System.out.println("那天是星期"+d);
}
}
/*
* 2.输出香港回归那一天是星期几
* 1997.7.1
*/
package com.class1114;
import java.util.Calendar;
public class Test2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Calendar c=Calendar.getInstance();
c.set(1997, 6, 1);
int d=c.get(Calendar.DAY_OF_WEEK)-1;
System.out.println("香港回归那天是星期"+d);
}
}
/*
* 3.输出新中国成立和澳门回归相差多少天
* 1949.10.1;1999.12.20
*/
package com.class1114;
import java.util.Calendar;
public class Test3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Calendar c1=Calendar.getInstance();
c1.set(1949, 9, 1);
Calendar c2=Calendar.getInstance();
c2.set(1999, 11, 20);
long l1=c1.getTime().getTime();
long l2=c2.getTime().getTime();
long i=(l2-l1)/1000/60/60/24;
System.out.println(l1);
System.out.println(l2);
System.out.println("新中国成立和澳门回归相差"+i+"天");
}
}
/*
*4.输出今年双十一的三天前是星期几
*/
package com.class1114;
import java.util.Calendar;
public class Test4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Calendar c=Calendar.getInstance();
c.set(2017, 10, 11);
c.add(Calendar.DATE, -3);
System.out.println(c.get(Calendar.DAY_OF_WEEK)-1);
}
}
/*
* 5.输入年份月份,打印输出这个月的月历 格式如下
一 二 三 四 五 六 日
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28
*/
package com.class1114;
import java.util.Calendar;
import java.util.Scanner;
public class Test5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.println("请输入某年:");
int year=sc.nextInt();
System.out.println("请输入某月:");
int month=sc.nextInt();
Calendar c=Calendar.getInstance();
c.set(year, month-1, 1);
System.out.println("一"+"\t"+"二"+"\t"+"三"+"\t"+"四"+"\t"+"五"+"\t"+"六"+"\t"+"日");
int j=1;
//输出空格
if(c.get(Calendar.DAY_OF_WEEK)==1){
for(int i=0;i<6;i++){
System.out.print("\t");
}
}else{
while(j<c.get(Calendar.DAY_OF_WEEK)-1){
System.out.print("\t");
j++;
}
}
int i=1;
//输出日期
while(c.get(Calendar.MONTH)==month-1){
System.out.print(i+"\t");
c.add(Calendar.DAY_OF_MONTH, 1);
//换行
if(c.get(Calendar.DAY_OF_WEEK)-1==1){
System.out.println();
}
i++;
}
}
}