Part01:static关键字
1、static关键字:
作用:一般用来修饰类中的成员;被static修饰的成员属于类,不属于单个对象;
如果一个类的成员变量被static修饰了,那么想访问这个成员,可以直接通过类名.成员变量;
2、什么时候类的成员需要用static修饰呢?
如果这个成员,他不属于某一个对象,而是属于类,属于所有对象共有的(每个对象都一样),那么需要加上static修饰;
如:中国人类的国籍
3、被static修饰后成员的特点:
被static修饰的成员又叫类成员,不叫对象的成员;
调用:
类名.静态成员变量名(推荐);
//也可以对象.成员变量名(不建议,警告);
静态方法:类名.静态成员方法名(参数);
空间:
普通成员变量,每一个对象都有自己的空间;而静态成员变量,存在方法区中,在内存中只有一份空间,任何对象对这份空间中的值做了修改会影响所有对象访问的结果(被多个对象共享);
4、静态的多态性:
多态调用静态成员货静态方法的时候,没有多态性;因为静态属于类不属于对象,而多态是对象的多态;
Part02:final关键字
1、final关键字:
final可以修饰类,成员变量,成员方法,局部变量(基本类型,引用类型)
2、final修饰类:
不能被继承,可以继承其他类;
3、final修饰成员变量:
被final修饰的成员变量,必须在创建对象之前有确定的值(初始化);//final int a=100;
被final修饰的成员变量,只能赋值一次;
4、final修饰的成员方法(最终方法):
被final修饰的成员方法,不能被子类重写;
5、final修饰的基本类型局部变量:
被final修饰的基本类型局部变量,只能赋值一次(可以在定义时直接赋值或先定义再赋值);
6、final修饰的引用类型局部变量:
被final修饰的引用类型局部变量,只能赋值一次,但是引用类型所指向的对象中的内容是可以改变的;//例:final Dog dog=new Dog()只能赋值一次;dog.age可以改变;
Part03:包
1、包的本质?
包的本质是文件夹,在包中是以 . 来区分上下级文件夹关系;
2、为什么要用包?
分类管理文件
3、包的声明:
格式:package 包名;
作用:指示 某个类 在哪个包类;
包的声明必须和类所在的实际位置保持一致;
4、包的导入:
用来告诉编译器我们要使用的类在哪一个包类;
格式:import 包名.类名;
5、全限定类名:
格式:包名.类名//例:java.util.ArrayList=。。。;
使用全限定类名可以不用导包;
Part04:权限修饰符
Java中四个权限修饰符:
Part05:内部类
1、内部类:
根据内部类定义位置不同的分类:
成员内部类:定义在内中方法外;
在其他类中创建该类的对象 固定格式:
外部类名.内部类名 变量名=new 外部类( ).new 内部类( );
局部内部类:定义在方法中
在其他类中,是无法使用的,只能在局部位置使用;
2、静态代码块:
代码块,在成员位置,使用大括号括起来的一堆代码;
例:
public class Person{
//静态代码块
static{
代码块;
}
public void show( ){
}
}
特点:
当我们使用到这个类(创建类的对象或使用类的静态成员)的时候,JVM自动执行这个类中的静态代码块;
只会执行一次,而且在第一次使用到这个类的时候执行,第二次使用就不会执行了;
优先级很高,比构造方法高,比main方法高;
作用:用来初始化类的某些功能,例如mysql数据库驱动的加载;
2、匿名内部类:
是一种特殊的语法;
用来快速创建抽象类的子类对象;
//第三种,常用
//多态,父类类型接受匿名子类对象
AbstractDemo abstractDemo=new AbstractDemo() {
@Override
public void eat() {
System.out.println("fff");
}
@Override
public void sleep() {
System.out.println("sss");
}
};
abstractDemo.eat();
abstractDemo.sleep();
用来快速创建接口的实现类对象;
new USB() {
@Override
public void open() {
}
@Override
public void close() {
}
}.重写后的方法();
//多态接收;
USB usb=new USB() {
@Override
public void open() {
}
@Override
public void close() {
}
};
usb.open();
usb.close();
Part06:引用数据类型
1、类作为方法的参数或返回值:
我们需要传递或者返回的,应该是该类的对象(不是该类,也不是别的类的对象);
2、抽象类作为方法的参数和返回值:
我们需要传递或返回的,是抽象类的子类对象;
例: return new Animal( ){
public void eat( ){…} //创建匿名子类,实现方法;
};
3、接口作为方法的参数和返回值:
我们需要传递或返回的,是接口的实现类对象;
Part07:链式编程
public class MethodDemo {
public static void main(String[] args){
StringBuilder sb=new StringBuilder();
//链式编程,无限
sb.append(12).append("aaa").append(true);
//另外一种形式的链式编程,有限个
getName().substring(5).substring(2).charAt(0);
}
public static String getName(){
return "asdfghjkl";
}
}