面向对象

  人为抽象的一种编程模型,在理解面向对象的代码时要按照抽象的模型来理解,不能只从代码字面来理解复杂的问题,学会拆分成一个一个独立的小问题,通过解决每一个小问题,最后解决一个大问题

  类是事物,算法,逻辑,概念等的抽象,用来封装这类型相关的数据和方法代码,封装成独立组件,可以把类理解成模板,或者图纸.在创建类对象时就相当于按着这个模板来创建

对象

  从类创建来的具体实例,每个实例占用独立的内存空间,保存各自的属性数据,实例可以单独控制,让实例去执行指定方法中的代码.

引用

  保存一个实例对象的内存地址用引用变量,将地址值赋值给变量,用变量去调用一个实例,可以理解成遥控,只需要用引用去操作就行了.

这里以一个例子来了解:

项目:day0101_士兵

类:day0101.Test1类和Solder类

Solder类代码:

 package day0101;

 import java.util.Random;

 /*

  * 封装

  * 相关数据,逻辑运算方法,

  * 封装成一个"类"组件

  */

 public class Solder {

 //成员变量

 int id; //默认值0

 int blood = 100;

 //成员方法

 public void go() {

     System.out.println(this.id+"号士兵前进");

 }

 public void attack() {

     if (blood == 0) {

         System.out.println(

          "这是"+id+"号士兵的尸体");

         return;//方法到此结束

     }

     System.out.println(id+"号士兵进攻");

     //模拟受到伤害,血量减少

     //产生一个随机减血量

     int d = new Random().nextInt(10);

     blood -= d;//血量减少

     if (blood < 0) {//如果血量变成负数,重置成0

         blood = 0;

     }

     System.out.println("血量: "+blood);

     if (blood == 0) {

         System.out.println(id+"号士兵阵亡");

     }

 }

 }

Test1类代码:

package day0101;

public class Test1 {

public static void main(String[] args) {

    //新建 Soldier 实例

    //再把它的内存地址值,保存到 s1 变量

    /* s1 = {

     *    id: 0,

     *    blood: 100

     * }

     */

    Solder s1 = new Solder();

    /* s2 = {

     *    id: 0,

     *    blood: 100

     * }

     */

    Solder s2 = new Solder();

    //用s1变量找到士兵的内存空间,访问它的id变量

    s1.id = 9527;

    s2.id = 9528;

    //用s1变量找到士兵的内存空间,让它去执行go()方法代码

    s1.go();

    s2.go();

    s2.attack();

    s1.attack();
  } }

构造方法

新建实例时,执行的一种特殊方法   new Solder()

Java的类中必须有构造方法,如果自己不定义构造方法,编译器会添加默认的空构造方法

class Solder{
public Solder(){ }
}

上面的代码是自己添加的一个空构造方法,当你不添加是,编译器也是自动生成空构造方法,什么也不做

构造方法的作用

  创建一个实例之后,立即执行的一个特殊方法,构造方法中的代码可以任意编写,完成任意功能或执行任意运算,构造方法一般的作用是给成员变量赋值.成员变量是定义在类中的变量.

this用法

this.id

id是成员变量,当用构造函数给成员变量赋值时:

public class A{
int id;
public A(int id){
this.id=id;
}
}

this.id表示的是成员变量id.

this(a,b)

a,b是括号中的参数,this(a,b)表示调用参数为两个构造方法

public class A{
int id;
int a;
public A(int id){
this(id,5)
}
public A(int id,int a){
this.id=id;
this.a=a ;
}
}

this()要在代码的首行.

