java总结二 类和对象
首先建一个Demo类作为示例
public class Demo {//类
//属性(成员变量)
private int sex;//私有的成员变量
//方法(成员函数)
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
//构造函数
Demo(){
}
}
要点一:
Demo就是一个类,而对象就是把Demo实例化。相当于Demo就是一个蓝本,我们要使用原材料(内存空间、数据等)将Demo展现出来。如:
Demo demo = new Demo();//demo就是实例化的对象
demo.getSex();//这就是demo对象的一个行为
注:在实际开发中,Demo类的属性(sex)通常被用来存储数据,而get、set方法用来操作对象的属性。这也是约定俗成的一个规范。
要点二:
构造函数:给与之对应的对象进行初始化(new Demo),所有对象创建时,必须初始化之后才能使用。构造函数通常有如下特点:
1、函数名与类名相同
2、不需要定义返回类型
3、没有明确的返回值
注:所有的类都有默认的构造函数,通常这个构造函数是无参数的。如果我们定义了新的构造函数,那么在实例化的时候就会使用我们定义的构造函数。构造函数在实例化的时候调用,并且只会调用一次。
要点三:
为什么要使用面向对象?
1、将事情简单化
2、将之前过程中的指挥者变成执行者
3、符合现在人们的思维方式
在Demo中,sex和关于sex的一些方法被封装到Demo中,这就称为对象的封装。当实例化Demo之后,实例化的Demo就可以操作sex的方法,这被称为对象的行为。
要点四:
在实际编程中,我们经常会用到例如:
new Demo().getSex();
对Demo进行这样的使用,这里实例化的对象称为匿名对象,在只使用一次的情况下可以这样使用。
要点五:
创建一个对象的过程:
1、加载文件到内存
2、执行main方法时,在栈内存中开辟了main方法的空间(压栈-进栈),然后在main方法的栈区分配了一个变量p。
3、在堆内存中开辟一个实体空间,分配了一个内存首地址值。new
4、在该实体空间中进行属性的空间分配,并进行了默认初始化。
5、对空间中的属性进行显示初始化。
6、进行实体的构造代码块初始化。
7、调用该实体对应的构造函数,进行构造函数初始化。()
8、将首地址赋值给p ,p变量就引用了该实体。(指向了该对象)
要点六
类的访问权限
public:
1、对于成员来说:任何其他类都可以访问它们,不管在同一个包中还是在另外的包中。
对于类来说: 也是一样。
2、无声明:
对于成员来说:如果一个类的成员没有任何权限修饰,那么它门就是缺省包访问权限,同一个包内其它类可以访问,但包外就不可以。对于同一个文件夹下的、没有用package的classes,Java会自动将这些classes初见为隶属于该目录的default package,可以相互调用class中的friendly成员。如以下两个class分别在同一个文件夹的两个文件中,虽然没有引入package,但隶属于相同的default package。
对于类来说:同一个包中的类可以用。总之,类只可以声明为public或者无声明。
3、private:
对于对于成员来说:只能在该成员隶属于的类中访问。
对于类来说:类不可以声明为private。
4、protected:
对于对于成员来说:相同包中的类可以访问(包访问权限);基类通过protected把基类中的成员的访问权限赋予派生类不是所有类(派生类访问权限)。
对于类来说:类不可以声明为protected
说明:
1、每个编译单元(类文件)都仅能有一个public class
2、public class的名称(包含大小写)必须和其类文件同名。
3、一个类文件(*.java)中可以不存在public class。
这种形式的存在的场景:如果我们在某个包内撰写一个class,仅仅是为了配合同包内的其他类工作,而且我们不想再为了撰写说明文档给客户(不一定是现实意义的客户可 能是调用这个类的类)看而伤脑筋,而且有可能过一段时间之后有可能会彻底改变原有的做法,并完全舍弃旧版本,以全新的版本代替。
4、class不可以是private和protected。
5、如果不希望那个任何产生某个class的对象,可以将该类得所有构造函数设置成private。但是即使这样也可以生成该类的对象,就是class的static的成员(属性和方法)可以办到。