java中标识符的命名规则
类名、方法名、变量名统称为标识符
标识符命名规范:
帕斯卡命名法:所有字母首字母大写
驼峰命名法:第一个单词首字母小写,其余单词首字母大写
类名使用帕斯卡方法命名,方法名变量名使用驼峰法命名
方法
方法是定义在类中的一段独立代码,能完成某个事情
定义方法时提供方法的名称,返回值,参数列表(方法三要素)
调用方法
通过类名调用
Math类
Math类时java中的工具类,用于数学计算,该类使用static修饰,可以直接通过类名调用
常用方法和属性:PI圆周率,E自然常数,abs绝对值,ceil向上取整,floor向下取整,round四舍五入random取随机数,sqrt平方根,cbrt立方根,math.pow(2,3)二的三次方。
通过对象调用
创建对象:类名 对象名 =new 类名([参数]);
Scanner sc=new Scanner(System.in);
sc.方法名();
在同一个类中,方法A直接调用方法B
class Test{
void funA(){
funB();
}
void funB(){
System.out.println("我是B方法");
}
}
方法调用总结:调用方法(通过类名调用,通过对象调用,直接调用)
参数
返回值:没有返回值,方法名的前面用void表示,有返回值,使用java中的任意数据类型,方法体中使用return关键字返回对应类型的数据
方法的类型:
无参无返:void 方法名(){return;}//yudaoreturn立即结束方法
无参有返:int 方法名(){return new Random().nextInt();}
有参无返:void 方法名(数据类型 形象名,数据类型 形参名){//方法体return;}
有参有返:
//生成a,b中包含最小值,不包含最大值范围内的随机数
double rand(int a,int b){
double num=Math.floor(Math.random()*Math.abs(a-b)+Math.min(a,b));
return num;
}
有返回值时必须有return并能够执行,同时要return一个该方法返回值类型对应的数据。
没有返回值可以不加return关键字。方法中加入return,会立即结束方法,∴return后面不能再有代码
定义方法时参数称为形参,调用方法时,实际传递的参数称为实参。实参要保证数据类型跟形参相同
面向过程编程:POP(procedure oriented programming)侧重于完成的过程
面向对象编程:OOP(object oriented programming)侧重于完成的对象
类和对象
类class:
具有相同属性和行为的集合。相当于模板。
属性:描述这个类的特征值,在程序中,通过定义变量实现
行为:描述这个类的动作,在程序中通过定义方法实现。(创建一个class就是创建一个类)
定义类
[修饰符]class 类名{
//属性(定义变量)
//行为(定义方法)}
对象 object
对象由某个类创建出来的具体实例
创建对象:类名 对象名=new 构造方法([参数]);
创建出的对象,通过"."操作符访问类中的非私有属性和方法
类和对象的关系:对象是类的具体表现,类是对象的模板,先定义类,才能通过该类获取对象
成员变量和局部变量
成员变量:
定义在类中的变量,称为成员变量,有默认值。
数据类型:整型,浮点型,布尔型,引用类型。
局部变量:
定义在方法中的变量,称为局部变量,没有默认值,赋值后才能使用。
成员变量与局部变量的区别以及生命周期:成员变量定义在类中,有默认值,不赋值也能使用
局部变量是定义在方法中的变量,没有默认值,需要赋值。成员变量的生命周期:类创建对象,成员变量就会初始化,类的对象被回收,成员变量销毁。 局部变量的生命周期:方法调用,对局部变量赋值,局部变量初始化,方法调用结束,局部变量失效。
构造方法:
构造方法也称构造函数,构造器,constructor。它是一种特殊的方法。没有返回值部分,方法名和类名一致,在创建爱你对象时通过new调用,给类的成员变量赋值。
class Person{
//成员变量
String name;
int age;
//这就是一个无参数的构造方法,用于new Person()
Person(){
}
//这就是一个带参数的构造方法,用于new Person("admin",20)
Person(String name,int age){
this.name=name;//将参数的值赋值给成员变量
this.age=age;
}
}
特点:
创建对象时必须通过new配合构造方法
构造方法没有返回值部分,名称和类名相同
构造方法可以存在多个
但是参数不能相同,这些构造方法之间的关系称为重载
每个类默认有一个隐藏的无参数的构造方法,方法中隐含了一句super()用于创建无参数的对象
如果自己写了带参数的构造方法,默认无参数的构造方法会失效
带参数的构造方法常用于初始化成员变量(给类中的变量赋值)
构造方法可以限制创建对象时携带的参数
构造方法无法通过"."操作符访问,只能通过new关键字创建对象时调用
IDEA中自动生成构造方法:
空白处右键generate或者 alt+insert:选择Constructor(生成构造方法)全选:ctrl+a
面向对象语言的三大特性:
封装:使用private关键字对成员进行修饰,在提供一组get和set的方法,用于对该属性读取和赋值。可以防止除自身类之外的地方对private修饰的属性进行访问。
自动生成:空白处右键generate或者 alt+insert:选择getter and setter
IDEA中自动使用变量接收对象:在对象后.var或快捷键ctrl+alt+v
继承:类B使用extends(延伸)关键字"继承"类A
语法:class类B extends类A{}
类B称为类A的子类,衍生类,subClass
类A称为类B的父类,超类,supClass
继承后,子类就能访问父类中的非私有(没有用private修饰的)成员变量和成员方法。
特点
如果多个类中有相同的代码,可以将这些代码提取出来放到公共的类中---父类再让那些类去extends继承这个父类,那些类就是子类。子类就无需再写重复代码
子类中或子类对象可以直接访问父类中非私有(不用private修饰)属性和方法。
创建子类对象时,会先执行父类中相应的构造方法。
子类继承父类后,通常会对父类中的方法进行拓展或覆盖(称为重写),重写后,子类再调用该方法时,执行的是重写后的内容
java中是单继承,一个子类只能extends一个父类,一个父类可以有很多子类。
java中可以多重继承,类a可以继承b,类b可以继承c,类a可以访问类b类c。
任何类都是object类的子类
方法重写和方法重载
方法重写override
当子类继承父类后,可以对父类中的方法扩展或覆盖。
要求:
方法名,返回值,参数列表必须和父类一致
访问权限不能比父类更严格
不能抛出比父类更大的异常
方法重载overload
在一个类中,如果多个方法的方法名相同,参数列表不同,这些方法称为载重的方法。
同名不同参,载重用于在一个类中,某个方法在不同条件下,执行不同的内容
方法栽种的要求
方法名相同
参数必须不同(数量 类型)
与返回值无关
重载和重写相关面试题:
载重与重写的异同:相同:方法名不变
不同:重载在一个类中,重写在继承关系中子类重写父类
重载参数必须不同,重写参数必须相同
重载返回值无要求,重写返回值必须相同
构造方法能重载吗?能重写吗?
构造方法可以重载。构造方法不能重写。
构造方法在执行时,一定会创建对象吗?
不一定。创建子类时会自动执行父类构造方法,但不会创建父类对象。
this和super关键词:
都可以当做对象使用,也可以当做构造方法使用
当做对象使用:
用法:this.属性或this.方法,super.属性或super.方法此时的this表示当前类的对象,super表示当前类的父类对象。
当构造方法使用:
此时的this([参数])表示当前类的某个构造方法。如this()表示当前类的无参构造方法。
super([参数])表示当前类的父类的某个方法。如super()表示当前类的父类的无参构造方法。
如果当做构造方法使用时,只能写在另一个构造方法的第一行。
注意:
如果父类中有无参数的构造方法,在子类的构造方法中,可以不写super(),默认自动调用。
如果父类中有带参数的构造方法,没有无参数的构造方法,在子类的构造方法中,必须要有super([参数])。
父类和子类中都没有构造方法(只有默认的无参构造方法)
父类中没有无参构造方法,子类中就必须调用父类中对应的构造方法。