------- android培训、java培训、期待与您交流! ----------
在上一篇的博文中已经介绍了基本的面向对象的知识,今天这篇博文主要介绍的有以下几个内容
1、成员变量和局部变量
2、匿名对象
3、封装
4、this关键字
5、构造方法
6、static关键字
1、成员变量和局部变量
成员变量是定义在类中的变量,而局部变量是定义在方法上或某个代码块中,比如for中等等
package day06;
public class ClassDemo01 {
public static void main(String[] args) {
Demo d = new Demo();
d.method();
}
}
class Demo{
int num; //成员变量
public void method(){
int num2 = 5; //局部变量
System.out.println("num:"+num+",num2:"+num2);
}
}
运行结果
通过运行结果我们发现,num没有初始化也有值,这个值为0,而局部变量如果没有被初始化就使用的话,编译就会报错。
这边我们就需要说说成员变量和局部变量的区别:
1、定义的位置不一样,成员变量定义在类中方法以外,而局部变量则定义在方法的声明上或者一些代码块中
2、在内存中的位置不一样,成员变量定义在堆中,局部变量定义在栈中,定义在堆中的变量都会有一个初始化的值。
3、生命周期不一样,成员变量的随着对象的创建而创建,随着对象的消失而消失,局部变量是随着方法的调用而存在,随着方法调用完毕而消失。
4、初始化值不同,成员变量有默认初始化值,而局部变量没有,必须定义赋值后才能使用。
在开发中我们常常会将对象作为形参,那么这时候实际上需要的是一个对象,即是对对象的引用。
2、匿名对象,匿名对象其实就是直接new出一个对象进行使用,不需要使用一个对象去接收new出来的对象。
package day06;
public class NoNameDemo {
public static void main(String[] args) {
new Demo2().method();;
Demo2 d3 = new Demo2();
d3.show(new Demo2());
}
}
class Demo2{
public void method(){
System.out.println("匿名对象调用");
}
public void show(Demo2 d){
d.method();
System.out.println("传过来一个匿名对象");
}
}
匿名对象的使用场景:当方法仅仅只需要调用一次的时候,还可以作为参数进行传递。
3、封装
封装是面向对象的三大特性之一,什么是封装呢?
封装就是将一些不需要对外提供的细节隐藏起来,并且对外提供一个公共的访问方式。
封装的体现之一就是private,private是一个修饰符,用于修饰变量、方法。
被private修饰的方法和变量只能在本类中被访问。
package day061;
public class PrivateDemo {
public static void main(String[] args) {
// new Demo().show();报错
new Demo().method();
}
}
class Demo{
private String str;
private void show(){
str = "hello world";
System.out.println(str);
}
public void method(){
show();
}
}
4、this关键字
this关键字是对当前对象的引用,this关键字代表的是一个对象,this.变量名或者this.方法名,该变量或者该方法属于哪个类,this就代表该类对象。
假设我有一个方法,方法中有一个成员变量和一个方法,方法上有一个形参,形参的名称与成员变量名相同,如果在方法中是用变量的话,使用的会是哪一个呢?
package day061;
public class PrivateDemo2 {
public static void main(String[] args) {
new Demo01().show("张三");
}
}
class Demo01{
String name;
public void show(String name){
System.out.println("name:"+name);
}
}
发现打印结果是张三,其实在java当中,如果成员变量和局部变量同名的话,首先会在方法中寻找是否有该变量,如果有,使用的就是局部变量,没有就使用成员变量,那么如果我们需要使用成员变量又该如何呢?需要使用成员变量的话就用this.成员变量名使用的就是成员变量了。
5、构造方法
构造方法是指与类名相同的方法,并且该方法没有返回值类型,默认的构造方法是无参构造方法,如果手动给定了一个带参的构造方法,那么系统就不再默认生成构造方法了。
构造方法的作用其实是对对象进行初始化操作
package day062;
public class Demo {
public static void main(String[] args) {
Student s = new Student();
System.out.println(s.name+":"+s.age);
Student s2 = new Student("张三",25);
System.out.println(s2.name+":"+s2.age);
}
}
class Student{
int age;
String name;
public Student(){ //无参构造方法
age = 18;
name = "小李";
}
public Student(String name,int age){
this.name = name;
this.age = age;
}
}
6、static关键字
static是静态的意思,用于修饰方法和变量。被static修饰的方法或者变量被所有对象所共享。
static特点:
随着类的加载而加载
优先于对象存在
被类的所有对象共享
在静态方法中只能访问静态成员,不能访问非静态成员
静态变量和成员变量的区别:
A:所属不同
静态变量:属于类,类变量
成员变量:属于对象,对象变量,实例变量
B:内存位置不同
静态变量:方法区的静态区
成员变量:堆内存
C:生命周期不同
静态变量:静态变量是随着类的加载而加载,随着类的消失而消失
成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失
D:调用不同
静态变量:可以通过对象名调用,也可以通过类名调用
成员变量:只能通过对象名调用