在创建类的时候,类名需要单词首字母大写,方法名需要首字母小写,其他单词首字母大写,若方法名只有一个单词时,首字母大写。
在UML图中,-是私有的,+是公共的,#是protected。
一:面向对象特征之一:封装与隐藏
问题:当创建了类的对象了以后,如果直接通过“对象.属性”的方式对相应的对象属性进行赋值的话,可能会出现不满足实际情况的意外(例如动物的legs只能是偶数个,不能奇数),所以我们考虑不让对象来直接作用属性(int legs; a.legs= 3),而是通过“对象.方法”的形式,来控制对象对属性的访问(重新定义一个方法,其中对legs进行限制)。实际情况中,对属性的要求就可以通过方法来实现。
但是当两种调用方式都可行的时候,就需要对“对象.属性”的方式进行限制,这里进行private进行限制,只能在该类被访问。
解决的方法:(封装性的思想)1.将类的属性私有化,2.提供公共的 方法(setter & getter)来实现调用。
二:权限修饰符:public private 缺省 protected
注:权限从大到小的排列:public protected 缺省 private
修饰类的权限:public 缺省(在调用的时候,是用三角形表示缺省,用圆圈表示public)
1.对于属性、方法和构造器的访问:
2.对于class的权限修饰只可以用public和default(缺省):
public类可以在任意地方被访问。
default类只可以被同一个包内部的类访问。
public类除了可以被本包内被访问调用外,若该类需要在该包以外被继承时,则需要导入其所在的包,才能够被进行调用。
一个小例子:
public class TestPerson {
public static void main(String[] args) {
Person p = new Person();
p.setAge(150);
System.out.println(p.getAge());
}
}
class Person{
private int age;
public void setAge(int i){
if(i>=0 && i <=130){
age = i;
}else {
System.out.println("输入的年龄有误");
//throw new RuntimeException("shuru de shuju youwu");
}
}
public int getAge(){
return age;
}
}
这种情况下,当输入不在0-130范围内时,会输出什么?
答:这种情况下会输出:输入的年龄有误
0
若抛出那句异常,则不会再有0输出。
类的第三个成员:构造器(constructor 构造方法)
constructor:建造者
构造器的作用:1,创建对象 2,给创建的对象的属性赋值,通过构造器的形参传递
1,设计类时,若不显示声明类的构造器的话,程序会默认提供一个空参的构造器。
public Person(){
}
2,一旦显示的定义了类的构造器,那么默认的构造器就不再提供了。若需要无参数的构造器时,则需要重新写一个空的够早方法。
Person p = new Person();平时用的都是不带参数的构造方法,系统自动提供,
Person p = new Person("5");这个是带参数的构造方法,
public Person(int a){
]
3,如果声明类的构造器。格式:权限修饰符 类名(形参){ } ------------无返回值
4,类的多个构造器之间构成重载
二,类对象的属性赋值的先后顺序:类对象指的是new Person()
1,属性的默认初始化(指定义了不带参数的构造函数以后,系统一旦创建该对象,便自动赋值指没有默认值的属性);
public Person(){ private String name;(默认初始化)
name = null; private int age = 1;(显示初始化)
age = 34;
}//该构造函数不带参数
2,属性的显示初始化(指新建类中属性带有赋值)
3,通过构造器给属性初始化(带参数的构造器)
4,通过“对象.方法”给属性赋值
所以最终决定该属性值是多少时,应该从4到1往前看,因为后面的会将前面的值覆盖。所以构造器的赋值优于属性默认和显示的赋值。
网友评论