(三)java从零开始(方法和堆栈)有待研究
来源:互联网 发布:淘宝客服沟通技巧简答 编辑:程序博客网 时间:2024/05/16 14:13
方法的引入
方法:完成特定功能的代码块
在其他语言中可能被叫做函数,其本质就是一种特定的功能
方法的格式 :
修饰符 返回值类型 方法名 (参数类型1 参数名1,参数类型2.。。){
方法体;
return 返回值;(void不需要)
}
参数名定义方法和调用方法可以不一样。调用方法如果有返回值需要接受返回值。
方法的分类:
有明确返回值的方法:有return返回语句
没有明确返回值的方法:返回值类型为void,不需要返回值,但可以有return用于结束方法。
方法的注意事项:
方法是平级的,不可以嵌套
如果返回值是一个明确的数据类型,那么必须有才return返回一个值
方法调用才生效
不接受返回值,单独调用没有意义,直接sysout一个数据(输出调用)意义不大,用变量接受返回值(赋值调用)有意义
没有返回值的方法,只能单独调用,用作输出。
方法名一样,参数列表不同(JVM根据数据类型或者参数个数不同,顺序等),叫做方法重载。与返回值类型无关。
方法重载的好处,方便记忆,提高效率。
数组的引入
数组:存储多个同一个数据类型变量的容器。
既可以存储基本数据类型,也可以存储引用数据类型。
数据类型[] 数组名称;(声明数组之后一定要初始化)
数组初始化:为数组中每个元素申请内存空间,并为数组元素赋值。
静态初始化:指定元素的值,系统根据元素个数决定数组长度。int[] arr={1,2,3}. int[] arr =new int[]{1,2,3}
动态初始化:指定数组长度,系统为数组中元素进行初始化。int[] arr =new int[80];
直接输出数组名称,结果为数组在内存中的地址值。
数组中从0开始编号,最大的编号为数组长度-1,这个值也叫做索引(角标)。
成员变量,jvm会完成初始化,自动赋值。定义在方法中的局部变量必须手动赋值。
栈中是地址值,指向堆中new代表的内存空间
不同的数组可以指向同一个内存地址。
不论是静态初始化还是动态初始化,要么制定长度,要么制定元素,不能两个都指定。
超出角标,可以编译,运行会报错。java.lang.ArrayIndexOutOfBoundsException:角标越界,超出范围
java.lang.NullPointerException 空指针异常(因为访问的元素为null)
逆序输出数组思路
让数组元素逆序互换,定义开始索引和结束索引,通过中间变量temp互换两个索引对应的值,开始索引不断+1,结束索引不断-1,直到开始索引等于结束索引。
用for循环实现遍历
获取数组最值思路
假设第一个元素就是最值,然后进行遍历,拿这个元素和剩余的元素进行比较,发现更大或者更小,进行替换。
public static int[] getNumber(int[] arr){int max=arr[0];int min=arr[0];for(int i=0;i<arr.length;i++){if(arr[i]>max){max=arr[i];}if(arr[i]<min){min=arr[i];}}int[] result ={max,min};return result;}方法一般为先使用后创建。以便于规划整体
二维数组(元素为一维数组的数组)
第一种:
int[][] 数组名称=new int[m][n];
m:有多少个一维数组
n:每个一维数组中有多少元素
取值?
数组名[m][n] :获取第m+1个数组中第n+1个元素
二维数组的地址是首地址,所包含的每个数组都有自己的地址。
第二种:
int[][] 数组名=new int[m][];
只开辟了m个一维数组的空间,数组长度并没有指定。
public static void main(String[] args) {// TODO Auto-generated method stubint[][] arr = new int[3][];System.out.println(arr[0]);//System.out.println(arr[0][0]);arr[0] = new int[5];System.out.println(arr[0]);System.out.println(arr[0][0]);}在对每个一维空间进行初始化之前,没有地址,而且每个数组的元素都是空。(空指针异常)
对一维数组初始化之后,一维数组有了对应的内存地址,一维数组中的元素为0.
类似于动态初始化
第三种:
int[][] 数组名称=new int[][]{{1,2,3}{1,2}{3,4}};
同理,手动赋值之后不能指定数组个数和元素个数
二维数组的length是一维数组的个数
遍历二维数组采用重载,一个参数为int[][],另一个参数为int[]。在int[][]中再次调用参数为int[]的方法
面向对象思想
功能多了,方法就多了,方法多了,就需要很多类来存放,类多了,就做成框架。编程思想:先找到框架,再找到类,再找到对应的方法。
面向过程的思想:分析要做什么,再分析怎么做,并一步步的实现。
面向对象就是基于面向过程的。将复杂事情简单化,从执行者变为指挥者。
面向对象开发:
不断的创造对象,指挥对象做事情。
面向对象设计:
管理和维护对象之间的关系
面向对象的特征:
封装
继承
多态
定义类:属性对应成员变量。 行为对应成员方法。
使用类的方法,创建类的对象
栈:存放的都是局部变量,不会为变量赋值,方法的执行都是在栈中。基本数据类型。
堆:存放着new出来的东西,会为变量赋值,引用变量的初始化都是null,基本数据类的值就是默认值。
方法区:类的字节码文件存放在方法去中的class区,方法区中存放的都是唯一的东西,方法区里面还有一个static区,创建对象时,在方法区中的字节码文件中的没有被static修饰的成员变量会在堆中拷贝一份,方法还是存放在方法区中的class区中,堆中存放的是方法的地址值。常量池。
方法区:1⃣️class区
2⃣️static区
不创建对象,类也会编译。
成员变量和局部变量之间有哪些区别?
类中的位置
成员变量定义在类中,方法外
局部变量定义在方法内部或者参数列表上
内存中位置
成员变量在堆中
局部变量在栈中
生命周期
成员变量随着对象的创建而创建,随着对象的消失而消失
局部变量随着方法的创建而创建,随着方法的消失而消失
初始化值
成员变量有初始化值
局部变量需要手动赋值
利用同名变量的时候,遵循就近原则
基本数据类型和引用数据类型作为实数参数传递时的区别
基本数据类型存储在栈中,栈中调用方法互换两个变量的值,随后方法结束,交换结果随之消失,变量值依旧不变。形参不影响实参
引用数据类型存储在堆中,发生改变就改变了,再次调用显示就是改变后的结果。形参影响实参。
定义方法是的参数就是形参,调用方法的时候参数就是实参。
匿名对象:没有名字的一个对象
new test().show(). 直接匿名调用方法
使用场景:
当类中的方法仅需要调用一次的时候
当类的对象作为实参传递时,可以使用匿名对象
上面的变量名称相同就近原则导致了this的产生
this:this所在的方法正在被哪个对象调用,this就代表该对象。
Student s =new Student();
s.setAge(18);
对象s调用Student类中的方法setAge。需要将setAge中的局部变量输出,this.age代表s的age变量。
构造方法/构造函数:一般用于初始化数据
1⃣️没有返回值类型,连void都没有
2⃣️return不能返回一个具体的值,但是可以跳出构造方法。
3⃣️构造方法名称和类名相同
Student s =new Student(); 不写的话,系统提供无参构造方法。
有参构造方法只有一次。set方法是持久的。
成员方法的分类:
有参无参,有返回值无返回值。拼接起来共四种
标准的JavaBean:
1⃣️成员变量(允许外部访问成员变量是有安全隐患的,所以要将变量私有化,提供公共的访问方式,在访问方式中做一些安全校验)
2⃣️构造方法
有参构造方法+无参构造方法
3⃣️成员方法
set❌❌❌
get❌❌❌
打印所有成员变量的方法
标准JavaBean初始化内存图解
- (三)java从零开始(方法和堆栈)有待研究
- 有待研究
- java基础(三)方法/数组/堆栈/
- TCP状态图和常见问题这里有待研究,怎么是九种状态
- 对Java克隆方法的研究(三)
- 从零开始学java(三)数据类型和注释等
- 有待研究的文章列表
- Td/Tn/bt 参数与PID的关系及设置方法(有待仔细研究,仅供参考)
- 238. Product of Array Except Self (后两种方法有待进一步研究)
- 打开和保存java源码(有待优化)
- java堆和堆栈
- Java 线程与并发研究系列三(join()方法使用)
- Java.Utils得到并验证4位数的验证码(没看懂,有待研究)
- java堆栈方法区详解
- Java之堆栈、方法区
- java 从零开始,学习笔记之基础入门<类_方法_构造器>(三)
- 54. Spiral Matrix (有待进一步研究)
- 机载激光雷达测量技术理论与方法读书笔记(1)机载激光雷达测量技术的有待研究方向
- ngrox配置内网映射
- js promise 模式的 异步回调函数
- 王者荣耀英雄购买商城网页版
- UVA 1585
- 使用Razor视图引擎来生成邮件内容
- (三)java从零开始(方法和堆栈)有待研究
- UVA11419[SAM I AM] 二分图最小覆盖模型
- JAVA基础——关于java中数字类型面试题
- 优先队列详解(转载)
- 记一次完整手机APP项目的开发
- 【jQuery】on注册事件的时候处理函数自动运行
- hdu 1024 最大M字段和
- [luogu-2680]noip2015day2-T3 运输计划 题解
- MFC控件