1.万事万物皆对象
①在Java语言范畴中,我们都将功能、结构封装到类中,通过类的实例化,来调用具体的功能结构。
②涉及到Java语言与前端Html、后端的数据库交互时,都体现为类、对象。
2.匿名对象的使用
①理解:我们创建的对象没有显示的赋给一个变量名,即为匿名对象。
②特征:匿名对象只能调用1次
③应用场景 new Phone().sendEmail();
3.方法的重载(overLoad)
在同一类中,允许一个以上的同名方法,只要他们的参数个数或者参数的类型不同即可。
“两同一不同”:两同:同一个类、相同的方法名
参数列表不同:参数个数不同、参数类型不同
判断是否重载:跟方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系
面试题:方法的重载与重写的区别
重写是父类本身有的方法,子类又将这些方法重新写了一下。
有时候,子类并不想原封不动的继承父类已经有的方法,而是想要自己重写一下,但是重写并不是把方法的一切都重写,而是有条件的,前提条件是: 父类已经有的方法的方法名字,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)都相同的的时候,子类对 方法的方法体进行修改或者重写,这就是重写。
两者 的区别是什么呢?
首先方法的重写和方法的重载都是实现多态的方式,但是方法的重载实现的是编译时的多态性,而方法的重写实现的是运行时的多态性。
方法的重载发生在同一个类中,而重写是发生在子类和父类之间。
方法的重载在判定的时候,同一个方法名,方法的参数个数,参数顺序,参数类型只要有一个不同就可以定义为是方法的重载;重写则是子类和父类有相同的方法名,相同的参数类型和参数个数,参数类型,但是方法体有所不同。
方法的重载对于返回类型没有要求,方法的重写对于返回类型有要求。重写要求,子类的返回类型必须要和所重写的父类的返回类型相同。方法的重写中子类抛出异常小于等于父类方法抛出异常。
总结:方法重载的返回值类型可以不相同,方法重写的返回类型必须相同,否则编译报错。
4.在通过对象调用方法时,如何确定某一个指定的方法:
方法名---->参数列表
5. 可变个数形参的方法:
①jdk5.0新增的内容
②具体使用:格式:数据类型...变量名
当调用可变个数形参的方法时,传入的参数个数可以是:0个,1个,2个
可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载。
6.方法参数的值传递机制:值传递
如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值。
如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值。
形参:方法定义时,声明小括号内的参数
实参:方法调用时,实际传递给形参的数据
关于变量的赋值:
①方法,必须有其所在的类或对象调用才有意义,若方法有参数
如果变量是基本数据类型,此时赋值的是变量所保存的数据值
如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值
7.1)定义一个Circle类,包含一个double型的radius属性代表圆的半径,一个findArea()方法返回圆的面积。
2)定义一个类PassObject,在类中定义一个方法printAreas(),
该方法的定义如下:public void printAreas(Circle c, int time)
在printAreas方法中打印输出1到time之间的每个整数半径值,以及对应的面积。
例如,times为5,则输出半径1,2,3,4,5,以及对应的圆面积。
3)在main方法中调用printAreas()方法,调用完毕后输出当前半径值。
package com.lxy.java;
//1)定义一个Circle类,包含一个double型的radius属性代表圆的半径,一个findArea()方法返回圆的面积。
public class Circle {
double radius;
public double findArea(){
return Math.PI * radius * radius;
}
}
package com.lxy.java;
/*2)定义一个类PassObject,在类中定义一个方法printAreas(),
该方法的定义如下:public void printAreas(Circle c, int time)
在printAreas方法中打印输出1到time之间的每个整数半径值,以及对应的面积。
例如,times为5,则输出半径1,2,3,4,5,以及对应的圆面积。
3)在main方法中调用printAreas()方法,调用完毕后输出当前半径值。
*/
public class PassObject {
public static void main(String[] args) {
PassObject test = new PassObject();
Circle c = new Circle();
test.printAreas(c, 5);
System.out.println("now radius is " + c.radius);
}
public void printAreas(Circle c, int time){
System.out.println("Radius\t\tArea");
for(int i = 1; i <= time; i++){
c.radius = i;
System.out.println(c.radius + "\t\t" + c.findArea());
}
c.radius = time + 1;
}
}
8.递归方法:一个方法体内调用它自身
递归方法的使用,它是隐式的循环,递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环。
package com.lxy.java;
public class RecuesionTest {
public static void main(String[] args) {
// 计算1-100所有自然数的和
// 方式一
// int sum = 0;
// for(int i = 0; i <= 100; i++){
// sum += i;
// }
// 方式二:递归
RecuesionTest test = new RecuesionTest();
int sum1 = test.getSum(100);
System.out.println(sum1);
int result = test.f(10);
System.out.println(result);
}
public int getSum(int n){
if(n == 1){
return 1;
}else{
return n + getSum(n - 1);
}
}
// 计算1-100乘积
public int getSum1(int n){
if(n == 1){
return 1;
}else{
return n * getSum(n - 1);
}
}
// 已知数列,f(0)=1,f(1)=4,f(n+2)=2*f(n+1)+f(n),其中n>0,求f(10)的值
public int f(int n){
if(n == 0){
return 1;
}else if(n == 1){
return 4;
}else{
return 2*f(n-1)+f(n-2);
}
}
// 斐波那楔数列
// 汉诺塔问题
}