黑马程序员__重载、内存结构和简单练习

来源:互联网 发布:seo大牛 编辑:程序博客网 时间:2024/05/15 23:53

 ------- android培训、java培训、期待与您交流! ----------

1、          重载只和参数列表(参数的个数、类型、出现顺序)有关系。只要这三点不同就构成了函数间的重载。这是经过验证的。

重载和返回类型并没有关系

2、          什么时候用重载?

当定义的功能相同,但参与运算的未知内容不同。

那么,这时就定义一个函数名称以表示函数功能,方便阅读,而通过参数列表的不同来区分多个同名函数。

3、        关于重载的几点:

void show(int a,char b,double c){}重载的函数有:

a.

void show(int x,char y,double z){} //不重载,因为和原函数一样,如果和给定函数同时存在于一个类中,那么将会编译出错。这个函数不可以和给定函数同时存在于一个类中。

b.

int show(int a,double c,char b){} //重载,因为参数类型不同。注意:重载和返回值类型没关系。(这里是因为参数出现的顺序不同。)

c.

void show(int a,double c,char b){}//重载,因为参数类型不同。注意:重载和返回值类型没关系。

 

d.

boolean show(int c,char b){}//重载了,因为参数个数不同。

 

e.

void show(double c){}//重载了,因为参数个数不同。

 

f.

double show(int x,char y,double z){}//(不重载)如果和给定函数同时存在于一个类中那么将会编译出错,这个函数不可以和给定函数同时存在于一个类中。

 

总结:同名函数如果既不和给定函数构成重载不和给定函数构成重写,那么这个函数就不能存在于该类中,也不能存在于该类的父类中。否则将会编译失败

4、          java中数组的几种定义:

1)               int[] arr=new int[5];

2)               int[] arr=new int[]{3,5,1,7};//静态初始化方式

3)               int[] arr={3,5,1,7};//静态初始化方式

4)               或者 []放到变量arr的后面也可以。

这里的arr变量是数组类型的,而不是int类型的(int只是表示数组arr中元素的类型。)

5、          数组其实就是一种装数据的容器

 

6、Java程序在运行时,需要在内存中分配空间。为了提高运算效率,又对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式内存管理方式

java在启动时,一共在内存中划分了5片空间来进行自身数据的存储:

1)栈内存;

用于存储局部变量(与在类中直接定义的变量不一样),当数据使用完毕,所占空间会自动释放。(凡是局部变量都存储在栈内存中。具体的说是存储在该局部变量所在函数的函数区中

2)堆内存;

              用于存储所有引用类型的数组和对象。包括通过new建立的实(体)例都存放在堆内存中也包括其他所有引用类型的实体

              (凡是new出来的实体都存储在堆内存中)

              每一个实体都有内存地址值

               

              堆内存中实体(实体为引用类型)中的变量(即直接在类中定义的变量)都有默认初始化值,包括数组中没有进行过显式(人工手动)初始化的数据元素。栈内存中存储的局部变量没有默认初始化值,如果不赋值就使用在编译时将会失败!!(这是经过验证的!)

               

              实体不再被使用,会在不确定的时间内垃圾回收器回收 (垃圾回收器回收的是无任何引用的对象占据的内存空间而不是对象本身)(当一个实体在堆内存中没有任何引用使用它的时候,那么jvm就认为这个实体是垃圾。垃圾不会被立刻清除掉,而是在不确定的时间内被垃圾回收器回收、清除堆内存中的这个实体所占的内存空间)(这就是java的垃圾回收机制)

              注意:垃圾回收器回收的是无任何引用的对象占据的内存空间而不是对象本身!

              Java中的对象不再有作用域的概念,只有对象的引用才有作用域

              对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收。对于这句话我值得怀疑,不知道对不对!

3)方法区;

4)本地方法区;

5)寄存器;

 

7局部变量:定义在方法中的变量、定义在方法内的参数上的变量、定义在for循环里面的变量全都是局部的。

8

class  Demo

{

      public static void main(String[] args)

      {

            int x=3;

            show();

            int[] ab=new int[3];

      }

      public static void show()

      {

            x=5

      }

}

每个函数在运行的时候会在栈内存中开辟一个该函数区,用于存储该函数运行所需的数据main函数在运行的时候会在栈内存中开辟一个main函数区,用于存储main函数运行所需的数据,当main函数调用到show函数时在栈内存中开辟一个show函数区…………当show函数执行结束时,show函数区就在栈内存中消失了,其中的变量也随之释放。

9int[] arr = new int[3];

只定义数组而不赋值的话,数组元素有自己的默认值,对于int类型来说,默认值为0。(原因是:堆内存中的实体中的变量都有默认初始化值,见上)

10、简单练习:

/*

练习:3000米长的绳子,每天减一半。问多少天这个绳子会小于5?不考虑小数。

 

*/

1、

class  ForTest4

{

public static void main(String[] args)

{

       int day = 0;

       for(int x=3000; x>=5; x/=2)

       {

              day++;

       }

       System.out.println("day="+day);

 

       /*

       for(int x=3000; x>=5; day++) //这个也可以

       {

              x = x/2;

       }

       */

}

}

2、练习题:

第一题

 

int x = 1,y=1;

 

if(x++==2 & ++y==2)

{

x =7;

}

System.out.println("x="+x+",y="+y);//x=2,y=2

 

 

---------------------------------------------------

第二题

int x = 1,y = 1;

 

if(x++==2 && ++y==2)

{

x =7;

}

System.out.println("x="+x+",y="+y);x=2,y=1

 

---------------------------------------------------

 

第三题

int x = 1,y = 1;

 

if(x++==1 | ++y==1)

{

x =7;

}

System.out.println("x="+x+",y="+y);x=7,y=2

 

 

---------------------------------------------------

 

第四题

int x = 1,y = 1;

 

if(x++==1 || ++y==1)

{

x =7;

}

System.out.println("x="+x+",y="+y);//x=7,y=1

 

 

 

---------------------------------------------------

第五题

boolean b = true;

 

if(b==false)  //如果写成if(b=false)有结果吗?如果有,结果是?

System.out.println("a");

else if(b)

System.out.println("b");

else if(!b)

System.out.println("c");

else

System.out.println("d");

//b

if(b=false) //如果写成if(b=false)有结果吗?如果有,结果是c

//c

---------------------------------------------------

 

第六题

int x = 2,y=3;

 

switch(x)

{

default:

       y++;

case 3:

       y++;

case 4:

       y++;

}

 

System.out.println("y="+y);//y=6

原创粉丝点击