面向对象的三个特征:封装、继承和多态。

  Java开发的过程就是找合适的库对象使用,没有对象创建新对象。找对象,建立对象,使用对象并维护对象之间的关系。

  类就是对现实生活中事物的描述,而对象就是这类事物实实在在的个体。对应到Java编程中,描述就是class定义的类结构,

对象就是通过new申请堆内存建立的实体。定义类,就是在描述事物,就是在定义属性和行为。属性和行为共同成为类中的成员

(成员变量和成员方法)。

  成员变量和局部变量的区别:

  1.作用范围:成员变量作用于整个类中,局部变量作用于函数中或者语句中;

  2.存储位置:成员变量在堆内存中,因为对象的存在才在内存中存在,局部在栈内存中。

  匿名对象:

    Car c=new Car(); c.num=5;  等价于    new Car().num=5;

如果new Car().num=5;  new Car().color="blue";  new Car().run; //创建了三个对象

功能函数问题

  1. main()
  2. {
  3. Car c=new Car();
  4. show(c);//show(new Car())
  5. }
  6. public static void show(Car c)
  7. {
  8. c.num=3;
  9. c.color='black';
  10. c.run();
  11. }

  参量c是副本,但是由于只创建了一个对象,c其实包含着指针,main函数中的c和参量c都是指向堆控件对象。

  特征一:封装

  隐藏对象的内部细节(相对于用户透明),对外提供公共访问接口,可以控制传入的数据(加入逻辑判断等语句),提高代码的健壮性。

  好处:将变化隔离;便于使用;提高重用性;提高安全性。

  prinvate关键字:

    私有修饰符,用于修饰类中的成员(成员变量和成员函数),是封装的一种表现形式。(权限在访问不到的形式,就是封装)

  构造代码块,没有函数名和类型及参数只有  {...}

  作用:给对象初始化,对象一建立就运行,且优先于构造函数执行,定义对象共性;和构造函数区别是,构造代码块是给所有对象进行统

一初始化,而构造函数是给对应的对象初始化。当然了,构造函数还是要执行的。  

  构造函数私有化后不能用此构造函数创建对象。

  构造函数如:Person(String name){name =name;}//原来成员变量有name,但是这里两个都当成局部变量,必须要用this,this.name=name;

  this关键字:

    就代表本类的对象,代表它所在函数所属对象的引用,当函数内部要用到调用本类对象时用到。

  public boolean compear(Person p)
  {
    return this.age==p.age;
  }

  main (){

    Person p1=new Person(20);
    Person p2=new Person(25);
    boolean b=p1.compare(p2);

  }

  this:在构造函数间调用时使用

  例如 :

  Person(Sting name)
  {

    this.name=name;
  }
  person(String name,int age)
  {
    //this.name=name;
    this(name);//只能放在第一行,初始化的动作要先执行
    this.age=age;
  }

   static关键字:

  1. class Person
  2. {
  3. String name;
  4. String country ="CN";
  5. public void show()
  6. {
  7. System.out.println(name+"::"+country);
  8. }
  9. }
  10. class StaticDemo
  11. {
  12. public static void main(String[] args)
  13. {
  14. Person p=new Person();
  15. p.name="zhangsan";
  16. p.show();
  17. }
  18. }

  有这么一种情况,当很多都是中国人的对象时,country这个成员变量在很多对象间都是通用的,当创建很多对象时,堆内会占用很多不必要的空间,所以 String country ="CN";这样就可以了。其在方法区/共享区/数据区,这里面放着方法(功能函数)和共享的数据。

用法:当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用。类名.静态成员,比如System.out.println(Person.country);

static特点:

1.随着类的加载而加载;(也就是静态随着类的消失而消失,它的生命周期最长)

2.优先于对象而存在;(静态是先存在的,对象是后存在的)

3.被所有对象所共享;

4.可以直接被类名调用。

实例变量和类变量的区别:

1.存放位置

  类变量随着类的加载而存在于方法区中。

  实例变量随着对象的建立而存在于堆内存中

2.生命周期:

  类变量生命周期最长,随着类的消失而消失

  实例变量生命周期随着对象的消失而消失

静态使用注意:

1.静态方法只能访问静态成员(变量或者方法,当类名调用时非静态还没有呢);

非静态既可以访问静态也可以访问非静态;

2. 静态方法中不可以定义this,super关键字,因为静态优先于对象存在,所以静态方法中不可以出现this。

3.主函数是静态的。

优缺点:

1.优点,对对象的共享数据进行单独空间的存储,节省空间,还可以直接被类名调用;

