类
类和对象的关系:
类(class)是对象(object)的模板、原型;而对象是类的一个实例。
类的定义:
public class 类名称 {
构造方法;
变量定义及初始化;
方法定义;
}
构造方法:
1.构造方法是一种与类同名的特殊方法,每个类都有构造方法;
2.构造方法不定义返回任何数据类型,连void都不许有!也没有return语句;
3.如果不显式定义,则使用的是缺省构造方法,它是一个无内容的空实现的构造方法;
4.构造方法的作用:初始化该类的一个新的对象,定义一些初值或内存配置工作;
5.构造方法可重载:根据参数的不同决定执行哪一个。
this关键字
this关键字本质上就是当前类类型的引用变量,当不同的对象调用同一个方法时,由于调用方法的对象不同导致this关键字不同,从而this.方式访问的结果也就随之不同。
(1)若在构造方法中出现了this关键字,则代表当前正在构造的对象。
(2)若在成员方法中出现了this关键字,则代表当前正在调用的对象。
-
当局部变量与成员变量相同时,在方法体中会优先使用局部变量(就近原则),若希望使用成员变量,则需要在成员变量的前面加上this的前缀,明确要求该变量是成员变量。
-
this关键字除了可以通过this.的方式调用成员变量和成员方法外,还可以作为方法的返回值。
-
在构造方法的第一行可以使用this()的方式来调用本类中的其他构造方法。
static
1.非静态方法可以访问静态方法或者静态属性
2.静态方法不能访问非静态属性和方法
使用static关键字来修饰属性,表示这个属性是类级别的。
static修饰的属性和方法、访问方式: 类.static属性名 类.static方法名
包
在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。 避免了类型之间命名冲突:包作为一种封装,给类提供多层命名空间 。
⭐类变量和实例变量的区别是:
(1)存放位置:
类变量随着类的加载而存在于方法区中。
实例变量随着对象的建立而存在于堆内存中。
(2)生命周期:
类变量生命周期最长,随着类的消失而消失。
实例变量生命周期随着对象的消失而消失。
抽象类:
abstract class 类名{
属性;
修饰符 abstract 返回类型 方法名();
}
⭐抽象类用abstract修饰。
抽象方法:
abstract returnType abstractMethod ( [paramlist] );
-
抽象方法只有声明,不能有实现{},连空方法都不行,用于被子类重写
-
定义了抽象方法的类必须是抽象类。
-
抽象类并不是一定要有抽象方法
特性:
-
使用abstract关键字修饰,并且一般包含抽象方法(允许不包含,实际意义角度来看一般要包含)!
-
抽象方法使用abstract修饰,是行为的“抽象定义”无方法体,不同子类有不同实现(多态);
-
抽象类不可实例化,构造器主要是被子类调用;
-
抽象类如果继承一个抽象类或者实现接口,但没有完全实现抽象方法,则必须定义为抽象类;
-
抽象类可以包含static成员(因为和实例无关)
接口:
interface 接口名[extends 接口列表]{
属性;
修饰符 返回类型 方法名();
}
抽象类和接口的比较:
抽象类 | 接口 |
---|---|
是一个类,abstract class定义 | 用interface定义,底层本质是一个特殊的类, |
抽象类中可以有成员变量 | 只可以有常量(默认使用public static final修饰) |
抽象类可以有构造方法(给子类的构造函数调用) | 接口中不可以有构造方法 |
不能实例化,要被继承extends | 不能实例化,要被实现implements |
抽象类中可以有成员方法 | 接口中只可以有抽象方法 |
类只能单一继承(因为容易存在来源歧义,尤其是属性) | 接口可以多重继承(不容易有歧义) |
可以有多种修饰符 | 接口中只能有public修饰符(不写的话会被默认) |
继承抽象类,强调是一种的关系 is-a | 实现接口:强调功能具有 has - a 的关系 |
匿名内部类:
匿名的内部类由编译器产生一个数字作为其标识符:外围类的名字+$+数字
-
匿名内部类只能也必须(有且仅有)继承一个抽象父类或者实现一个接口,也可以重写父类普通方法;
-
匿名内部类不能是抽象类,因为定义匿名内部类时立即生成对象,而抽象类不允许生成对象;
-
常用形式:创建某个接口/抽象类的对象,没有显式子引用,必须马上使用,一般作为参数直接传递;
-
匿名内部类没有类型,所以不能显式定义构造器,有一个隐式的无参构造器;可以有初始化块以初始化对象,以弥补没有构造器的缺陷;
-
在匿名内部类和局部内部类中被访问到的局部变量。
String常用方法
1)int length();//输出长度 2)char charAt(int index); //下标为第几位上的是什么 3)int indexOf(String sub);//下标的位置 4)int lastIndexOf(String sub);//下标的位置 5)int campareTo(String ath);//比较两个字符串第一个字符的ASCII 的距离 6)String concat(String oth/);//或者+号拼接之后的内容 7)byte[] getByte();//有重载方法!/把每个字母相应的ASCII存入到数组 8)char[] toCharArray();//把每个字母存入到数组 9)String toLowerCase(); //转换为小写类型10) 10)String toUpperCase();//转换为大写类型 11)String replace(char achar,char ncahr); //替换单个字符 12)String xeplaceAll(String regex,String nchar);//替换多个字符 13)String[] split(String regex); //切割字符串 14)substring(int start,int end);//从下标几开始取几个数 15)startsWith(String str);//判断是否首位 16)endsWith(String str);//判断是否尾位 17)eguaIslgnoreCase();//区分大小写比较内容 18)String trim = " aa ".trim();//去除字符串左右的空格 19)equals();//区分大小写比较内容