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

  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; //创建了三个对象

功能函数问题

main()
{
	Car c=new Car();
	show(c);//show(new Car())
}
public static void show(Car c)
{
	c.num=3;
	c.color='black';
	c.run();
}

  参量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关键字:

class Person
{
    String name;
    String country ="CN";
    public void show()
    {
         System.out.println(name+"::"+country);
    }
}
class StaticDemo
{
    public static void main(String[]  args)
    {
        Person p=new Person();
        p.name="zhangsan";
        p.show();
    }
}

  有这么一种情况,当很多都是中国人的对象时,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. CentOS 6.5移除openJDK及JDK安装环境变量配置及JDK版本切换

    一.查找已经安装的open JDK [root@localhost ~]# rpm -qa|grep jdk java--openjdk-.el6_3.x86_64 java--openjdk-1.7 ...

  2. SPOJ FTOUR2 - Free tour II

    Description 有些黑点,问你选择不超过 \(k\) 个黑点的路径,路径权值最大是多少. Sol 点分治. 这是qzc的论文题,不过我感觉他的翻译好强啊...我还是选择了自己去看题目... 点 ...

  3. C#中用radio单选Repeater循环数据,js实现

    <asp:Repeater ID="rpt" runat="server"> <ItemTemplate> <tr data-id ...

  4. bootStrap树形目录组件

    需求描述 产品添加页面,需要选择车型.在bootStrap的modal上弹出子modal来使用.车型一共有4级目录.要使用目录树.然后分活动和商品两种,需要能够通过不通参数来调用该组件.车型品牌要使用 ...

  5. Selenium Xpath Tutorials - Identifying xpath for element with examples to use in selenium

    Xpath in selenium is close to must required. XPath is element locator and you need to provide xpath ...

  6. CodeForces 589J Cleaner Robot

    题目链接 题意:一个机器人打扫卫生,URDL代表初始时机器人面对的方向上右下左. ' . ' 代表可以打扫的, ' * ' 代表家具,如果机器人遇到家具就顺时针转90度,问机器人能打扫多少面积. 题解 ...

  7. 【Django】--Form组件

    Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 例子: 1.创建Form类 from djan ...

  8. 3ds max旋转简化后模型

    简化后的模型无法与原场景直接匹配,因此需要以下步骤: 简化后的模型导入,原点在右上角 旋转后,方法是选中所有模型,右键->旋转 在偏移的x和y各输入180 还有做一些平移,微调 在导入整个she ...

  9. R语言自动化

    plyr dplyr reshape2(数据整理) boxplot.stats(异常值检测) ggplot2(可视化) knitr(生成报告)

  10. sqlval

    SQL_STRUCTURE sqlvar { short sqltype; short sqllen; _SQLOLDCHAR *SQL_POINTER sqldata; short *SQL_POI ...