IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java之面向对象2 -> 正文阅读

[Java知识库]java之面向对象2

目录

内存解析

匿名对象

方法重载

可变个数的形参

方法参数的值传递机制

递归方法的调用

理解“万事万物皆对象”


内存解析

栈(stak):

存放基本类型的数据和对象的引用,即存放变量。

如果存放的是基本类型数据(非静态变量),则直接将变量名和值存入stack中的内存中;

如果是引用类型,则将变量名存入栈,然后指向它new出的对象(存放在堆中)。

举一个交换数值的简单例子,在栈和堆内分别分配内存空间

堆(heap):

存放new产生的数据

?分为静态域和常量域。

这里暂时不解析常量池?

举一个简单交换数值的例子

?

?

匿名对象


匿名对象的使用

1.理解:我们创建的对象,没有显式的赋给一个变量名。 即为匿名对象

2.特征:匿名对象只能调用一次。


?3.使用:如下



class Student {
	public void show() {
		System.out.println("小明爱学java");
	}
}

class StudentDemo {
	public void method(Student s) {
		s.show();
	}
}

class NoNameDemo {
	public static void main(String[] args) {
		//带名字的调用
		Student s = new Student();
		s.show();
		s.show();
		System.out.println("***************");
		
		//匿名对象
		//new Student();
		//匿名对象调用方法
		new Student().show();
		new Student().show(); //这里其实是重新创建了一个新的对象
		System.out.println("**************");
		
		
		//匿名对象作为实际参数传递
		StudentDemo sd = new StudentDemo();
		//Student ss = new Student();
		//sd.method(ss); //这里的s是一个实际参数
		//匿名对象
		sd.method(new Student());
		
		
 	}
}



?

方法重载

1.定义:在一个类中,允许存在一个以上的同名方法,只要他们的参数个数或者参数类型不同即可

方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。调用时,会根据不同的参数表选择对应的方法。

“两同一不同”:

同一个类,同一个方法名。

不同:参数列表不同(类型,个数,顺序不同)

只有返回值不同,不构成方法的重载。

?

2.举例:

arrays类中重载的 sort( ) /? binarySearch( );

3.判断是否是重载:

与方法的权限修饰符,返回值类型,形参变量名,方法体都没有关系

与void show(int a,char b,double c)}构成重载的有:

 void show(int x,char y,double z){} // no

 int show(int a,double c,char b){} // yes

 void show(int a,double c,char b){} // yes

 boolean show(int c,char b){} // yes

 void show(double c){} // yes

 double show(int x,char y,double z){} // no

 void shows(){double c} // no

?

在进行使用时,要注意有些情况

?(输出 ‘ 2 ’ );

?比如这里,如果将第一种方式注释掉,系统会将两个数值自动类型提升!

可变个数的形参


说明:


1.声明格式:方法名(参数的类型名...参数名)


2.可变参数:方法参数部分指定类型的参数个数是可变多个: 0个,1个或多个


3.可变个数形参的方法与同名的方法之间,彼此构成重载


4.可变参数方法的使用与方法参数部分使用数组是一致的


5.方法的参数部分有可变形参,需要放在形参声明的最后


6.在一一个方法的形参位置,最多只能声明一一个可变个数形参
?

这里用图片说明一下:

?

?

?

?

方法参数的值传递机制


方法的形参的传递机制:值传递

1. 形参:方法定义时,声明的小括号内的参数
实参:方法调用时,实际传递给形参的数据
2.值传递机制:
如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值

如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值

?

?

这里来一道面试题说明一下值传递:

?

?

正确的写法:
法一:
public static void method(int a, int b) {
//在不改变原本题目的前提下,如何写这个函数才能在main函数中输出a=100,b=200 
a = a*10;
b = b*20;
System.out.println(a);
System.out.println(b);
System.exit(O);//退出
}

法二:
PrintStream ps = new PrintStream(System.out){

public void println(String x) {
if("a=10".equals(x)){
X ="a=100";
}else if("b=10",equaIs(x)){
x= "b=200";
super.println(x);
};
System.setOut(ps);

错误(哒咩)
public static void method(int a, int b) {
a = 100;
b = 200;
System.out.println(a);
System.out.println(b);
}



?

递归方法的调用

递归调用是一种特殊的调用形式,指的是方法自己调用自己的形式,但是在进行递归操作的时候必须满足以下的几个条件。一、递归调用必须有结束条件。二、每次调用的时候都需要根据需求改变传递的参数内容。



public class RecursionTest
{
	public static void main(String[] args)
	{
		// 例题1:计算1-100之间所有自然数的和
		// 方式1
		int sum = 0;
		for (int i = 1; i <= 100; i++) {
			sum += i;
		}
		System.out.println(sum);

		// 方式2
		RecursionTest test = new RecursionTest();
		int sum1 = test.getSum(100);
		System.out.println(sum1);

		System.out.println("-------------------");
		int value = test.f(10);
		System.out.println(value);
	}

	// 例题1:计算1-n之间所有自然数的和
	public int getSum(int n) // 3
	{
		if (n == 1) {
			return 1;
		} else {
			return n + getSum(n - 1);
		}
	}

	// 例2:计算1-n之间所有自然数的乘积 n!
	public int getSum1(int n)
	{
		if (n == 1) {
			return 1;
		} else {
			return n * getSum1(n - 1);
		}
	}

	// 例题3:已知有一个数列: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 f(n + 2) - 2 * f(n + 1);(哒咩)
			return 2 * f(n - 1) + f(n - 2);
		}
	}

}

理解“万事万物皆对象”

(了解)
1.在Java语言范畴中,我们都将功能、结构等封装到类中,通过类的实例化,来调用具体的功能结构
1.1Scanner, String等
1.2文件: File
1.3网络资源: URL
2.涉及到Java语言与前端Html、后端的数据库交互时,前后端的结构在Java层面交互时,都体现为类、对象。
?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-01-24 10:41:48  更:2022-01-24 10:42:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:42:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码