面向对象

来源:互联网 发布:require js 编辑:程序博客网 时间:2024/05/08 10:25

该博文是以下资料的学习笔记:

传智播客Java基础视频

该博文仅为个人学习使用,谢谢


成员变量、局部变量区别:

成员变量定义在类中,整个类中都可以访问。

局部变量定义在函数、语句、局部代码块中,只在所属的区域类有效。

成员变量存在于堆内存的对象中,随着对象的创建而存在,随着对象的消失而消失。

局部变量存在于栈内存的方法中,随着所属区域代码的执行而存在,所属区域代码执行完即消失。

成员变量都有默认初始化值,局部变量没有默认初始化值。


匿名对象:当对象对属性、方法仅进行一次使用的时候,就可以简化为匿名对象


基本数据类型和引用数据类型参数传递的区别,参考06面向对象13。


封装:隐藏对象的属性和实现细节,仅对外提供公共的访问方式。便于使用,提高安全性


private:权限修饰符,用于修饰成员,不能修饰局部,私有的内容只能在本类中访问



构造函数:

函数名与类名相同,不用定义返回值类型,没有具体返回值。

作用:给对象进行初始化。创建对象都必须要通过构造函数进行初始化,一般类中,如果没有定义构造函数,则会执行默认的空参数的构造函数,如果在类中定义了构造函数,则类中默认的构造函数就没有了

多个构造函数是以重载的形式存在的。

构造函数:对象创建时,就会调用与之对应的构造函数,并且只调用一次,对对象进行初始化


在描述事物时,该事物一存在就具备一些内容时,这些内容就定义在构造函数中。

细节:

class Person{private String name;private int age;void Person(){} // 前边加了void,这个方法就不是构造函数了,而是一般函数,只不过,该方法不符合首字母小写的规范// 如果下边语句被注释掉,那么Person p = new Person();语句就会报错// 原因是自定义了构造函数,默认的空参数的构造函数就没有了//Person(String name,int age){}  }


this关键字:

当成员变量和局部变量重名时,可以用关键字this来区分

class Person{private String name;//第一种写法:Person(String n){name = n;}//第二种写法:/*Person(String name){name = name;}*/void speak(){System.out.println(name);}}
Person p = new Person("zhangsan");p.speak();//上边的第一种写法,该处打印结果是:zhangsan,第二种写法打印结果是:null

哪个对象调用了this所在的函数,this就代表哪个对象。相关图参考07面向对象7this关键字原理图解。

在构造函数中调用构造函数:

class Person{private String name;private int age;Person(String name,int age){//this();//The constructor Person() is undefined//this("lisi");//this可以在构造函数中调用其他构造函数,对构造函数的调用必须是函数的第一个语句//this.name = name;this.age = age;}Person(String name){this.name = name;}void speak(){System.out.println(name+"..."+age);}}


static关键字:

用于修饰成员,static修饰的成员被所有对象所共享,优先于对象存在,static的成员随着类的加载就已经存在了,所以多了一种调用方式,可以直接被类名调用:类名.静态成员。static修饰的数据是共享数据,对象中存储的是特有数据。


成员变量(实例变量)和静态变量(类变量)的区别:

1、生命周期不同

成员变量:随着对象的存在(销毁)而存在(销毁)

静态变量:随着类的加载(消失)而存在(消失)

2、调用方式不同

成员变量:只能被对象调用

静态变量:可以被对象和类名调用

3、别名不同

成员变量:也称为实例变量

静态变量:也称为类变量

4、存储位置不同:

成员变量:存储在堆内存的对象中,是对象的特有数据

静态变量:存储在方法区(又叫共享数据区)的静态区,是对象的共享数据


使用静态的注意事项:

1、无法从静态上下文中引用非静态变量(方法),静态方法只能访问静态成员。

2、静态方法中不可以使用this或super关键字

3、如果一个类的所有对象的某个成员变量的值都相同,那么这个成员变量就可以考虑用static修饰,如果一个函数没有访问到非静态的成员变量,那么,仅为调用该方法而创建对象是没有意义的,这时候就可以将该函数定义为静态


关于主函数:

public class StaticDemo {    public static void main(String[] args) {System.out.println(args.length);//0}public static void main(int args) {//主函数是固定格式的,所以该函数只是主函数的一个重载函数,并不会报错}}


静态代码块:

随着类的加载而执行,而且只执行一次,作用是给类进行初始化

如果一个类的所有成员都是静态的,就不需要创建对象,可以用静态代码块来对类进行初始化


构造代码块:

给所有对象进行初始化

在函数中定义的叫做局部代码块,是为了限制变量的生命周期


public class StaticDemo {static{System.out.println("静态代码块main");}{System.out.println("构造代码块main");}    public static void main(String[] args) {    new People().show();    new People().show();    }}class People{static{System.out.println("静态代码块People");}{System.out.println("构造代码块People");}People(){System.out.println("People构造函数");}public void show(){System.out.println("show...");}}

输出结果是:

静态代码块main
静态代码块People
构造代码块People
People构造函数
show...
构造代码块People
People构造函数
show...




0 0