目录
1.基本类型
1.1储存空间
字节型 |
|
||||||
整型 |
|
||||||
浮点型 |
|
||||||
字符型 |
|
||||||
布尔型 |
|
1.2char
1.2.1 char a ='\ u0041'可表示一个汉字,基于原始的Unicode规范
1.2.2 char a = 99
一个可以直接比较:
char a = 99;
if (a < 'z' && a > 'a') {
System.out.println(a);
}
2.运算符
2.1三目运算符
布尔表达式?表达式1:表达式2
练习:
当x> 0:sgn(x)= 1;
当x = 0:sgn(x)= 0;
当x <0:sgn(x)= - 1;
输入X,输出SGN(X)的值。
public static void function04(){
System.out.println("请输入x的值:");
Scanner scan = new Scanner(System.in);
int x = scan.nextInt();
System.out.println("sgn(x)=" + (0==x?0:(x>0?1:-1)));
}
2.2运算符优先级
' {} '>' ++ '>'(强制类型转换)'>' / '>' + '>' << '>' > = '>' == '>' & '>' ^ '>' | '>' && '>' || ' >' ?: '>' = '
2.3 "equals()"与 "=="
equals
注意:equals方法不能作用于基本数据类型的变量。
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。
==
如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
如果作用于引用类型的变量,则比较的是所指向的对象的地址。
3.String
/**
* 1:输出字符串"HelloWorld"的字符串长度
* 2:输出"HelloWorld"中"o"的位置
* 3:输出"HelloWorld"中从下标5出开始第一次出现"o"的位置
* 4:截取"HelloWorld"中的"Hello"并输出
* 5:截取"HelloWorld"中的"World"并输出
* 6:将字符串" Hello "中两边的空白去除后输出
* 7:输出"HelloWorld"中第6个字符"W"
* 8:输出"HelloWorld"是否是以"h"开头和"ld"结尾的。
* 9:将"HelloWorld"分别转换为全大写和全小写并输出。
*/
public class Test01 {
public static void main(String[] args) {
String str = "HelloWorld";
test1(str);
}
public static void test1(String str){
System.out.println(str.length());
}
public static void test2(String str){
System.out.println(str.indexOf('o'));
}
public static void test3(String str){
System.out.println(str.indexOf('o', 5));
}
public static void test4(String str){
System.out.println(str.substring(0,5));//substring()内取右不取左
}
public static void test5(String str){
System.out.println(str.substring(5));
}
public static void test6(String str){
System.out.println(str.trim());
}
public static void test7(String str){
System.out.println(str.charAt(5));
}
public static void test8(String str){
System.out.println(str.startsWith("h")+"\n"+str.endsWith("ld"));
}
public static void test9(String str){
System.out.println(str.toLowerCase()+"\n"+str.toUpperCase());
}
}
4.数组
4.1创建写法
int[] arr = new int[10]; //初始化
int[] arr = {1,2,3,4,5}; //初始化并赋值
int[] arr1 = new int[] {1,2,3,4,5};
4.2数组操作代码
//复制数组
int[] aa=new int[3];
for(int i=0;i<3;i++){
aa[i]=1;
}
int[] bb=Arrays.copyOf(aa, 4);
//1 1 1 0
bb=Arrays.copyOf(aa, 4);
//数组升序快排
int[] a={1,4,-1,5,0};
Arrays.sort(a);
//二分查找
String str[] = new String[]{"ab", "cd", "ef", "yz"};//定义String型数组str
Arrays.sort(str);//对数组进行排序
int index = Arrays.binarySearch(str, 0, 2, "cd");//在制定范围内搜索元素“cd”的索引位置
//将Array转化成Set集合
Set<String> set = new HashSet<String>(Arrays.asList(stringArray));
System.out.println(set);
//[d, e, b, c, a]
//数组翻转
int[] intArray = { 1, 2, 3, 4, 5 };
ArrayUtils.reverse(intArray);
System.out.println(Arrays.toString(intArray));
//[5, 4, 3, 2, 1]
//从数组中移除一个元素
int[] intArray = { 1, 2, 3, 4, 5 };
int[] removed = ArrayUtils.removeElement(intArray, 3);//create a new array
System.out.println(Arrays.toString(removed));
//将一个int值转化成byte数组
byte[] bytes = ByteBuffer.allocate(4).putInt(8).array();
for (byte t : bytes) {
System.out.format("0x%x ", t);
}
//检查数组中是否包含某一个值
String[] stringArray = { "a", "b", "c", "d", "e" };
boolean b = Arrays.asList(stringArray).contains("a");
System.out.println(b);
// true
//连接两个数组
int[] intArray = { 1, 2, 3, 4, 5 };
int[] intArray2 = { 6, 7, 8, 9, 10 };
// Apache Commons Lang library
int[] combinedIntArray = ArrayUtils.addAll(intArray, intArray2);
//将数组中的元素以字符串的形式输出
String j = StringUtils.join(new String[] { "a", "b", "c" }, ", ");
System.out.println(j);
4.3自定义类数组
static Person[] aa = new Person[N];
for(int i=0;i<N-1;i++){
aa[i]=new Jugdment();Person();
赋值操作;
}
即必须每个类数组元素使用前都应该先初始化!
5.面向对象
5.1重载与重写
比较项目 |
重载 |
覆写/重写 |
英文名 |
Overload |
Override |
函数签名 |
只要求函数的参数个数或类型不一致,对返回值没要求 |
函数的参数个数,类型,返回值都必须完全一样。 |
发生地方 |
同一个类或者具有继承关系的两个类中 |
只能发生在继承关系的两个类中 |
访问权限 |
没有限制 |
子类覆写方法的访问权限必须大于或等于父类的方法的访问权限 |
5.2单例模式
//懒汉
public class demo {
public static void main(String[] args) {
test1 s = test1.get();
System.out.println(s);
}
}
class test1 {
private static test1 s = new test1();
public static test1 get() {
return s;
}
}
//饿汉(推荐)
public class demo1 {
public static void main(String[] args) {
test2 s = test2.get();
System.out.println(s);
}
}
class test2 {
private static test2 s;
public static test2 get() {
if (s == null) {
s = new test2();
}
return s;
}
}
//懒汉式是延时加载, 懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的,
他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建。
5.3抽象类与接口
抽象类是用来捕捉子类的通用特性的。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。
public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {
abstract void service(ServletRequest req, ServletResponse res);
}
//继承抽象类,实现抽象方法
public class HttpServlet extends GenericServlet {
void service(ServletRequest req, ServletResponse res) {
// implementation
}
}
接口的英文抽象艺术方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法接口。只是一种形式,接口自身不能做任何事情。
public interface Externalizable extends Serializable {
void writeExternal(ObjectOutput out) throws IOException;
void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
}
//继承并实现接口的方法
public class Employee implements Externalizable {
int employeeId;
String employeeName;
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeInt(employeeId);
out.writeObject(employeeName);
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
employeeId = in.readInt();
employeeName = (String) in.readObject();
}
}
什么时候使用抽象类和接口
-
如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
-
如果你想实现多重继承,那么你必须使用接口。由于Java的不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
-
如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。
6.一些实用类
6.1Date类
//1.日期格式化输出
public static void name1() {
Date aaData = new Date();
DateFormat aa = new SimpleDateFormat("yyyy-MM-dd HH:mm");
String string = aa.format(aaData);
System.out.println(string);
}
//2018-07-19 21:35
//2.用户输入日期字符串,解析成Date 并打印。
public static void name2() {
System.out.println("请输入日期:如2018-07-18");
Scanner scanner = new Scanner(System.in);
String ss = scanner.nextLine().trim();
try {
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
Date date = format1.parse(ss);
System.out.println("Date:"+date);
String string = format1.format(date);
System.out.println("Date:"+string);
} catch (ParseException e) {
e.printStackTrace();
}
}
//键入2018-07-18
//Date:Wed Jul 18 00:00:00 CST 2018
//Date:2018-07-18
//3.计算你们在一起多少天了。
static void function06() throws Exception{
System.out.println("请你们认识的日期:如2018-07-18");
Scanner scan = new Scanner(System.in);
String str = scan.nextLine().trim();
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
Date date = format1.parse(str);//相遇日期
long t = date.getTime();
Date date1 = new Date();//当前日期
long t1 = date1.getTime();
long s = t1 - t;
long days = s/1000/60/60/24;
if(days<0) {
System.out.println("你的女票将在"+(-days)+"天后出现,请注意查收。");
}else {
System.out.println("你们已经认识"+days+"天。");
}
}
//today:2018-07-19
//键入2018-07-10
//你们已经认识9天。
6.2Calender类
//显示当前时间
public class Calendar_ {
public static void main(String[] args) {
function02();
}
static void function02(){
Calendar c = Calendar.getInstance();
System.out.println(c);
//显示设置的时间
//c.set(2099, 1, 9, 9, 9);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;//month从0开始
int day = c.get(Calendar.DAY_OF_MONTH);
int hour = c.get(Calendar.HOUR_OF_DAY);
int m = c.get(Calendar.MINUTE);
System.out.println(year+"年"+month+"月"+day+"日"+hour+"点"+m+"分");
}
}
//2018年7月20日9点30分
6.3UUID类
// 生成一个id
public static String createId() {
UUID uid = UUID.randomUUID();
String userId = uid.toString();
String id = userId.replace("-", "");
return id;
}
//80e1146c3c7344dd9b957be907056c8f