枚举:
枚举指由一组固定的常量组成的类型
[Modifier] enum enumName{
enumContantName1
[,enumConstantName...[;]]
// [field, method]
}
enum:定义枚举的关键字
enumName:枚举的名字
底下的大括号里面是枚举里定义的常量
枚举里也可以有属性和方法
例如:
public enum Genders{ 【性别枚举】
Male, Female
public class Student{
public Genders sex; 【Genders是枚举类型的变量】
再给sex赋值时只能赋Male或者Female:
Student stu=new Student();
stu.sex=Genders.Male; 【一点就只能点出Male或者Female】
stu.sex="你好"; 【赋值“你好”就是错误的】
Java API:
常用Java APl:
java.Iang 【太常用所以系统默认导入,除了long之外的包全都必须要手动导入】
Enum、包装类、Math、String、StringBuffer、System……
java.util 【Java工具包:Scanner,集合,】
java.io 【文件输出流】
java.sql 【数据库】
………
学习方法:帮助文档
包装类:
包装类把基本类型数据(包装一下)转换为对象
【每个基本类型在java.lang包中都有一个相应的包装类】
包装类有何作用:
- 提供了一系列实用的方法
- 集合不允许存放基本数据类型数据,存放数字时,要用包装类型
小写变大写就可以变成包装类
特别记忆:
char ---》 Character
int ---》 Integer
(知道就可以)
方法一:包装类的构造方法((1)把基本数据类型变成包装类;(2)把字符串变成包装类):
- 所有包装类都可将与之对应的基本数据类型作为参数,来构造它们的实例
【public Type (type value )】如:Integer i = new Integer(1);
int i = 9;
Integer i1 = new Integer(i);
Double i2 = new Double(9.8);
Boolean i3 = new Boolean(true);
Character i4 = new Character('a');
- 除Character类外,其他包装类可将一个字符串作为参数构造它们的实例
【public Type (String value)】如:Integer i = new Integer("123");
Integer j1 = new Integer("4");
Double j2 = new Double("9.8");
Boolean j3 = new Boolean("true");
注意:
- Number类型的包装类,当用字符串作为包装类时,这个字符串不能是null,而且必须可以变成数字才可以继续进行,否则编译会通过,但是运行就会报出NumberFormatException异常。
- 当用字符串做Boolean类型的参数赋值作为包装类时只要是TRUE这四个字母(不论大小写)最后返回的就是true,但是一旦是别的字符,就会返回false。
方法二:包装类转换成基本类型【XXXValue()】
Integer i =new Integer(25);
int j=i.intValue();
方法三:基本类型转换成字符串【(1)toString;(2)+ ””】:
toString()以字符串形式返回包装对象表示的基本类型数据【基本类型->字符串】
String sex=Character.toString(‘男’);
String id=Integer.toString(25);
或者:
String sex = ‘男’+ “”;
String id = 25 + “”;
方法四:字符串变回成基本类型【parseXXX();Character除外】(重点记忆)
parseXXX():把字符串转换为相应的基本数据类型(Character除外)【字符串->基本类型】
int num = Integer.parselnt("36");
boolean bool = Boolean.parseBoolean("false");
parseXXX():【public static type parseType (String type)】
方法五:(1)把基本数据类型变成包装类;(2)把字符串变成包装类【XXX.valueOf()】
- 所有包装类都有如下方法(基本类型->包装类)
【public static Type valueOf(type value)】如:Integer intValue = Integer.valueOf(21);
- 除Character类外,其他包装类都有如下方法(字符串->包装类)
【public static Type valueOf(String s)】如:Integer intValue = Integer.valueOf("21");
总结:
- 包装类:Integer,Double,Float,Byte,Character,Long,Short
- 构造方法和XXX.valueOf()都可以把基本数据类型变成包装类或者把字符串变成包装类(但是把字符串变成包装类时都必须在Character除外的情况下进行)
- XXXValue()可以把包装类转换成基本类型
- parseXXX()方法Character除外可以把字符串变回成基本类型
- toString方法和+“”方法可以把基本类型转换成字符串
装箱和拆箱:
基本类型和包装类的自动转换
Integer intObject= 5;
int intValue = intObject;
装箱:基本类型转换为包装类的对象
拆箱:包装类对象转换为基本类型的值
包装类的特点:
- 所有的包装类都是final类型的
- JDK1.5后,允许基本数据类型和包装类型进行混合数学运算
- 包装类并不是用来取代基本数据类型的【在基本数据类型需要用对象表示时使用,比如集合】
Math类:
java.lang.Math类提供了常用的数学运算方法和两个
静态常量E (自然对数的底数)和PI (圆周率)
Math.abs(-3.5); //返回3.5
abs 求绝对值
Math.max(2.5, 90.5); //返回90.5
Max取最大值
int random = (int) (Math.random() *10); //生成一个0-9之 间的随机数
Random类:
java.util.Random类
Random rand=new Random(); //创建一个Random对象
for(int i=0;i<20;++){ //随机生成20个随机整数,并显示
int num=rand.nextInt(10); //返回下一个伪随机数,整型的(带参不带参都可以)
System.out.println("第" +(i+1)+"个随机数是: "+num);
注意:
用同一个种子值来初始化两个Random对象,然后用每个对象调用相同的方法,得到的随机数也是相同的.
String类:
使用String对象存储字符串【字符串存在字符串池里,因为字符串太常用了所以所有一样的字符串都会调用同样的字符串,所以在字符串池中的字符串对象都是一样的】
String s = "Hello World";
String s = new String();
String s = new String("Hello World");
String类位于java.lang包中,具有丰富的方法
计算字符串的长度、比较字符串、连接字符串、提取字符串
length()方法:
String类提供了length()方法,确定字符串的长度,返回字符串中的字符数
注意其与数组的length【属性】的区别
pwd.length()<6
equals()方法:
String类提供了equals( )方法,比较存储在两个字符串对象的内容是否一致
userName.equals("Tom")
equals()方法比较原理:
equals(): 检查组成字符串内容的字符是否完全一致(每一个字符串的每一个字符逐次比较,全部完全一样才返回true)。
==:判断两个字符串在内存中的地址,即判断是否是同一个字符串对象。
创建了几个对象的问题:
String str1 = "hello";
String str2 = new String("Hello");
System.out.println(str1.equals(str2)); //false
System.out.println(str1 == str2); //false
创建了3个对象字符串池里创建了2个对象,堆里创建了1个对象
String str1 = "hello";
String str2 = new String("hello");
System.out.println(str1.equals(str2)); // true
System.out.println(str1 == str2); //false
创建了2个对象字符串池里创建了1个对象,堆里创建了1个对象
String s1 = "hello";
String s2 = "hello";
System.out.println(s1.equals(s2)); //true
System.out.println(s1 == s2); //true
只在字符串池里创建了1个对象
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1.equals(str2)); // true
System.out.println(str1 == str2); //false
创建了3个对象堆里创建了2个对象,字符串池里创建了1个对象
字符串比较的其他方法:
(只是生成新的字符串,并不改变原来的字符串,只有赋值时才会改变)
使用equalsIgnoreCase()方法【忽略大小写进行比较】
使用toLowerCase()方法 【全变成小写】
使用toUpperCase()方法 【全变成大写】
使用trim()方法 【去掉字符串两边的空格】
字符串连接方法:
方法1:使用“+”
方法2:使用String类的concat()方法
字符串常用提取方法:
方法名 | 说明 |
public int indexOf(int ch) | 搜索第一个出现的字符ch (或字符串value),如果没有找到,返回-1 |
public int indexOf(String value) | |
public int lastIndexOf(int ch) | 搜索最后一个出现的字符ch (或字符串value),如果没有找到,返回-1 |
public int lastlndexOf(String value) | |
public String substring(int index) | 提取从位置索引开始到最后的字符串部分 |
public String substring (int beginindex, int endindex) | 提取beginindex和endindex 之间的字符串部分 |
public String trim() | 返回一个前后不含任何空格的调用字符串的副本 |
重点记忆:
indexOf【搜索第一个出现的字符】;
lastlndexOf【搜索最后一个出现的字符】(空格也算一个位置,多少个空格算多少个位置!!!)
substring【截取字符串】(从第几个位置开始截取包含起始的这个位置)
substring(int beginindex, int endindex)【截取字符串段】(截取时,包含起始位置,但是不包含结束位置【起始位置----结束位置-1】)
注意:
- 想要输出双引号一定要在引号的前面加\转义一下 如:”\””+name+”\”” 这样才可以
split()方法:
将这个字符按照给定的方法分割
String words = "长亭外 古道边 啦啦啦啦啦 啦啦 啦 啦";
String[] printWords = new String[20];
System.out.println("原歌词");
System.out.println(words);
printWords = words.split(" ");
System.out.println("拆分后");
for(String info : printWords)
{System.out.println(info);}
startsWith(String prefix)方法:
测试此字符串是否以指定的前缀开头。
String stest="helloabcworldabcjamabcmaryabcend";
System.out.println(stest.startsWith("h")); //true
valueOf()方法:
除Character类外,其他包装类都有如下方法(字符串->包装类)
Integer intValue = Integer.valueOf("21");
toString()方法:
以字符串形式返回包装对象表示的基本类型数据【基本类型->字符串】
String sex=Character.toString(‘男’);
String id=Integer.toString(25);
或者:
String sex = ‘男’+ “”;
String id = 25 + “”;
StringBuffer类:
对字符串频繁修改(如字符串连接)时,使用StringBuffer类可以大大提高程序执行效率
StringBuffer声明:
StringBuffer strb = new StringBuffer();
StringBuffer strb = new StringBuffer("aaa");
StringBuffer的使用:
sb.toString(); 【转化为String类型】
sb.append("**"); 【追加字符串】
sb.insert (1, "**"); 【插入字符串】
例如:
StringBuffer s1 = new StringBuffer("hello");
s1.append("world!");
System.out.println(s1);
s1.insert(1,",");
System.out.println(s1);
String s = s1.toString();
System.out.println(s);
String类和StringBuffer类的区别
- String是不可变对象【经常改变内容的字符串最好不要使用String】
- StringBuffer是可变的字符串【字符串经常改变的情况可使用StringBuffer,更高效】
- JDK5.0后提供了StringBuilder,等价于StringBuffer
操作日期时间:
如何获取当前日期?
java.util.Date类:表示日期和时间
【提供操作日期和时间各组成部分的方法】
java.text.SimpleDateFormat类:
【用于定制日期时间的格式】
//创建日期对象
Date date = new Date();
//定制日期格式
SimpleDateFormat formater = new SimpleDateFormat("yyyy - MM - dd HH:mm:ss");
String now = formater.format(date);
System.out.println(now);
Calendar类表示日期和时间:
抽象类:java.util.Calendar:用于设置和获取日期/时间数据的特定部分
Calendar类提供一些方法和静态字段来操作日历:
方法或属性 | 说明 |
int get(int field) | 返回给定日历字段的值 |
MONTH | 指示月 |
DAY_OF_MONTH | 指示一个月中的某天 |
DAY_OF_WEEK | 指示一个星期中的某天 |
Calendar t = Calendar.getInstance();
System.out.println(t.get(Calendar.YEAR)+"-"+(t.get(Calendar.MONTH)+1)+"-"+t.get(Calendar.DAY_OF_MONTH));
System.out.println("今天是星期"+(t.get(Calendar.DAY_OF_WEEK)-1));
- 因为Calendar类是抽象类所以不能new出来,想要调用要使用.getInstance()方法
- 因为Calendar类采用的时间格式是西方的时间格式,所以当输出月时会比中国的月少一月(使用时要使用:.get(Calendar.MONTH)+1),当输出星期几时会比中国的星期几多一天(使用时要使用:.get(Calendar.DAY_OF_WEEK)-1)