一.方法
简单介绍
Java中的方法有点类似于C语言中的函数,都是先定义后调用。一个程序中有且只能有一个主函数public static void main(String[] args){ }
,在主函数中可以调用方法。方法也可以进行递归操作,下面我们用递归计算阶乘。
案例一
public class testMethed{
public static void main(String[] args){
long d1=System.currentTimeMillis();
System.out.printf("%d的阶乘是:%s%n",10,facterial(10));
long d2=System.currentTimeMillis();
System.out.printf("递归用时%d"+"ms",d2-d1);
}
static long facterial(int n){
if(n==1)
return 1;
else{
return n*facterial(n-1);
}
}
}
代码中的long d1=System.currentTimeMillis();
,long d2=System.currentTimeMillis();
是计算程序的运行时间。d1-d2的值是递归调用所用时间。
结果表明递归的运行时间要大于一般的循环,递归一般都要消耗很多的内存和时间,所以对于简单的问题我们一般不适用递归的方法。
案例二
public class testprime {
public static void main(String[] args){
int count=0;
outer:for(int i=1;i<100;i++){
for(int j=2;j<=i/2;j++){
if(i%j==0)
continue outer;
}
count++;
System.out.print(i+" ");
if(count%5==0)
System.out.println();
}
}
}
上面这个程序是计算1到100之间的质数,规定要求一行输出5个数字(这个案例和方法关系不大,主要是continue的用法)
二.面向对象
这里我们直接说一下面向对象中内存的分配
附上代码讲解
class computer{
String brand;
}
public class objects {
int id;
String name;
int age;
computer comp;
void play(){
System.out.print("i love play games");
}
void study(){
System.out.print("i also love study");
}
public static void main(String[] args){
objects stu=new objects();
computer comp1 = new computer();
comp1.brand = "lenove";
stu.comp = comp1;
stu.study();
System.out.println(" "+comp1.brand);
}
}
下面是整个程序的运行原理图
内存空间分为三部分:堆、栈、方法区
程序以main为入口, 整个main函数存储在栈中。
所有带new的都在堆中
定义的类在方法区中
程序开始时栈中的main函数各个变量的值都是null的,随后对变量赋的值都保存在堆中,从而栈中的变量指向堆中对应的值。方法区就是整个程序定义的所有的类。