简单讲一下枚举:枚举指由一组固定的常量组成的类型,实用关键字enum定义,语法如下
访问修饰符 enum enumName{ ... } 括号中的枚举常量用逗号隔开
顺便一提,枚举中的常量也是变量,所以遵循普通变量的命名规则,不可以用数字等开头
例:public enum Sex{ MAN,WOMAN}
枚举的好处:
1.枚举可以使代码更易于维护,有助于确保为变量指定合法的,期望的值。
2.枚举更易于编程时输入,使用枚举赋值,只需要输入枚举名,然后输入一个点,就能将所有的值显示出来。
例:对象名.方法名(Sex.MAN);
3.枚举使代码更清晰,允许用描述性的名称表示数据,使用时直观方便。
Java语言是面向对象的,但是Java中的基本数据类型却不是面向对象的,为了解决这个不足,在设计类时为每一个基本数据类型设计了一个对应的类,成为包装类。包装类位于java.lang包中。
除了char的包装类为Character,int的包装类为Integer外,其余基本数据类型的首字母大写即为包装类。
包装类的用途:
包装类作为和基本数据类型对应的类存在,方便对象的操作。
包装类包含每种基本数据类型的相关属性,如最大值最小值等,以及相关的操作方法。
创建一个包装类对象:
Integer intValue =new Integer( 21 ) ;
或者:Integer intValue =new Integer(" 21 ") : 【这种形式不能创建Character类型的包装类对象,括号中的双引号要改成单引号】
使用包装类的valueOf()方法,也可以接受基本数据类型数据和字符串作为参数并返回包装类的对象。
Integer intValue =Integer.valueOf( "21" ) ;
包装类转换为基本数据类型:
使用typeValue()方法,type为基本数据类型,如:Integer integerId=new Integer(25); int intId =integerId.intValue( ) ;
不过在Java SE 5.0版本之后不需要编码实现基本数据类型和包装类之间的转换,编译器会自动完成。
基本数据类型转换为包装类也叫装箱,包装类转换为基本数据类型也叫拆箱。自动转换则为自动拆装箱。
例:Integer intObject = 5 ; int intValue = intObject ;
java.lang.Math类中所有方法都是静态的,也提供了一些基本数学运算和几何运算的方法。如绝对值(abs),最大值(max),随机值(random)等
随机数:int random =(int)(Math.random( )*10) ; 产生0~9间的随机数。
Java中,字符串被作为String类对象处理,所在的包自动导入所有的程序。
String s="Hello World" ; 或者 String s = new String("Hello World");
常用方法:
s.length();返回字符串的长度。
1.equals(2);比较两个字符串的值是否相同,返回值为布尔类型。(equals比较的是字符串,大小写也在区分范围内,而==比较的是两个字符串对象在内存中的地址,就是判断是否为指向同一个地址的对象。)
1.equalsIgnoreCase(字符串2);忽略大小写的比较。(toLowerCase( )转换字符串中的英文字符为小写。toUpperCase( )转换字符串中的英文为大写)
1.concat(字符串2) ;将字符串2拼接到字符串1后面。还有一种方法使用较多:String s = 1 + “2”;
方法 | 说明 |
public int indexOf (int ch) | 搜索并返回第一个出现字符ch(或字符串value)的位置 |
public int indexOf(String value) | 同上 |
public int lastIndexOf(int ch ) | 搜索并返回最后一个出现字符ch(或字符串value)的位置 |
public int lastIndexOf(String value) | 同上 |
public String substring(int index) | 提取从指定索引位置开始的部分字符串 |
public String substring(int begin,int end) | 提取begin和end之间的字符串 |
public String trim( ) | 截取字符串前后的空格后返回新的字符串 |
s.split( );拆分字符串,返回值用数组接收。括号内填写根据什么去拆分,也可以限制返回数组中的元素个数。
String s="长亭外 古道边 芳草碧连天";
String []b =s.split(" ",2);
for (int i = 0; i
操作字符串时,下标从0开始,1个空格也算一个位置,使用截取方法时,截取的字符串包含起始位置但是不包含结束位置。
StringBuffer类和StringBuilder类:
String类在操作字符串时会根据所用方法产生一个新的字符串,所以在需要对字符串进行连续操作时,使用StringBuffer类可以大大提高执行效率。
StringBuffer类和StringBuilder类常用方法:
创建对象:StringBuffer s =new StringBuffer("字符串");
toString( );转换为String类型。 String s =s1.toString( );
append( ); 在字符串后追加字符串后并返回。追加的字符串可以是任意类型。
insert( ) ; 将参数插入到字符串指定位置并返回。字符串.insert(位置,参数);
String、StringBuffer、StringBuilder:
String是不可变的对象,每次对String类型进行改变时等同于生成了一个新的String对象,然后指向新的String对像。
StringBuffer是可变的字符串,每次操作都在对对象本身操作,所以,在频繁操作同一字符串时最好使用StringBuffer。
StringBuild等价于StringBuffer,区别在于StringBuffer是线程安全的,而StringBuilder是单线程的,不提供同步,理论上效率更高。
Date类:
Data data =new Data( ) ; 使用系统当前时间创建日期对象。获得的时间为西方时间对象。
Calendar类:
可以看做Date类的增强版。该类是抽象类,可以通过getInstance( )方法创建对象。使用方法获得的月份+1,因为国外从0开始计数。使用方法获得的星期几-1,因为国外的周日为国内的周一。
DataFormat类:
也是一个抽象类,提供了多种格式化和解析时间的方法。使用较多的是它的子类SimpleDateFormat。
使用date获取的时间并不是我们传统看到的格式,所以使用SimpleDateFormat中的方法构造一个格式转化器,将获得的时间转化为我们熟知的格式。 代码中的sum1就可以说是格式转换器。
Date date=new Date();
SimpleDateFormat sum1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String sum2=sum1.format(date);
System.out.println(sum2);
Random类用于生成随机数。Random类的构造方法有两种重载方式:Random()和Random(long seed)。第二种方式可以在创建对象时放一个种子进去,如果用同一个种子值来初始化两个Random对象,每个对象调用相同的方法,那么得到的随机数也是相同的。
产生随机数常用方法为 nextInt(int n);返回值是0~(n-1)的随机int值。
练习:1.从控制台输入字符串,字符串的长度必须是6;如果输入的字符串长度不等于6则重新输入。
Scanner input=new Scanner(System.in);
boolean flag=false;
String s;
do{
System.out.println("请输入长度为6的字符串");
s=input.next();
if(s.length()==6){
flag=true;
}
}while(!flag);
System.out.println("程序退出,您输入的是"+s);
2 .对录入的信息进行有效性验证。录入会员生日时,形式必须是“月/日”,录入的密码必须在6~10位之间;允许用户重复输入,直到输入正确为止。(简单版,需要扩展到详细的天数等可以自己再加)
Scanner input=new Scanner(System.in);
Date date=new Date();
SimpleDateFormat date1=new SimpleDateFormat("MM/dd");
date1.format(date);
boolean flag=false;
String s;
do{
System.out.print("请输入会员生日<月/日>:00/00");
s=input.next();
if(s.indexOf("/")==2){
String [] md=s.split("/");
int month=Integer.parseInt(md[0]);
int day=Integer.parseInt(md[1]);
if((month>0&&month<=12) &&(day>0&&day<=31)){
System.out.println("该会员的生日为:"+s);
flag=true;
}else{
System.out.println("输入月份或日期不正确");
}
}else{
System.out.println("输入格式不正确");
}
}while(!flag);
boolean fla=false;
String s1;
do{
System.out.print("请输入会员密码<6-10位>");
s1=input.next();
if(s1.length()>=6&&s1.length()<=10){
System.out.println("该会员的密码为:"+s1);
fla=true;
}else{
System.out.println("密码长度不符合要求");
}
}while(!fla);
3.创建会员账号,会员编号为随机生成的4位数字,创建成功后显示创建的会员信息。
Scanner input=new Scanner(System.in);
System.out.println("请输入会员姓名");
String name=input.next();
String sex;
while (true){
System.out.println("请输入会员性别(男/女)");
sex=input.next();
if(sex.equals("男")||sex.equals("女")){
break;
}else{
System.out.println("性别输入有误,请重新输入。");
}
}
int age;
while (true){
System.out.println("请输入年龄");
age=input.nextInt();
if(age>0&&age<=100){
break;
}else{
System.out.println("年龄输入不正确,请重新输入");
}
}
System.out.println("创建会员成功!");
Random random=new Random();
Integer id=0;
while (true){
id=random.nextInt(10000);
if(id.toString().length()==4){
break;
}
}
System.out.println("会员编号"+id);
System.out.println("会员详细信息");
System.out.println(name+"\t"+sex+"\t"+age);