Java基础复习
Java的常量变量:
标识符:变量的名称
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。可以由字母,数字,下划线,美元符组成,不能是Java中的关键字,区分大小写。
变量:变量类型,变量名,变量值
String a = “aaa”;
变量类型不可变,变量名实际是指向对象地址的引用,变量值为具体的值
基本数据类型:数值型(整数类型(byte(2的8次方),short(2的16次方(相当于两个byte相乘))),int(4个字节(2的32次方(相当于两个short相乘)),long(8个字节(2的64次方,相当于两个int相乘)),浮点类型(float,double)),字符型(char(2个字节)),布尔型(boolean(1个字节));
引用数据类型:类(class(Integer,Double,String,StringBuffer,StringBuilder,Socket…)),接口(interface),数组(int []);
基本数据类型存储的是数值本身,而引用数据类型存储的是值的地址。
自动类型转换:目标类型能与源类型兼容,比如都是数值型;目标类型打大小大于源类型,如:double为8字节,int为4字节。
强制类型转换:dohble b=6.0;int a=(int)b;
运算符:
算数运算符(加减乘除,求余,自增自减(int a=++a:先自增,再赋值。Int a=a++:先赋值,在自增)),赋值运算符(指为变量或常量指定数值的符号),比较运算符(判断),逻辑运算符(与(&&)或(||)非(!)异或(^)),条件运算符(三元运算符)
循环:
Break:跳出循环;
Continue:跳出本次循环,并执行下一次循环
数组:
数组排序:Arrays.sort(数组名)
转换为字符串:Arrays.toString()
方法的重载:及访问修饰符,返回值类型,方法名相同但是参数列表不同
方法的重写:子类继承父类时,可以继承父类的方法,子类可以重写父类的方法,及访问修饰符,返回值类型,方法名和参数列表都相同,只是内容不同。
重写不可以抛出父类没有抛出的一般异常,可以抛出运行时的异常
类和对象
类是一个模子,实际就是对一种事物进行抽象,包括属性和方法,类是对象的类型,具有相同属性和行为为同一种类型,及为同一类或者是此类的父类或者子类;对象是类的实例
成员变量:在类中定义,用来描述对象的属性
局部变量:在方法中定义,在类中的方法中临时保存数据
局部变量仅在自己所在的方法可以使用,而成员变量可以在类中所有方法中使用
Java虚拟机会给成员变量赋一个初始值,不会给局部变量赋初始值,所以局部变量需要赋值后才能使用
构造方法:
New后面跟的是构造方法,创建对象的时候会使用构造方法
构造方法是定义在Java类中的一个用来初始化对象的方法
构造方法和普通方法的不同是:普通方法代表对象的行为,而构造方法类似于对象抽象的方法,相当于比对象高一级,相当于属于Class的方法,用于创建对象
带参的构造方法为了初始化成员变量在创建对象的时候,把参数传递进去
Ststic使用:
静态变量:类中共享一个成员,Java中被static修饰的成员被称为静态成员或类成员,他属于整个类锁拥有,即被类的所有对象共享,静态成员可以使用类名直接访问,也可以使用对象名访问,静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载时才进行资源回收
静态变量和成员变量的区别:
1、 静态成员变量属于整个类,不单单属于某一个对象,被所有对象共享,普通成员变量属于类中的对象不能被共享
2、 静态成员变量必须在全局进行定义赋值,普通成员变量在创建对象时可以对他进行始化无须单独定义,声明即可
3、 静态成员变量没有对象之前就已经存在,并且最先加载,加载在方法区中
4、 普通变量只能通过对象名进行访问,静态成员变量还可以通过类名进行访问
5、 静态变量没有实例化就可以调用,成员变量需要实例化才可以使用,成员变量属于对象
Java中普通声明的变量在未初始化赋值的情况下无法直接使用,但类中的static修饰的变量,即静态变量会在编译期间有系统自动初始化并赋予默认值,所以没有实例化的情况下可以使用:这是因为Java中普通变量会在程序运行中通过实例化由系统动态的自动分配内存空间,而静态变量时在编译后便已经分配了内存,并随着类的存亡而存亡,这么做的目的使得静态方法或者静态变量在没有实例化的情况下可以被使用
静态初始化
public static byte;0
short 0
int 0
long 0
float 0.0
double 0.0
char null对应的ASCII码时0
boolean false
String null
StringBuffer null
静态方法:
称之为静态方法或类方法
静态方法中可以直接调用同类的静态成员,但不能直接调用非静态成员,如果希望调用则创建类的对象,通过对象访问非静态变量
在普通成员方法中,同类中可以直接访问同类的非静态变量和静态变量
静态方法不能直接调用非静态方法,需要通过对象来访问非静态方法
普通的初始化块,当创建类的实例时,就会一次执行这些代码块
静态初始化块,只在类加载时执行,且只执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量
面向对象的三大特性:封装,继承,多态
封装:
目的:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法,来实现对隐藏信息的操作和访问
实现步骤:修饰符设置为private,然后创建getter/setter方法
This关键字代表当前对象,对象的本质是地址的引用,及指针,封装对象属性时经常会用到this关键字
内部类:定义在另一个类里面,与之对应,包含内部类的类被称为外部类
作用:
1、内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中其他类访问该类
2、内部类中的方法可以直接访问外部类中的所有数据,包括私有数据
3、内部类所有实现的功能使用外部类同样可以实现,有时使用内部类会更加方便
分为:成员内部类,静态内部类,方法内部类和匿名内部类
内部类也是外部类的一个成员,只不过这个成员类型是一个类,调用时要先实现外部类,然后才能找到该类下的内部类实现
定义成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去new一个内部类对象
成员内部类(普通内部类):
内部类可以任意访问修饰符
内部类中定义的方法,可以访问外部类中的数据,不受访问修饰符的影响
定义了成员内部类后,必须使用外部类对象来创建内部类对象
编译含内部类的程序时,会出现两个class文件,其中第二个是外部类的.class文件,第一个是内部类.class文件名称为外部类名$内部类名.class
外部类不能直接使用内部类的成员和方法,可以先创建内部类对象,然后通过他们访问
如果内部类和外部类具有相同的成员变量和方法,内部类默认访问自己的成员变量和方法。如果要访问外部类的成员变量,可以使用this关键字,如:外部类.this.属性
静态内部类(static修饰的内部类):
1、静态内部类不能直接访问外部类的非静态成员,但是可以通过new外部类().成员 的方式访问
2、如果外部类的静态成员与内部类的成员名称相同,可以通过”类名.静态成员”访问外部类的静态成员,如果外部类的静态成员与内部类的成员名称不相同,则可以通过”成员名”直接调用外部类的静态成员
3、创建静态内部类的对象时,不需要外部类的对象,可以直接创建,如:内部类 对象名=new 内部类();
方法内部类:
是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用
方法内部类不能使用访问控制符和static修饰符
继承:
Java中式单继承
优点:子类拥有父类的所有属性和方法,private修饰的无效子类不能拥有,private的
属性继承不了。Java的继承可以实现代码的复用
方法的重写:
子类重写父类的方法,并且在子类调用时会优先调用子类的方法
Java继承的初始化顺序
初始化父类再初始化子类
先执行初始化对象的属性,在执行构造方法中的初始化,当创建一个子类对象时,会先创建父类对象的属性初始化,再初始化父类的构造方法,然后是子类对象属性初始化和构造方法初始化
如果父类是无参构造方法时,子类也是的话可以省略,先父类构造再子类
父类仅有一个有参构造方法时,子类必然是有参构造方法,不能重载,因为重载子类new对象时无参数,父类无参数的化就无法构造
在子类继承父类的有参构造方法时,super(参数),是构造函数中{}第一条语句,super代表父类,()代表调用父类中的构造函数
final最终不可修改不可修饰
final类不允许被继承
final方法不允许被覆盖或重写
final属性:该类的属性不会进行隐式的初始化。类的初始化属性必须有值或者在构造方法中赋值,但只能选其一
final变量只能赋值一次,变为常量
当一个类继承另一个类,且需要运行的方法,子类没有,父类拥有时,用子类的对象调用方法会优先在子类中查找该方法,再到父类中查找
子类构造方法中必须调用其父类的构造方法
如果子类的构造方法中没有调用父类的构造方法,则系统默认调用父类的无参构造方法super(); 隐式调用,如果显示调用方法,必须在子类构造方法中的第一行
如果子类的构造方法中既没有显示调用父类的构造方法,而父类又没有无参构造方法,则编译出错
ToStrng()方法若不重写,打印的是输出对象的海西地址,若想输出对象的属性需重写方法
equals()方法比较的是对象的引用是否指向同一个内存地址;Dog dog=new Dog();dog其实不是对象,他是引用了内存的地址,是间接的引用了对象的地址,操作地址的时候简介的操作了对象的值,一般情况下比较对象的属性是否一致,当父类的方法解决不了时,需重写equals方法;==如果比较的是两个引用的值时,比较的也是内存地址
多态:对象的多种形态,继承时多态的基础
引用多态:
父类的引用可以指向本类的对象
父类的引用可以指向子类的对象
方法多态:
创建本类对象,调用的方法为本类方法,创建子类对象,调用的方法为子类重写的方法或着继承的方法
若子类新建的方法(父类中没有的方法,此方法为子类自己创建的),父类指向子类的对象时(多态情况下)不能调用该方法
不能使用子类引用指向父类
接口:
接口可以理解为一种特殊的类,有全局常量和公共的抽象方法所组成,类是一种具体的实现体,而接口定义了某一批类需要遵守的规范,接口不关心这批类的内部数据也不关心这些类方法的实现细节,接口只规定这些类必须提供某些方法
接口是用来被定义和实现的,修饰符一般使用public,类在Java中是单继承的,接口是多继承的,interface前面有abstract,不写系统也默认添加
常量:接口中的属性是常量,定义时不添加public static final修饰符,系统也会自动加上
方法:接口中的方法只能是抽象方法,不需添加public abstract修饰符,系统会自动加上
继承父类必须在实现接口前
异常:
程序中阻止当前方法或作用域继续执行的问题
异常的鼻祖是Throwable类,该类分为两个:Error类和Exception类
Error一般是虚拟机错误、线程死锁,系统错误,内存溢出
Exception是编码、环境、用户啊操作、输出出现问题、
