上节答案:B。解析:通过 类名 对象名 = new 类名();可以创建类的对象
1 - 5:Java中的成员变量和局部变量
很多朋友在写面向对象程序的时候发现,使用变量的时候经常容易把各种变量搞混淆,那么我们今天就一起来看一下,在写面向对象程序的时候,究竟会用到哪些变量,它们之间又有什么区别。
我们再写一个面向对象程序的时候,主要用到两种变量,成员变量个局部变量。
1.成员变量:
在类中定义,用来描述对象将要有什么。
2.局部变量
在类的方法中定义,在方法中临时保存数据。
在使用中我们要注意,成员变量可以被本类的所有方法使用,也可以和一些其他和我们当前类有关系的类中的方法去使用。局部变量只能在当前方法中去使用。
成员变量和局部变量的区别
1、作用域不同
局部变量的作用域仅限于定义它的方法(从方法的开始到方法的结束)
成员变量的作用域在整个类内部都是可见的(从类的开始到类的结束)
我们现在通过一个代码来证明这一点:
成员变量
package com.imooc;
public class Telephone {
//属性(成员变量),代表一个类有什么
float screen;//屏幕
float cpu;//CPU大小
float mem;//内存大小
//方法,代表一个类能干什么
void call() {
System.out.println("Telephone有打电话的功能!");
}
void sendMessage() {
System.out.println("screen:" + screen + " cpu:" + cpu + " mem:" + mem + " Telephone有发短信的功能! ");
}
}
这是上一节讲的一个类,首先,声明一个成员变量int var;我们接着可以看看,方法call和森的Message里面能不能用int var这个变量,前面已经讲过,默认成员变量是0,当我们创建对象的时候,他会有一个默认成员变量的值,保存:
package com.imooc;
public class Telephone {
//属性(成员变量),代表一个类有什么
float screen;//屏幕
float cpu;//CPU大小
float mem;//内存大小
int var;
//方法,代表一个类能干什么
void call() {
System.out.println("var:" + var);
System.out.println("Telephone有打电话的功能!");
}
void sendMessage() {
System.out.println("var:" + var);
System.out.println("screen:" + screen + " cpu:" + cpu + " mem:" + mem + " Telephone有发短信的功能! ");
}
}
看一下我们的main函数:
package com.imooc;
public class InitailTelephone {
public static void main(String[] args) {
// TODO Auto-generated method stub
Telephone phone = new Telephone();
//phone.sendMessage();
//给实例变量赋值
phone.screen = 5.0f;
phone.mem = 2.0f;
phone.cpu = 1.4f;
//调用对象方法
phone.sendMessage();
phone.call();
}
}
运行一下,看看成员变量的值是多少。
结果:
var:0
screen:5.0 cpu:1.4 mem:2.0 Telephone有发短信的功能!
var:0
Telephone有打电话的功能!
首先我们可以看到,这两个成员变量都可以被调用,并且它的默认值为0。正如我们刚才所说,成员变量的作用域是在整个类的内部所使用的,类中的所有方法共享成员变量。
局部变量
我们在刚才方法当中,定义一个局部变量,为了跟成员变量有个区别,我们给它起名localVar,让他等于0。但是在下面那个sendMessage方法用localVar就会出错了。
2、初始值不同
在我们Java程序中,它会给成员变量一个初始值,但不会给局部变量初始值。其实我们刚才写的程序大家已经发现了,在定义成员变量的时候并没有给它赋初始值(所以默认是0),但在定义局部变量的时候不赋值的话,编译时编译器会提醒我们,要初始化一下才行。
3、在同一个方法中,不允许有同名局部变量;在不同方法中,可以有同名局部变量。
4、两类变量同名时,局部变量有更高优先级(就近原则)。
1 - 6:Java中的构造方法
前面已经学习了如何写一个面向对象程序,现在再来看一下,面向对象程序当中一个重要知识点:构造方法。
那我们现在就看一下,到底如何写构造方法。构造方法又能帮我们解决什么问题呢?
我们之前在创建一个对象的时候,通过一个new关键字,就可以把一个类进行实例化,变成对象。其实当时来讲,我们说的并不严谨。
1、new后面跟的,并不是类名,而是我们的构造方法。就是说,我们在创建对象的时候,就会使用到我们的构造方法。它的功能只有一个:创建一个新的对象。
2、构造方法是定义在Java类中的一个用来初始化对象的方法,也就是说,构造方法也是方法。它和我们普通方法不同之处在哪里呢,我们以前普通方法只是代表我们以前能够干什么,而构造方法可以创建一个对象,并可以初始化对象的值。所以说,同样是方法,含义是不同。
3、构造方法与类同名且没有返回值。
那我们看一下,如何使用一个构造方法。
打开Eclipse,
再在src上面右键,创建一个包,包名定义为网址倒过来写(com.imooc):
在新建的包里面右键,创建一个类,还是叫Telephone
再在com.imooc创建一个类,叫InitialTelephone
下面两张图是Telephone.java和InitialTelephone.java的代码:
那我们发现,刚开始Telephone类里面没有写任何方法,但我们现在,就已经可以new一个Telephone的对象。有的人感觉很奇怪,这类里面没有这个方法,我们怎么还能调用呢?主要原因就是,如果我们没有指定一个无参的构造方法,系统会自动的帮我们构造一个无参的构造方法。如果我们对系统的无参构造方法不满意,可以自定义个无参构造方法。为了证明我们执行的的确是构造方法,那么无参的系统生成的我们就不需要了。我们就在Telephone类里创建一个无参无返回值(不需要void)的方法,并在方法里输出无参的构造方法执行了!这句话:
InitialTelephone类没有变在这里加入Telephone phone = new Telephone();,然后直接执行:
可以看到,这里执行了Telephone类的无参无返回值构造方法,显示出“无参构造方法执行了!”这句话。也就是说当我们创建对象的时候,其实我们执行的是构造方法,这一点大家要注意。
4、带参构造方法使用
我们来看一下,其实有参的构造方法目的只有一个,就是初始化我们对象中成员变量的值。所以说呢,我在创建对象的时候我是可以传参数的,那我们如何来写一个有参的构造方法呢?其实也很简单,和我们刚刚无参构造方法最大的区别是写了一个参数列表。最终我们把参数列表里面的值赋给了成员变量。那此时呢,我们的对象是不是就有值了呀。好,那我们也通过代码方式来看一下。
注意,我们无参构造方法是可以跟有参构造方法并存的。它的命名规则是相类似的,现在Telephone里并没有成员变量,我们先给类里面定义几个成员变量,比如屏幕大小,CPU频率,内存大小。我通过一个有参的构造方法,就是为了给我们对象的实例变量赋值的。所以说同样我们要写我们的参数名称,参数名称跟刚才定义的成员变量名字是一样的可能容易搞混,我们就在参数名称前面加一个new,这样不会搞混。
然后在主函数里新建一下这个类,看看能不能运行:
这时候,screen值为5.0,cpu值为1.4,mem值为2.0,这个类里面的值已经赋过了。
5、当没有指定构造方法时,系统会自动添加无参构造方法
6、当有指定构造方法时,无论是有参或无参构造方法,都不会添加无参构造方法。因为你已经自定了构造方法,系统就不再帮你定了。
7、构造方法的重载:方法名相同,但参数不同的多个方法,调用时会自动根据不同的参数选择相应的方法。其实我们刚才写的有参构造方法和无参构造方法,方法名相同,这就是方法的重载。
8、构造方法不但可以给对象属性赋值,还可以保证给对象的属性赋一个合理的值。例如说,我们在创建一个手机的时候,通常来讲,智能手机的屏幕都是大于3.5英寸的,如果我赋值的时候不小心赋值了1.5英寸的值,显然是不合理的,那么我们能在构造方法里是可以避免这个问题:
如何解决这个问题呢,我们可以在这边加一个判断,如果传进来的参数小于3.5,就给screen一个默认值3.5,并且我们可以提示一下,“您输入的参数有问题,自动赋值3.5”,如果大于3.5,就可以直接等于newScreen了。
1 - 7:Java中的static使用之静态变量
大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立。然而在某些时候,我们更希望该类所有的对象共享同一个成员。此时就是 static 大显身手的时候了!!
Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。当然,鉴于他作用的特殊性更推荐用类名访问~~
使用 static 可以修饰变量、方法和代码块。
本小节,我们先认识一下静态变量。
例如,我们在类中定义了一个 静态变量 hobby ,操作代码如下所示:
运行结果:
要注意哦:静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收!~~
任务
在编辑器中定义了一个 HelloWorld 类,在类中定义一个静态变量 className ,保存班级名称。在 main 方法中调用静态变量输出班级信息。
请将第 4、9 行中代码补充完整
public class HelloWorld {
// 定义静态变量,保存班级名称
String className = "JAVA开发一班";
public static void main(String[] args) {
// 访问静态变量,输出班级名称
System.out.println( );
}
}
运行结果:JAVA开发一班
1 - 8:练习题
在 Java 类中,使用以下( )声明语句来定义公有的静态变量 num
A、public int num = 100;
B、final int num = 100;
C、public static int num = 100;
D、private static int num = 100;
答案在下节公布