Java语言之面向对象—类与对象(上)

面向对象

面向对象简介:
面向过程编程少了可重复用性设计
三大特征

  • 封装性:就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐蔽。简而言之就是:内部操作对外部而言不可见(保护性)
  • 继承性:首先继承是一种能力它可以使用现有类的所有的功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。(必须满足is-a原则,赋用)
  • 多态性:一个类实例的想同方法在不能情形有不能的表现形式。多态机制是具有不同内部结构的对象可以共享相同的外部接口。(利用多态可以得到良好的设计)
    面向对象名词扩展
  • OOA:面向对象分析
  • OOD:面向对象设计
  • OOP:面向对象编程
  • 面向对象最大的特征:可以对现实生活进行抽象。

类与对象的定义与使用

类指的是共性的概念(人类),而对象是类的一个具体的可以使用的事物(某个人)。
首先产生类(类是产生对象的蓝图),而后产生对象。对象所有的行为一定在类中进行了完整的定义。(属性和行为一致)
类的组成:
属性:描述对象的具体特点
方法:操作的行为
语法:
class 类名称{
属性1;
属性2;
属性n……;

方法1(){}
方法2(){}
方法(){}

class Person{
public String name;
public int age;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public String getPersonInfo(){
return "姓名:"+this.name+",年龄:"+this.age;
}
}

类中定义的普通属性与方法不在由主类直接调用,而是通过该类的对象的调用。
产生对象的语法:
类名称 对象名称=new 类名称()

Person p1 = new Person();
Person p2 = new Person("Steven",25);

对象内存分析:
堆内存:方法的局部变量,方法形参,引用
堆内存(所有方法共享内存):数组对象、所有类的对象
当看见关键字new,一定在堆内存上开辟了新的空间
对象的引用传递:多个栈内存指向同一个堆内存
对象的空指针问题:所有引用数据变量必须先赋值后使用,否则会抛出NullPointerException(运行时异常)

封装和构造方法

private实现封装
若类中属性直接暴露给对象操作,存在不安全(由于对象可以直接操作类中属性,无法限制属性是否正常设置)
使用private实现堆属性封装
修饰属性或方法,表示该属性和方法只能在本类中使用,其他类无法直接使用private封装的属性或方法。
defalut权限
class Person{
String name

Person类与name属性都是default权限(包访问权限,在同一个 源文件中可以访问)
使用方法
若private封装的属性要被外部访问,需要提供setter/getter方法
setter方法用于设置属性值
getter方法用于取得属性值
类的设计原则

  • 编写类时,所有属性必须被private封装
  • 属性要被外部访问,必须定义相应的getter和setter方法
    类的构造方法
    定义:构造方法是在使用关键字new实例化新的对象时调用的方法
    person per = new person
    类名称 对象引用 堆上开辟新空间 构造方法
    构造方法特点
  • 构造方法名称必须与类名称相同
  • 没有返回值类型说明
  • 每个类至少存在一个构造方法无参构造(没有明确定义,则系统自动生成一个无参构造)
    构造方法作用
    为类中属性初始化,避免多次使用setter调用
    方法重载:仅限于参数个数不同

this关键字

this表示构造方法
this(方法参数);
在构造方法首行使用this()表示调用本类的构造方法
this调用构造方法必须在构造方法首行
this调用构造方法不能成环
this表示本类普通方法
this.方法名称(方法参数)
若在本类中调用本类方法,一般将this(尤其是在有继承的情况,使用this可以明确是本类方法)
this表示当前对象
当前调用的属性和方法是通过那个对象调用的,this就指代他。

static关键字

修饰本类属性—成为静态属性(类属性),所有对象共享此属性值
非static属性成为成员变量或对象属性,每个对象都有此属性且值都一样
要描述国家着中共享属性,可以使用static修饰属性静态属性一般同过类名直接调用,所有该类对象共享此属性值。
修饰本类方法
使用static修饰方法,称为类方法,直接通过类名称调用,与对象实例化无关。
静态方法常见于工具方法。
eg:java.util.Arrays.sort();
System.arraycopy();
静态方法不能访问类中普通属性。 静态无对象
静态方法可以访问类中静态属性。
普通方法可以访问类中静态属性。
修饰内部类
没有外部类直接创建

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值