2.缺点,生命周期过长,访问出现局限性(静态虽好,只能访问静态)。

Java面向对象之封装的更多相关文章

  1. Java面向对象(封装性概论)

     Java面向对象(封装性概论) 知识概要:                   (1)面向对象概念 (2)类与对象的关系 (3)封装 (4)构造函数 (5)this关键字 (6)static关键 ...

  2. Java面向对象的封装

    封装是Java面向对象的三大特性之一,通常我们是通过包管理机制同时对类进行封装,隐藏其内部实现细节,通常开发中不允许直接操作类中的成员属性,所以属性一般设置为私有权限private,类中一般会给出一些 ...

  3. java面向对象(封装,继承,多态,抽象,接口的定义和实现)

    1.封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定 ...

  4. java面向对象(封装-继承-多态)

    框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...

  5. Java面向对象之封装 入门实例(一)

    一.基础概念 (一)面向对象的三大特征:      1.封装         2.继承          3.多态 (二)封装:隐藏实现细节,对外提供公共的访问方式(接口). 封装的体现之一:将属性都 ...

  6. java面向对象之封装性

    面向对象的特征之一:封装和隐藏: 一.问题的引入: 当创建一个类的对象以后,可以通过“对象.属性”的方式,对对象的属性进行赋值.这里,赋值操作要受属性的数据类型和存储范围的制约.除此之外,没有其他制约 ...

  7. Java 面向对象,封装,继承

    1相关概念的理解 1.1面向过程.面向对象 面向过程与面向对象都是编程中,编写程序的一种思维方式. 面向过程的程序设计方式,是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程.(职员思想) 面向 ...

  8. Java 面向对象和封装

    目录 面向对象思想的概述 类和对象的关系 什么是类 什么是对象 类和对象的关系 局部变量和成员变量的区别 this关键字 构造方法 一个标准的类 面向对象思想的概述 面向过程:当需要实现一个功能的时候 ...

  9. Java面向对象07——封装

    封装 (补充 this关键字):  package oop.demon01.demon03; ​ /*    封装的意义:        1. 提高程序的安全性,保护代码        2. 隐藏代码 ...

随机推荐

  1. [NOIP2016]愤怒的小鸟

    题目描述 Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形 ...

  2. Linux安装ftp组件过程

    1   安装vsftpd组件 安装完后,有/etc/vsftpd/vsftpd.conf 文件,是vsftp的配置文件. [root@bogon ~]# yum -y install vsftpd 2 ...

  3. 菜鸟笔记:java编程基础一

    Java中的关键字 Java 语言中有一些具有特殊用途的词被称为关键字.关键字对 Java 的编译器有着特殊的意义,在程序中应用时一定要慎重哦!! Java 中常用关键字: 问:这么多,记不住啊... ...

  4. MySQL 权限与安全

    一.MySQL权限系统通过两个阶段进行认证: (A) 对用户进行身份认证,IP地址和用户名联合, (B) 对合法用户赋予相应权限,权限表在数据库启动的时候载入内存中. 二.在权限的存取过程中,会用到& ...

  5. TJpgDec—轻量级JPEG解码器

    TJpgDec-轻量级JPEG解码器 本文由乌合之众lym瞎编,欢迎转载blog.cnblogs.net/oloroso 下文中解码一词皆由decompression/decompress翻译而来. ...

  6. 在Oracle中恢复被DROP掉的表

    在Oracle中可能不小心会DROP掉一个表,如果没有定期做备份的话,将会带来很大的麻烦.如果有的情况下,每天的数据都很重要,而定期备份的周期又稍长,情况恐怕也不容乐观!以前只知道Windows有个回 ...

  7. Ajax加载菊花loding效果

    Ajax 异步请求的时候,一般都会利用一个动态的 gif小图片来制作一个Ajax Loading ,以便增加用户体验. 这里我们使用Spin.js ,该 js 脚本压缩后5k,可以不用任何图片,任何外 ...

  8. WebService -- Java 实现之 CXF ( 使用Spring添加拦截器)

    最重要的就是在ApplicationContext.xml下面添加配置 <!-- service provider --> <jaxws:endpoint implementor=& ...

  9. Python语言常见异常错误类型

    在运行或编写一个程序时常会遇到错误异常,这时python会给你一个错误提示类名,告诉出现了什么样的问题(Python是面向对象语言,所以程序抛出的异常也是类).能很好的理解这些错误提示类名所代表的意思 ...

  10. magento后台使用POST表单时,要使用必要参数form_key才能正常通讯

    <form action="<?php echo $this->getSaveUrl() ?>" method="POST" encty ...