此处总结的一些概念:
1.main方法
2.static
3.final
4.abstract
5.构造方法
6.this
7.成员变量和局部变量
8.匿名对象
1.main方法
* main 主函数的特殊之处:
* 1.格式是固定的,能修改的只能是数组的名称(args)
* 2.被jvm所识别
*
* public:因为权限必须是最大的
* static:不需要调用对象,直接用主函数名就可以调用了(main)
* void:主函数没有具体返回值
* main:函数名,不是关键字,但它是jvm所识别的固定的名字
* String[] args:是一个主函数的参数列表,是一个数组类型的参数,而且元素是String类型的
2.static
static 是一个关键字,用于修饰成员变量和成员方法
* 使用场景:多个值都是一样的数据的时候(一般会赋予初始值)
* static特点:
* 1.被所有实例(对象)所共享
* 2.用类名调用,也可以实例调用
* 3.静态的加载优先于对象
* 4.随着类的加载而加载
*
* 静态方法:
* 特点:可以在主函数直接通过类.方法调用。在一个类中,静态只能直接调用静态属性和静态方法。
* 动态方法可以直接调用静态方法,没有局限性(可以调用静态成员和非静态成员)
* 成员:成员变量和成员方法
3.final
* final修饰的变量必须赋予初始值,并且只能赋值一次,是一个常量
* 常量一旦赋值就不能修改,只能在赋值的地方修改
* 修饰的方法不能被重写
* 修饰的类不能被继承
final修饰变量:
如果是基本类型,那么变量不能被改变,
如果是引用类型,那么是引用不能被改变,但是对象是可以变的
比如:
final StringBuilder build=new StringBuilder("hello world“);
build.apped("hello kitty");
这样是可以的
但是;
build=new StringBuilder("");
是会报错的
4.abstract
abstract:关键字 用于修饰方法和类
* 抽象方法:
* 普通类里不能有抽象方法
* 不能有方法体:public abstract void eat();也就是没有{}
* 抽象类:
* 有抽象方法的必须是抽象类,抽象类不能被实例化
* 类继承抽象类,必须重写它的全部抽象方法(除非这个类是抽象类)
* 抽象类的关系有可以是继承
* 一个类继承了抽象类,必须重写抽象类的抽象方法
* 抽象类的成员特点:
* 成员变量:可以有成员变量,也可以有常量
* 成员方法:可以有抽象方法,也可以有非抽象方法
* 构造方法:可以有无参构造和有参构造
5.构造方法
* 无参构造方法: 访问修饰符 方法名(){}
* public Study(){} 方法名和类名相同,方法没有返回类型(与返回值)
* 有参构造方法:根据类中的成员变量进行创建
* 例如 public Study(int age,String name){}
* 作用:为属性赋予初始值
* 构造方法的特点:类中不写,jvm自动创建无参构造,一旦写了任意的构造方法,jvm将不会自动创建
* 继承中构造方法的执行顺序
* 在子父类中,创建子类对象,先调用父类的无参构造,再调用子类无参构造
* 调用子类的有参构造,会先调用父类无参,然后才是子类有参
局部代码:定义在方法语句中,public void test(){}等,只在调用的时候执行
* 构造代码块:定义在成员位置(类中),{//代码},在类new的时候执行(new几次就执行几次)
* 且优先于无参构造方法的执行
* 静态代码块:定义在成员位置,static{//代码}。优先执行,哪怕实例多个对象(new),也就只有在实例第一个对象时才会执行一次
*
* 执行顺序:静态代码块 —— 构造代码块 —— 无参构造方法 —— (被调用时才执行)局部代码块
6.this
* A:this代表所在类的对象引用(方法被哪个对象调用,this就代表哪个对象
* B:成员变量和局部变量重名时使用,如 this.num = num。this.num 表示当前对象的数据域变量 num,而 num 表示方法中的局部变量。
* C:可以用于调用当前类的构造方法,并且必须是方法的第一条语句。如:this(); 调用默认构造方法。this(参数); 调用带参构造方法。
7.成员变量和局部变量
public class Test{
int x;//成员变量
public void test(){
int y;//局部变量
}
* 成员变量和局部变量的区别
* A:位置不同————成员变量在方法外,类中;局部变量在方法中
* B:在内存的位置不同————成员变量:堆里;局部变量:栈里
* C:生命周期不同————成员变量:随对象的创建而存在;局部变量:随方法的调用而存在,随方法调用完毕而消失
* D:初始值不同————成员变量:有默认值(不用初始化);局部变量:没有默认值,必须定义初始化值(或直接赋值)
//堆,栈,方法区,常量池,
//静态常量、变量的命名可与非静态的常量、变量相同
* 静态方法不能直接调用非静态的数据
* 局部变量和全区变量的区别
* 1.作用域不同,局部变量的作用域,仅限于当前代码块
* 2.全局变量,属于类的属性,作用域为当前类
*
* Static关键字:用来修饰类、变量、方法。一开始就放在了方法区
* jvm执行.class的时候,就将其(static定义的对象)定义在方法区
* 在类加载的时候就初始化(分配内存)了变量(或常量)
* 因此执行效率要比非静态高,同时更占内存
* 所有局部变量都在栈里开辟空间,所有new的都在堆里开辟空间
8.匿名对象
匿名对象 new Student
* System.out.println(new Student().name="小明");
* 匿名对象是对象的简化形式
* 匿名对象两种使用情况
* 当对象方法使用进行一次调用时
* 匿名对象可以作为实际参数进行传递