b.age=10;
它是根据age和name所占的数据类型还划分空间的;
b没有赋值,孤零零地放在那;
b=a;
让b也指向a所指向的空间,实际上是一个引用;
再次证明, 其实指向的是同一块空间;引用传递的特点;
程序员用new的方法创建一个对象,在内存里面存放;
内存有创建就应该有回收, JAVA有内存回收机制;
JAVA虚拟机发现没有对象指向的时候,会认为它是垃圾;
a=null; //a不再指向对象,是一个垃圾,会在适当的时候回收内存
C++里面开辟的内存,需要及时回收,delete/free。
成员方法(成员函数):
一个class里面的最简单的方法:
如何使用这个方法?
JAVA命名规范:
//speak
//jisuan
//参数列表,表示函数接收的参数
输入参数自动计算,比较灵活;
result和不同的方法里面的作用域不一样,不会冲突;
函数名重复,但不会冲突;
JAVA编译器比较聪明,如果有参数输入会自动区分开来;
函数名一样,参数不一样,函数的重载;
当传100会调用有参数列表的方法;
不传参数会调用没有参数列表的方法;
函数调用的原理图:
会开辟新栈;
2.和main函数的栈是完全独立的;
3.代码跳转开始执行;
4.控制台输出结果,执行完又回到原来的main那里去了;
5.main又开始执行;
要透彻的掌握类,必须要了解类的构成
class 类名{ ----> 待定...
成员变量;
}
类--类的成员变量
成员变量是类的一个组成部分,一般是基本数据类型,也可是引用类型。比如我们前面定义猫类的int age 就是成员变量。
对象--如何创建对象
创建一个对象有两种方法
1、先声明再创建
1、对象声明:类名 对象名
2、对象创建:对象名=new 类名()
2、一步到位法
类名 对象名=new 类名()
对象--如何访问(使用)对象的成员变量
对象名.变量名; //简单先这样理解,以后加下控制符此表达就不准确了。
***对象总是存在内存中的
一个小思考题[Demo.105.java]
为了让大家加深印象,我们定义一个人类(Person)(包括名字、年龄)。用一步到位法去创建一个对象
↓
我们看看下面一段代码:System.out.printlin(b.age);
1
Person a=new Person(); → 请问:b.age究竟是多少?
2
a.age=10;
3
a.name="小明";
4
Person b;
5
b=a;
***对象总是存在内存中的
一个小思考题[Demo106.java]
在明白对象是如何在内存中存在后,请大家再看看下面的思考题,请问会输出什么信息?
1
Person1 a=new Person1();
2
a.age=10;
3
a.name="小明";
4
Person1 b;
5
b=a;
6
System.out.println(b.name);//输出“小明”
7
b.age=200;
8
System.out.println(a.age);//输出a.age为200
*****重点也是难点
类--成员方法的初步介绍
在某些情况下,我们要需要定义成员方法。比如人类:除了有一些属性外(成员变量表示的年龄、姓名...),我们人类还有一些行为比如:可以说话、跑步..,通过学习,我们人类还可以做算术题。这时就要用成员方法才能完成。现在要求对Person类完善:
1、添加speak成员方法,输入出:我是一个好人
2、添加jisuan成员方法,可以计算从1+..+1000的结果
3、修改jisuan成员方法,该方法可以接收一个数n,计算从1+..+n的结果
4、添加add成员方法,可以计算两个数的和
类--类的成员方法(成员函数)定义
成员方法也叫成员函数,这里希望大家不要被两个名词搞晕了。
public 返回数据类型 方法名(参数列表)
{
语句;//方法(函数)主体
}
1、参数列表:表示成员函数输入
2、数据类型(返回类型):表示成员函数输出
3、函数主体:表示为了实现某一功能代码块
//类的调用及方法调用[Demo108.java]
public class Demo108{
public static void main(String []args){
Person p1=new Person();
p1.speak();//调用speak方法
p1.jiSuan();//调用计算方法
p1.jiSuan(200);//调用可以传入参数的计算方法
p1.add(12,10);//调用两个数的和
int res=p1.add2(23,34);//调用两个数的和并返回值到res中
System.out.println("res返回值是:"+res);
System.out.println("num1+num2+num3="+p1.add3(2,2.3f,4.5f));//返回类型一定要一致否则报错。
}
}
//定义名字的几个方法:
//1、驼峰法 如myCry;2、下划线法my_cry
//方法名在有不同参数的情况下可以使用同一个方法名,即有参数和没参数的方法可以同名
class Person{ //请注意类名首写字母应为大写如Person为类名
int age;
String name;
//1、可以输出我是好人方法
public void speak(){ //请注意方法名的首写字母应为小写如speak为方法名
System.out.println("我是一个好人");
}
//2、可以计算1+..+1000的方法
public void jiSuan(){
int result=0;
for(int i=1;i<=1000;i++){
result=result+i;
}
System.out.println("1+..+1000结果是"+result);
}
//3、带参数的成员方法,可以输入n值并计算1+..+n
public void jiSuan(int n){
int result=0;
for(int i=1;i<=n;i++){
result+=i;
}
System.out.println("1+..+n结果是"+result);
}
//4、计算两个数的和
public void add(int num1,int num2){
int result=0; //与下面一句等同于return num1+num2;
result=num1+num2;
System.out.println("num1+num2="+result);
}
//5、计算两个数的和,并将结果返回给主调(调用它的)函数
//注意:返回类型和返回结果的类型要一致
//注意:在调用某个成员方法的时候,给出的具体数值的个数
//和类型要相匹配。
public int add2(int num1,int num2){
return num1+num2;
}
//6、计算两个float数的和,并将结果返给主调函数
public float add3(int num1,float num2,float num3){
return num1+num2+num3;
}
}