方法重载method overload,java内存和java类

对于功能类似的方法,参数列表不一样,但却需要记住多种方法名称,很麻烦。即:多个方法名称一样,但参数列表不一样,java自动调用实形参的参数数目一样的方法。参数类型不同也可以重载,参数多类型顺序不同也可以重载。但与参数名称无关,与返回值类型无关。

数组:是一种引用类型。
动态初始化:指定长度。
int[] arrayA=new int[300];
String[] arrayB=new String[10];
数据类型[] 数组名称=new 数据类型[数组长度]
动态初始化数组,元素会有一个默认值
静态初始化:指定内容。
数据类型[] 数组名称=new 数据类型[] {元素1,元素2}
String[] arrayB=new String[]{ “hello”,“zhuaba”}
省略格式 int[] arrayC={10,20,30}

System.out.println(array)直接打印数组名称,得到的是数组的内存地址哈希值

java中的内存划分:
1.栈stack,存放方法中的局部变量(方法的参数,或方法{}内的变量),超出作用域时立刻从栈内存中消失。方法的运行在栈当中。
2.堆heap,new出来的都在堆当中。堆内存中的数据都有默认值,内容都有一个16进制的地址值(数组就存在堆当中)
3.方法区method area:存储.class相关信息,包含方法信息。
4.本地方法栈:与os相关
5.寄存器:与cpu相关

在图1中,方法区存储有关方法的信息(如方法名,返回值等);方法运行的时候,首先将方法放入栈中,然后运行;图中定义的数组存在堆内存中,栈中的数组存储的是数组的地址值(也就是数组首个元素的地址),所以println打印出的是array的地址值;赋值修改时,也是根据栈内存中的数组地址,到堆内存中修改对应的值
图1:

int[] arrayB=arrayA 数组A赋值给数组B
此时,arrayB的地址与arrayA相同(两数组指向同一个地址),一个值修改,另一个也改变。即引用类型

arrayindexoutofboundsexception数组索引越界异常

所有的引用类型变量,都可以赋值为null,表示其中什么都没有。如果只赋值一个null但没有进行new创建,将会发生空指针异常nullpointerexception

获取数组长度:数组名称.length,如arrayB.length;数组长度在程序运行期间长度不改变。例子如下:
int arrayC[]=new int[3]
arrayC[]=new int[5]
此时arrayC被重新分配一个能存5个元素内存,而不是在原有3个元素内存上扩充

循环遍历数组 for(int i=0;i<array.length;i++){System.out.println(array[i]);}
简化代码:直接敲array.fori回车,再sout回车

方法返回值为数组类型
public static int[] cal(int a,int b,int c){int array[]=new int[2] return array}
数组作为方法的参数,传进去的是数组的地址值;作为方法的返回值,返回的也是地址值

定义一个类 public class student{
String name;int age;
public void eat(){ 成员方法和成员变量;}
}
创建一个对象:类名称 对象名=new 类名称()
如:Student stu=new Student();创建一个名为stu的对象
使用成员变量:对象名.成员变量名
使用成员方法:对象名.成员方法名()

对象中的内存:
如图2,main()方法要执行,必须放在栈中执行,new出的对象one中的成员变量和成员方法都在堆中,堆中记录的是成员方法所在的方法区的地址值。当调用成员方法时,栈区中的正在执行的程序根据对象的地址值(图2中红色地址)(成员变量直接在堆中找到),找到堆中对象的成员方法,堆中的成员方法根据地址值(图2中绿色地址)找到方法区中的成员方法call,然后将call方法放入栈中运行(栈先进后出)。
两个对象是同一个类,调用成员方法时,堆中指向方法区中的同一个成员方法的地址值
图2:

两个引用指向同一个对象,操作时,两个变量也都对同一个对象进行操作(等于是一个对象,两个名字)

使用对象作为方法的参数,实际上传递的是对象的地址值。
图3:

使用对象作为返回值类型,同理

局部变量和成员变量的区别:
局部变量定义在方法内部,成员变量定义在外部(直接写在类里面);局部变量只能在方法当中使用,成员变量整个类通用;局部变量没有默认值,用的时候必须手动赋值,成员变量没有赋值的话有默认值(默认值和数组相同),局部变量位于栈中,成员变量位于堆中;局部变量随着方法入栈而诞生,出栈即消失。成员变量随对象创建而诞生。

使用private关键字对需要保护的成员变量进行修饰,在本类中依然可以随意访问,但超出类范围之外就不能访问了;间接访问private变量,使用getter/setter方法。

方法的局部变量和类的成员变量重名时,根据就近原则优先用局部变量;若要使用成员变量,使用 this.成员变量名 则能调用成员变量(python中的self)

构造方法:
专门用来创建对象的方法,通过new来创建对象时,其实调用了构造方法(python中的构造函数__init__())
如student stu =new student();
public 类名称(参数类型 参数名称){
方法体
}
构造方法名称必须和所在类名称完全一样;不能写返回值(也不写void)
如果没有构造方法,编译器编译时自动产生一个构造方法(这个构造方法没有参数和方法体,什么事也不做)
构造方法也可以重载(方法名称相同参数不同)

一个标准的类通常要拥有下面四个组成部分
1.所有成员变量用private关键字修饰
2.每个成员变量有一对getter/setter方法
3.一个无参数的构造方法
4.一个全参数的构造方法
(java bean)
alt+insert快捷键创建成员变量的getter/setter方法和类的构造方法(select none表示无参数)

java中导入包:import 包名.类名称
和当前类属于同一个包,导包语句可以省略不写

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值