Java入门 面向对象第一天的更多相关文章

  1. Java基础-面向对象第一特性之封装(Encapsulation)

    Java基础-面向对象第一特性之封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.理解什么是面向过程和面向对象 面向过程与面向对象都是我们编程中 ...

  2. JAVA入门 面向对象

    主要内容 1.类和对象的概念 2.什么是面向对象 3.什么对象的属性方法 4.何谓对象引用 5.实例化 类和对象的概念 万物皆对象,客观存在的事物皆为对象.我们大到名胜古迹,小道生活中的一件物品,例如 ...

  3. Java入门 - 面向对象 - 01.继承

    原文地址:http://www.work100.net/training/java-inheritance.html 更多教程:光束云 - 免费课程 继承 序号 文内章节 视频 1 概述 2 继承的特 ...

  4. Java入门 - 面向对象 - 02.重写与重载

    原文地址:http://www.work100.net/training/java-override-overload.html 更多教程:光束云 - 免费课程 重写与重载 序号 文内章节 视频 1 ...

  5. Java入门 - 面向对象 - 04.抽象类

    原文地址:http://www.work100.net/training/java-abstract.html 更多教程:光束云 - 免费课程 抽象类 序号 文内章节 视频 1 概述 2 Java抽象 ...

  6. Java入门 - 面向对象 - 05.封装

    原文地址:http://www.work100.net/training/java-encapsulation.html 更多教程:光束云 - 免费课程 封装 序号 文内章节 视频 1 概述 2 封装 ...

  7. 《java入门》第一季之类(String类字符串一旦被赋值就没法改变)

    毫无疑问,String类是java里面最重要的类之一.因此它有很多方法需要了解和掌握. 字符串一旦被赋值,值就不能发生改变: package cn.itcast_02; /* * 字符串的特点:一旦被 ...

  8. java入门——面向对象

    简介 对象具有自己的状态和行为: 描述一个对象具有什么状态和行为的过程叫做建模,不同的意图下我们对同一个事物的描述会产生不同的模型. 类 类描述一类对象的状态和行为的模板.可以把类想象成一个汽车设计图 ...

  9. Java入门 - 面向对象 - 06.接口

    原文地址:http://www.work100.net/training/java-interface.html 更多教程:光束云 - 免费课程 接口 序号 文内章节 视频 1 概述 2 接口的声明 ...

随机推荐

  1. java反射机制获取自定义注解值和方法

    由于工作需求要应用到java反射机制,就做了一下功能demo想到这些就做了一下记录 这个demo目的是实现动态获取到定时器的方法好注解名称,废话不多说了直接上源码 1.首先需要自定义注解类 /** * ...

  2. 深入V8引擎-AST(2)

    先声明一下,这种长系列的大块头博客只能保证尽可能的深入到每一行源码,有些代码我不乐意深究就写个注释说明一下作用.另外,由于本地整理的比较好,博客就随心写了. 整个Compile过程目前只看到asmjs ...

  3. 移动IM开发指南3:如何优化登录模块

    <移动IM开发指南>系列文章将会介绍一个IM APP的方方面面,包括技术选型.登陆优化等.此外,本文作者会结合他在网易云信多年iOS IM SDK开发的经验,深度分析实际开发中的各种常见问 ...

  4. HBase 学习之路(二)—— HBase系统架构及数据结构

    一.基本概念 一个典型的Hbase Table 表如下: 1.1 Row Key (行键) Row Key是用来检索记录的主键.想要访问HBase Table中的数据,只有以下三种方式: 通过指定的R ...

  5. Python笔记【6】_函数

    #!/usr/bin/env/python #-*-coding:utf-8-*- #Author:LingChongShi #查看源码Ctrl+左键 ''' def:函数是一段可以重复调用的代码,通 ...

  6. 7天入门Linux

    经过一个星期学习,Linux终于入门了,在这里小记下~ =====================分割线============================= Ubuntu常用命令: ctrl+s ...

  7. C++ 洛谷 P1731 [NOI1999]生日蛋糕

    P1731 [NOI1999]生日蛋糕 一本通上也有. 这TM是一道极其简单的深搜剪枝(DP当然可以的了,这里我只讲深搜). 首先圆柱公式:(有点数学基础都知道) V=πR2H S侧=π2RH S底= ...

  8. python - 博客目录

    博客目录 python基础部分 函数 初识函数 函数进阶 装饰器函数 迭代器和生成器 内置函数和匿名函数 递归函数 常用模块 常用模块 模块和包 面向对象 初识面向对象 面向对象进阶 网络编程 网络编 ...

  9. Python爬虫入门:爬取pixiv

    终于想开始爬自己想爬的网站了.于是就试着爬P站试试手. 我爬的图的目标网址是: http://www.pixiv.net/search.php?word=%E5%9B%9B%E6%9C%88%E3%8 ...

  10. linux上mysql MM(双主)架构及keepalived搭建

    master1 10.1.1.14 VIP 10.1.1.16master2 10.1.1.15 VIP 10.1.1.16 一.mysql MM配置1.修改master1的my.cnf# vi /e ...