面向对象上

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);
    	}
    	
    }
    // 斐波那楔数列
    // 汉诺塔问题
    		
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值