文章目录
成员变量和局部变量
变量 | 位置 | 作用范围 | 初始化 |
---|---|---|---|
成员变量 | 类中,方法外 | 类中 | 有默认值 |
局部变量 | 方法内 | 方法中 | 没有默认值,要定义赋值才能用 |
this关键字
this:代表所在类的当前对象的引用(地址值),即对象自己的引用
匿名对象
1.举例
new Scanner(System.in);
2.应用
new Scanner(System.in).nextInt();
3.一个匿名对象只能使用一次,所以一旦调用两次,就会创建两个对象,浪费
ArrayList类
1.是大小可变的数组,可不断添加元素,大小自动增长
2.只能存储引用数据类型,类似<int>
的不能写,需转化
3.常用方法
方法 | 作用 |
---|---|
public boolean add(E e) | 将指定的元素添加到此集合的尾部。 |
public E remove(int index) | 移除此集合中指定位置上的元素。返回被删除的元素。 |
public E get(int index) | 返回此集合中指定位置上的元素。返回获取的元素。 |
public int size() | 返回此集合中的元素数。遍历集合时,可以控制索引范围,防止越界。 |
String类
1.基本数据类型字符串不变:值在创建后不能被更改
String s1="abc";
s1+="d";
System.out.println(s1);
//字符串常量池中有"abc"和"abcd"两个对象,s1从指向"abc"变成指向"abcd"
例
String str1 = new String("A"+"B");
会创建多少个对象?
字符串常量池:“A”,“B”,“AB” : 3个
堆:new String(“AB”) :1个
引用: str1 :1个
总共 : 5个
String str2 = new String("ABC")+"ABC";
会创建多少个对象?
字符串常量池:“ABC” : 1个
堆:new String(“ABC”) :1个
引用: str2 :1个
总共 : 3个
2.String底层靠字符数组实现
"abc"等效于
char[] data={‘a’,‘b’,‘c’}`
静态类
静态代码块
1.定义:在成员位置,使用static修饰的代码块{ }
2.位置:类中方法外
3.执行:随着类的加载而执行且执行一次,优先于main方法和构造方法的执行
4.格式:
public class ClassName{
static {
// 执行语句
}
}
4.作用:给类变量进行初始化赋值。
Arrays类
包含用来操作数组的各种方法,比如排序和搜索等。其所有方法均为静态方法,调用起来非常简单
Math类
包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。类似这样的工具 类,其所有方法均为静态方法,并且不会创建对象,调用起来非常简单
继承
1.成员变量重名时
子父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时,可以使用 super
关键字,修饰父类成员变量,类似于之前学过的 this
格式:
super.父类成员变量名
2.构造方法
- 构造方法的名字是与类名一致,所以子类是无法继承父类构造方法
- 构造方法的作用是初始化成员变量。所以子类的初始化过程中,必须先执行父类的初始化动作。子类的构 造方法中默认有一个 super() ,表示调用父类的构造方法。父类成员变量初始化后,才可以给子类使用。
抽象类
- 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象
- 抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的
- 抽象类中,不一定包含抽象方法,有abstract修饰的类就是抽象类,但是有抽象方法的类必定是抽象类
接口
1.虽然是.class文件,但不是类
引用数据类型:数组,类,接口
2.定义格式
public interface 接口名称 {
// 抽象方法
// 默认方法
// 静态方法
// 私有方法
}
3.可作为类的成员变量,方法参数,返回值等使用,但都需
创建子类对象
final关键字
1.用于修饰不可改变的内容
2.final关键字修饰的类不能被继承
权限修饰符
. | public | protected | default(空的) | private |
---|---|---|---|---|
同一类中 | √ | √ | √ | √ |
同一包中(子类与无关类) | √ | √ | √ | |
不同包的子类 | √ | √ | ||
不同包中的无关类 | √ |
匿名内部类
1.前提:匿名内部类必须继承一个父类或者实现一个父接口
2.以接口为例的用法
定义接口
package com.aa.test;
/*
* 一个简单的接口
* */
public interface FlyAble {
public void fly();
}
实现
package com.aa.test;
public class Demo {
public static void main(String[] args) {
/*
* * 调用静态方法,参数为匿名内部类
* * 定义并创建该接口的子类对象
* * 直接传值给showFly(FlyAble f)
* */
showFly(new FlyAble() {
public void fly() {
System.out.println("flying~");
}
});
}
/*
* 静态方法
* */
public static void showFly(FlyAble f){
f.fly();
}
}
时间日期
Date类
1.表示特定的瞬间,精确到毫秒。
public Date()
:分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒),即自动设置当前系统时间的毫秒时刻public Date(long date)
:分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。
tips: 基准时间为1970年1月1日8时0分0秒。
例
import java.util.Date;
public class Demo01Date {
public static void main(String[] args) {
// 创建日期对象,把当前的时间
System.out.println(new Date()); // Tue Jan 16 14:37:35 CST 2018
// 创建日期对象,把当前的毫秒值转成日期对象
System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970
}
}
DateFormat类
由于DateFormat为抽象类,不能直接使用,所以需要常用的子类SimpleDateFormat
1.构造方法
public SimpleDateFormat(String pattern)
:参数pattern是一个字符串,代表日期时间的自定义格式。
创建SimpleDateFormat对象的代码如:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class Demo02SimpleDateFormat {
public static void main(String[] args) {
// 对应的日期格式如:2018-01-16 15:06:38
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
}
2.format方法
public String format(Date date)
:将Date对象格式化为字符串
使用format方法的代码为:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
把Date对象转换成String
*/
public class Demo03DateFormatMethod {
public static void main(String[] args) {
Date date = new Date();
// 创建日期格式化对象,在获取格式化对象时可以指定风格
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
String str = df.format(date);
System.out.println(str); // 2008年1月23日
}
}
3.parse方法
public Date parse(String source)
:将字符串解析为Date对象
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
把String转换成Date对象
*/
public class Demo04DateFormatMethod {
public static void main(String[] args) throws ParseException {
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
String str = "2018年12月11日";
Date date = df.parse(str);
System.out.println(date); // Tue Dec 11 00:00:00 CST 2018
}
}
Calendar类
1.Calender类是抽象日历类,通过静态方法创建对象
import java.util.Calendar;
public class Demo06CalendarInit {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();//使用默认时区和语言环境获得一个日历
}
}
System类
提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有:
public static long currentTimeMillis()
:返回以毫秒为单位的当前时间
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
:将数组中指定的数据拷贝到另一个数组中
参数序号 | 参数名称 | 参数类型 | 参数含义 |
---|---|---|---|
1 | src | Object | 源数组 |
2 | srcPos | int | 源数组索引起始位置 |
3 | dest | Object | 目标数组 |
4 | destPos | int | 目标数组索引起始位置 |
5 | length | int | 复制元素个数 |
StringBuilder
1.可变字符序列,类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容
2.常用方法
public StringBuilder append(...)
:添加任意类型数据的字符串形式,并返回当前对象自身
public String toString()
:将当前StringBuilder对象转换为String对象
装箱与拆箱
装箱:从基本类型转换为对应的包装类对象
拆箱:从包装类对象转换为对应的基本类型