Java中的对象
现在让我们深入了解什么是对象。看看周围真实的世界,会发现身边有很多对象,车,狗,人等等。所有这些对象都有自己的状态和行为。
拿一条狗来举例,它的状态有:名字、品种、颜色,行为有:叫、摇尾巴和跑。
对比现实对象和软件对象,它们之间十分相似。
软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现。
在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。
Java 中的类
类可以看成是创建 Java 对象的模板。
通过上图创建一个简单的类来理解下 Java 中类的定义:
public class Dog { String breed; int size; String colour; int age; void eat() { } void run() { } void sleep(){ } void name(){ } }
一个类可以包含以下类型变量:
- 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
- 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
- 类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。
一个类可以拥有多个方法,在上面的例子中:eat()、run()、sleep() 和 name() 都是 Dog 类的方法。
构造方法
每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
下面是一个构造方法示例:
public class Puppy{ public Puppy(){ } public Puppy(String name){ // 这个构造器仅有一个参数:name } }
创建对象
对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:
- 声明:声明一个对象,包括对象名称和对象类型。
- 实例化:使用关键字 new 来创建一个对象。
- 初始化:使用 new 创建对象时,会调用构造方法初始化对象。
下面是一个创建对象的例子:
public class Puppy{ public Puppy(String name){ //这个构造器仅有一个参数:name System.out.println("小狗的名字是 : " + name ); } public static void main(String[] args){ // 下面的语句将创建一个Puppy对象 Puppy myPuppy = new Puppy( "tommy" ); } }
JAVA中方法的调用(详细整理)
2016.10.05 21:52 37564浏览
JAVA中方法的调用主要有以下几种:
1.非静态方法
非静态方法就是没有 static 修饰的方法,对于非静态方法的调用,是通过对 象来调用的,表现形式如下。
对象名.方法()
eg:
public class InvokeMethod{
public static void main(String[] args){
InvokeMethod in = new InvokeMethod();
in.t1();
}
public void t1(){
System.out.printfln("t1");
}
}
2.调用静态方法
静态方法就是用 static 修饰的方法,静态方法的调用是通过类名来调用的, 表现形式如下:
类名.方法()
eg:
public class InvokeMethod{
public static void main (String[] args){
InvokeMethod.t2();
}
public static void t2(){
System.out.println("static t2....");
}
}
3.方法与方法之间的调用
方法与方法之间的调用,主要是在一个方法内部如何调用其他方法。
(1)静态方法内部调用其他方法
如果在本类当中,静态方法可以直接调用静态方法,
除了在 main 方法中,还可以在自定义的静态方法中直接调用。
如果在本类当中是非静态方法,就必须通过对象来调用。
public class InvokeMethod{
public static void main (String[] args){
t2();
}
public static void t2(){
System.out.println("static t2...");
}
public static void t1(){
//静态方法调用非静态方法需通过对象来调用
//InvokeMethod in =new InvokeMethod();
//in.t2();
t2();
System.out.println("static t1");
}
}
如果不在一个类当中,静态方法调用其他类中的静态方法,必须通过
类名.静态方法();
如果在不同类当中,静态方法调用其他类的非静态方法,需要导入该类中的包,以及通过创建对象调用。
(2)非静态方法内部调用
如果在本类中,非静态方法可以直接调用静态方法与非静态方法。
在不同类中,非静态方法调用其他类的静态方法,需要通过导入该类中的包,并且需要通过类名来调用
在不用类中,非静态方法调用其他类的非静态方法时,需要导入该类中的包,还需要通过创建对象来调用。
完成代码:
package txt1;
public class sy5 {
public static void main(String[] args) {
sy5 s1=new sy5();
s1.add(1, 5);
s1.print();
int num=s1.sunm();
System.out.println(num);
String aa=s1.ssa("倪好");
System.out.println(aa);
}
public void add(int a,int b){
int c=a+b;
System.out.println("两者和为 :"+c);
}
public void print(){
System.out.println("我想好好学习!!");
}
public int sunm(){
int num=0;
for(int i=1;i<=100;i++){
num+=i;
}
return num;
}
public String ssa(String name){
String n1;
n1="嘻嘻"+name;
return n1;
}
}
代码二:
package txt1;
public class student {
String name;
int age;
String sex;
double score;
public void show(){
System.out.println( "姓名 "+name+" 年龄 "+age+" 性别 "+sex+" 成绩 "+score);
}
}
package txt1;
public class studentTest {
public static void main(String[] args) {
student [] s1=new student[3];
s1[0]=new student();
s1[0].name="王五";
s1[0].age=31;
s1[0].sex="男";
s1[0].score=72.4;
s1[1]=new student();
s1[1].name="李四";
s1[1].age=21;
s1[1].sex="男";
s1[1].score=57.4;
s1[2]=new student();
s1[2].name="莉莉";
s1[2].age=17;
s1[2].sex="女";
s1[2].score=98.4;
for(int i=0;i<s1.length;i++){
s1[i].show();
}
studentTest t1=new studentTest();
t1.maxs(s1[0].score, s1[1].score, s1[2].score);
for(int j=0;j<3;j++){
t1.chosse(s1[j], "男");
}
}
public void maxs(double a,double b,double c){
if(a<b){
if(b<c){
System.out.println("最大值是 :"+c);
}else{
System.out.println("最大值是 :"+b);
}
}else{
if(a<c){
System.out.println("最大值是 :"+c);
}else{
System.out.println("最大值是 :"+a);
}
}
}
public void chosse(student s1,String se){
if(s1.sex.equals(se)){
System.out.println("性别是"+se+"的姓名"+s1.name);
}
}
}