java 方法及引用数据类型
一、方法
在java中,方法就是用来完成解决某件事情或实现某个功能的办法。
1、语法格式:
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,......){
执行语句
………
return 返回值;
}
l 修饰符:方法的修饰符比较多,有对访问权限进行限定的,有静态修饰符static,还有最终修饰符final等,这些修饰符在后面的学习过程中会逐步介绍public
l 返回值类型:用于限定方法返回值的数据类型void,与返回值数据类型相同
l 参数类型:用于限定调用方法时传入参数的数据类型
l 参数名:是一个变量,用于接收调用方法时传入的数据
l return关键字:用于结束方法以及返回方法指定类型的值
l 返回值:被return语句返回的值,该值会返回给调用者,只有返回值类型为void时,没有返回值
通过一个图例演示getArea()方法的整个调用过程,如下图所示。
2、方法定义练习
l 无返回值无参数方法,如打印3行,每行3个*号的矩形
public static void printRect(){
//打印3行星
for (int i=0; i<3; i++) {
//System.out.println("***"); 相当于是打印3颗星,换行
//每行打印3颗星
for (int j=0; j<3; j++) {
System.out.print("*"); // ***
}
System.out.println();
}
}
l 有返回值无参数方法,如键盘录入得到一个整数
public static int getNumber(){
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
return number;
}
l 无返回值有参数方法,如打印指定M行,每行N个*号的矩形
public static void printRect2(int m, int n){
//打印M行星
for (int i=0; i<m; i++) {
//每行中打印N颗星
for (int j=0; j<n; j++) {
System.out.print("*");
}
System.out.println();
}
}
有返回值有参数方法,如求三个数的平均值
public static double getAvg(double a, double b, double c) {
double result = (a+b+c)/3;
return result;
}
3、方法的重载
Java允许在一个类中定义多个名称相同的方法,但是参数的类型或个数必须不同,这就是方法的重载。
条件:方法的,修饰符 返回值类型 方法名,都相同,
只能是参数类型不同、或者参数数量不同、或者参数顺序不同
下面的三个方法互为重载关系:
l public static int add(int x,int y) {逻辑} //两个整数加法
l public static int add(int x,int y,int z) {逻辑} //三个整数加法
l public static int add(double x,double y) {逻辑} //两个小数加法
public class MethodDemo03 {
public static void main(String[] args) {
// 下面是针对求和方法的调用
int sum1 = add(1, 2);
int sum2 = add(1, 2, 3);
double sum3 = add(1.2, 2.3);
// 下面的代码是打印求和的结果
System.out.println("sum1=" + sum1);
System.out.println("sum2=" + sum2);
System.out.println("sum3=" + sum3);
} // 下面的方法实现了两个整数相加
public static int add(int x, int y) {
return x + y;
}
// 下面的方法实现了三个整数相加
public static int add(int x, int y, int z) {
return x + y + z;
}
// 下面的方法实现了两个小数相加
public static double add(double x, double y) {
return x + y;
}
}
上述代码中定义了三个同名的add()方法,它们的参数个数或类型不同,从而形成了方法的重载。
注意事项:
l 重载方法参数必须不同:
参数个数不同,如method(int x)与method(int x,int y)不同
参数类型不同,如method(int x)与method(double x)不同g
参数顺序不同,如method(int x,double y)与method(double x,int y)不同
l 重载只与方法名与参数类型相关与返回值无关
如void method(int x)与int method(int y)不是方法重载,不能同时存在
l 重载与具体的变量标识符无关
如method(int x)与method(int y)不是方法重载,不能同时存在
4、参数传递
当我们要调用一个方法时,我们会把指定的数值,传递给方法中的参数,这样方法中的参数就拥有了这个指定的值,可以使用该值,在方法中运算了。这种传递方式,我们称为参数传递。
- 在这里,定义方法时,参数列表中的变量,我们称为形式参数
- 调用方法时,传入给方法的数值,我们称为实际参数
例:
public class ArgumentsDemo02 {
public static void main(String[] args) {
int[] arr = { 1, 2, 3 };
change(arr);// 调用方法时,传入的数值称为实际参数 for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
} public static void change(int[] arr) {// 方法中指定的多个参数称为形式参数
for (int i = 0; i < arr.length; i++) {
arr[i] *= 2;
}
}
}
运行结果:
参数传递内存图解:
结论:
l 当调用方法时,如果传入的数值为基本数据类型(包含String类型),形式参数的改变对实际参数不影响
l 当调用方法时,如果传入的数值为引用数据类型(String类型除外),形式参数的改变对实际参数有影响
只有:数组、集合、对象、成员变量可以进堆
二、引用数据类型
1、分类
我们可以把类的类型为两种:
l 第一种,Java为我们提供好的类,如Scanner类,Random类等,这些已存在的类中包含了很多的方法与属性,可供我们使用。
l 第二种,我们自己创建的类,按照类的定义标准,可以在类中包含多个方法与属性,来供我们使用。
2、类的定义格式
不需要有 main 方法
创建java文件,与类名相同
public class 类名{
数据类型 属性名称1;
数据类型 属性名称2;
…
}
3、类的使用格式
格式如下:
导包:我们将所有的类放到同一个文件夹下,可以避免导包。
创建对象:数据类型 变量名 = new 数据类型();
调用方法:目前我们定义的自定义类不涉及方法,只是属性(自定义类中的方法部分在面向对象部分讲解)
访问属性:变量名.属性 (这是当前的方式,后期会采取调用方法的方式替代掉直接访问的方式来完成对属性的访问。)
例:
//定义一个类:Phone
public class Phone {
/*属性 */
String brand;// 品牌型号
String color;// 颜色
double size; // 尺寸大小
}
使用类
public class Test {
public static void main(String[] args) {
//定义了一个Phone类型的变量p
Phone p = new Phone();
/*
* 通过p,使用Phone中的属性
*/
//访问p中的brand品牌属性
p.brand = "苹果6s";[为p中brand属性赋值为”苹果6s”]
//访问p中的color颜色属性
p.color = "白色";[为p中color属性赋值为”白色”]
//访问p中的size尺寸大小属性
p.size = 5.5;[为p中size属性赋值为5.5] System.out.println("手机品牌为" + p.brand[使用p中brand属性值参与运算]);
System.out.println("手机颜色为" + p.color[使用p中color属性值参与运算]);
System.out.println("手机尺寸大小为" + p.size[使用p中size属性值参与运算]);
}
}
运行结果:
4、自定义类型注意事项与内存图
上述代码中,通过类Phone创建出来的变量p,它相当于我们生活中的盒子,里面包含了它能够使用的属性。
l 通过 p.属性名 就可以对属性进行操作
l 与引用类型数组类似,引用类型的自定义类型的变量,直接变量时,结果为对象地址值,这里可以通过内存图简单解释。
三、集合 ArrayList
数组可以保存多个元素,但在某些情况下无法确定到底要保存多少个元素,此时数组将不再适用,因为数组的长度不可变。
为了保存这些数目不确定的元素,JDK中提供了一系列特殊的类,这些类可以存储任意类型的元素,并且长度可变,统称为集合。
在ArrayList内部封装了一个长度可变的数组,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList集合看作一个长度可变的数组。
1、集合的创建
导包:import java.util.ArrayList; 创建对象:与其他普通的引用数据类型创建方式完全相同,但是要指定容器中存储的数据类型: ArrayList<要存储元素的数据类型> 变量名 = new ArrayList<要存储元素的数据类型>();
注意:
l 集合中存储的元素,只能为<>括号中指定的数据类型元素;
l “<要存储元素的数据类型>”中的数据类型必须是引用数据类型,不能是基本数据类型;
下面给出8种基本数据类型所对应的引用数据类型表示形式:
2、 集合中常用方法
例:
import java.util.ArrayList;
public class ArrayListDemo01 {
public static void main(String[] args) {
// 创建ArrayList集合
ArrayList<String> list = new ArrayList<String>();
// 向集合中添加元素
list.add("stu1");
list.add("stu2");
list.add("stu3");
list.add("stu4");
// 获取集合中元素的个数
System.out.println("集合的长度:" + list.size());
// 取出并打印指定位置的元素
System.out.println("第1个元素是:" + list.get(0));
System.out.println("第2个元素是:" + list.get(1));
System.out.println("第3个元素是:" + list.get(2));
System.out.println("第4个元素是:" + list.get(3));
}
}
补充方法:
l boolean add(int index, Object obj)
n 功能:在集合中指定index位置,添加新元素obj
n 功能说明:假设集合list中有元素[“java”,“javaEE”],当使用add(1,“javaWeb”)后,集合list中的元素为[“java”,“javaWeb”,“JavaEE”]。
l Object set(int index, Object obj)
n 功能:用指定元素obj替代集合中指定index位置的元素
n 功能说明:假设集合list中有元素[“java”,“javaEE”],当使用set(0,“javaWeb”)后,集合list中的元素为[“javaWeb”,“JavaEE”]。
l Object remve(int index)
n 功能:从集合中删除指定index处的元素,返回该元素
n 功能说明:假设集合list中有元素[“java”,“javaEE”],当使用remove(0)后,集合list中的元素为[“JavaEE”],返回值为“java”。
l void clear()
n 功能:清空集合中所有元素
n 功能说明:假设集合list中有元素[“java”,“javaEE”],当使用clear()后,集合list中的元素为空[]。
3、集合的遍历
用for循环
补充:长度的获取:集合:size()、数组:length属性、字符串:length()
import java.util.ArrayList;
public class ArrayListDemo02 {
public static void main(String[] args) {
//创建ArrayList集合
ArrayList<Integer> list = new ArrayList<Integer>();
//添加元素到集合
list.add(13);
list.add(15);
list.add(22);
list.add(29);
//遍历集合
for (int i = 0; i < list.size()[获取集合中元素的个数]; i++) {
//通过索引,获取到集合中每个元素
int n = list.get(i)[获取集合中指定位置上的元素值];
System.out.println(n);
}
}
}
java 方法及引用数据类型的更多相关文章
- Java运算符和引用数据类型(Scanner、Random)
运算符 算术运算符: 运算符 运算规则 范例 结果 + 正号 +3 3 + 加 2+3 5 + 连接字符串 “中”+“国” “中国” - 负号 int a=3;-a -3 - 减 3-1 2 * 乘 ...
- Java运算符、引用数据类型、流程控制语句
1运算符 1.1算术运算符 运算符是用来计算数据的符号. 数据可以是常量,也可以是变量. 被运算符操作的数我们称为操作数. 算术运算符最常见的操作就是将操作数参与数学计算: 运算符 运算规则 范例 结 ...
- java基础(4):引用数据类型、流程控制语句
1. 引用数据类型 1.1 Scanner类 我们要学的Scanner类是属于引用数据类型,我们先了解下引用数据类型. 引用数据类型的使用: 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有 ...
- java 中的引用数据类型
字符串String 在java 中,字符串不是基本数据类型,而是String 类的对象,当我们创建一个字符串的时候,真的是要使用new 来调用String 构造函数 String str = new ...
- 1、探究java方法参数传递——引用传递?值传递!
原创博文,转载请注明出处.谢谢~~ java程序运行时,其对象是怎么进行放置和安排的呢?内存是怎么分配的呢?理解好这个很有好处!java有5个地方可以存储数据: 1.寄存器.这是最快的存储区,位于处理 ...
- Java改变引用数据类型的值
Java改变引用数据类型的值 在Java中,引用数据类型的数据传递的是值(地址)的拷贝 对于以下代码 class BirthDate { private int day; private int mo ...
- java中的基本数据类型和引用数据类型
java中基本数据类型有8种:byte,short,int,long,char,float,double,boolean 整型有四种:byte short,int,long byte: 1字节 ...
- Java方法的参数是按值传递的.【转】
在Java中,所有的方法参数,都是"按值传递". 有那么一种说法,Java中基本类型是按值传递,对象是按引用传递.这个说法其实是不确切的,确切的说法是 Java中基本类型将值作为参 ...
- java引用数据类型在方法中的值传递
package org.jimmy.autosearch20180821.test; public class TestStringArr { public static void main(Stri ...
随机推荐
- MongoDB快速入门教程 (3.2)
3.2.索引 索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,建立索引,通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条 ...
- Shader专题:卡通着色(一)控制颜色的艺术
什么是 Shader? 关于什么是 Shader ,各种百科各种教程都有说过,但是今天我们就从一个另一个角度去试着理解什么是 Shader? 我们先看下 Shade 的英文意思,如下: v.给...遮 ...
- max depth exceeded when dereferencing c0-param0问题的解决
在做项目的时候,用到了dwr,有一次居然报错,错误是 max depth exceeded when dereferencing c0-param0 上网查了一下,我居然传参数的时候传的是object ...
- LeetCode60. 第k个排列
解法一:用next_permutation()函数,要求第k个排列,就从"123...n"开始调用 k - 1 次 next_permutation()函数即可. class So ...
- 半导体质量管理_eCAP LineWorks SPACE eCAP(电子OCAP)
用于设计和实施纠正措施的自动化工作流程 以电子方式管理纠正措施的工作流程 LineWorks SPACE的此附加程序提供了设计和自动实施纠正措施(电子纠正措施计划,eCAP)的工作流程.这样可以确保您 ...
- HTTP 协议详解(二)
前面一篇已经说过了 HTTP 的基本特性,HTTP 的发展史,前情回顾.这一篇就更详细的 HTTP 协议使用过程一些参数配置,缓存,Cookie设置相关的细节做一些梳理. 数据类型与编码 在 TCP/ ...
- JAVA死锁排查-性能测试问题排查思路
死锁原因 Java发生死锁的根本原因是:在申请锁时发生了交叉闭环申请.即线程在获得了锁A并且没有释放的情况下去申请锁B,这时,另一个线程已经获得了锁B,在释放锁B之前又要先获得锁A,因此闭环发生,陷入 ...
- 13.Camera摄像机常用属性
选中Main Camera相机,在最右侧的Inspector面板可以看到有Camera组件,该组件下有一些摄像机常用的属性. 1.Clear Flags属性 SkyBox:天空盒(默认效果,场景会有天 ...
- 有点愧疚,今天把unity官方骗了...
今天下午2点,突然给我发了一封邮件说我违规: Unity Technologies Hello, Your Account: *@*.net has been suspended and you ca ...
- arm64-v8a 静态成员模板 undefined reference to
谷歌发布新包需要64位的so Application.mk 中 APP_ABI := armeabi armeabi-v7a x86 x86_64 arm64-v8a 添加了 arm64-v8a 和 ...