类
基本格式
class 类名{
类体
}
类的声明
class People{
}
class 植物{
}
类体
class Ladder{float above;float bottom;float height;float area;float computer(){area=(above+bottom)*height/2.0f;return area;}void setHeight(float h){height=h;}
}
成员变量
成员变量可以是Java中任何一种数据类型
成员变量的默认值
逻辑型数据默认是flase, 整数类型数据默认值是0,字符类型默认值是NULL,浮点类型默认值是0.0f
成员变量的有效范围
在整个类的所有的方法里都有效,其有效与它在类体中出现的位置无关
上述Ladder类等效于
class Ladder{float above;float bottom;float area;float computer(){area=(above+bottom)*height/2.0f;return area;}float height;void setHeight(float h){height=h;}
}
方法
一般格式
方法头{
方法体内容
}
方法头
int speak() //无参{return 23;}int add(int x,int y,int z)//有参{return x+y+z;}
注:当一个方法是void类型,该方法不需要返回值
方法体
在方法体中声明的变量和方法的参数被称为局部变量
局部变量只在方法内有效
如果局部变量是在循环语句中,那么该局部变量的有效范围是在该循环语句内
区分局部变量和成员变量
如果局部变量和成员变量的名字相同,那么成员变量被隐藏,即该成员变量在这个方法内暂时失效
class temple1 {int x=10,y;void f(){int x=5;y=x+x;//y=10}
}
如果想在该方法中使用被隐藏的成员变量,必须使用关键字this
class temple2 {int x=10,y;
void f(){int x=5;y=x+this.x;//y=15
}
}
注:局部变量没有默认值
构造方法
构造方法的名字必须与所在的类的名字完全相同,而且没有类型
一个类中可以有多个构造方法但必须保证他们的参数不同(个数,类型不同)
构造方法的主要作用是初始化对象的状态,即设置对象在开始时应具有的值和状态。这是确保对象在被使用之前已经准备好其必要的数据和资源的关键步骤。
注:如果没有编写构造方法,系统会默认该类只有一个构造方法,该默认构造方法是无参的,且方法体中没有语句。例:
Ladder(){
}
自定义构造方法
class Point{int x,y;Point(){x=1;y=1;}Point(int a,int b){x=a;y=b;}
}
创建对象
对象的声明
类的名字 对象的名字;
例如:
Ladder ladder
为声明的对象分配变量
class Point {int x, y;Point(int a, int b) {x = a;y = b;}
}public class Example {public static void main(String[] args) {Point p1 = new Point(10, 20);Point p2 = new Point(23, 25);// 现在 p1 和 p2 都已经被正确实例化和初始化}
}
注:new运算符在为成员变量分配内存后,将计算出一个称作引用的值(该值包括着这些成员变量内存位置及相关的重要信息)即表达式new xiyoujiRenwu()是一个值,如果把引用赋值给zhubajie
zhubajie=new xiyoujiRenwu();
创建多个不同对象
一个类通过new运算符可以创建多个不同对象,这些对象的变量将被分配到不同放到不同的内存空间
zhubajie = new XIyoujiREnwu();
sunwukong = new XiyoujiRenwu();
注:new标识符只能和类的构造方法进行计算,运算的最后结果是一个16进制的数
使用对象
1、对象操作自己的变量
对象通过使用点访问符"."访问自己的变量,访问格式为:
对象.变量;
2、对象调用类中的方法
调用格式:
对象.方法;
例子:
class Xiyoujirenwu{float height,weight;String head,ear;void speak(String s){head="歪着头";System.out.println(s);}
}
public class test1 {public static void main(String []args){Xiyoujirenwu zhubajie;//声明变量zhubajie=new Xiyoujirenwu();zhubajie.height=1.8f;zhubajie.weight=1.62f;zhubajie.head="大头";zhubajie.ear="一双大耳朵";System.out.println("猪八戒的头为:"+zhubajie.head);//大头System.out.println("猪八戒的身高为:"+zhubajie.height);System.out.println("猪八戒的体重为:"+zhubajie.weight);zhubajie.speak("俺老朱想娶媳妇");System.out.println("猪八戒的头为:"+zhubajie.head);//歪着头}
}
对象的引用和实体
分配给对象的变量被习惯地称作对象的实体
1、避免使用空对象
2、重要结论
一个类声明的两个对象如果具有相同的引用,两者就具有完全相同的变量(实体)
在JAVA中,对于同一个类的两个对象object1和object2,允许进行如下操作:
object1=object2;
3、垃圾收集
一个类声明的两个对象如果具有相同的引用,两者就具有完全相同的实体,Java有垃圾收集机制,这种机制周期性的检测某个实体是否不在被任何对象引用,假如程序中运行了如下的赋值语句:p1=p2;,(他们的本质是一样的),在系统看来他们的名字是一样的
例子:
class Point{int x,y;void setXY(int m,int n){x=m;n=y;}
}
public class test1 {public static void main(String []args){Point p1=null;p1=new Point();System.out.println("p1的引用:"+p1);p1.setXY(111,222);System.out.println("p1的x,y的值为:"+p1.x+p1.y);}
}
参数传值
参数属于局部变量。方法被调用时,参数变量必须有具体的值
基本数据类型参数的传值
参数传递的值的级别不可以高于该参数的级别;例如:不可以向int型参数传递一个float值,但是可以向double型参数传递一个float级别
例子:
class Computer{int add(int x,int y){return x+y;}
}public class test1 {public static void main(String []args){Computer com =new Computer();int m=100;int n=200;int result =com.add(m,n);System.out.println("m+n=:"+result);}
}
引用类型参数的传值
Java的引用型数据包括数组,对象,接口
注:当参数是引用类型时,“传值”传递的是变量中存放的“引用”,而不是变量所引用的实体
可变参数
在声明方法时不给出参数列表中从某项开始直至最后一项参数的名字和个数,但这些参数的类型必须相同。可变参数使用“...”表示若干个参数
例如:
public void f(int ...x)
再如:
public void g(double a,int...x)
注:
public void method(int ...x,int y)//wrong
可变参数x代表的最后一个参数不是method方法的最后一个参数
参数代表可以通过下标运算来表示参数列表中的具体参数,即x[0]、x[1]、...、x[m-1]分别表示x代表的第1~m个参数。
例子:计算个数经常变化,又无规律可循
public int GetSum(int...x){int sum=0;for (int i=0;i<x.length;i++){sum=sum+x[i];}return sum;}
用for 循环遍历可变参数
for(声明循环变量:参数代表){
...
}
例:
for(int param:x){sum=sum+param;
}
若有侵权,请联系作者