这一章节我们来简单的聊聊对象抽象的过程。

1.所有语言都提供抽象机制。

例如:a=1(下面都是举例子,里面所提及的内容有可能是错误的,因为笔者没学过机器码和汇编)

在机器码当中:1000100111011000

在汇编当中:mov a,1

在C语言当中:a=1

在java当中:

class Test(){

a=1;

}

从上面的不同的表示里面可以发现,语言都是在不断的抽象,从最开始的0和1,一直到java的创建一个对象然后在对象里面赋值,就是一个不断抽像的过程。

同时,也是编程语言努力把问题空间(实际业务)与解空间(计算机)联系起来的表现。

解释:

1.在机器码时代,实际业务跟计算机直接的连接是非常困难的,大家可以看到a=1这么简单的操作,就是一大段0和1,谁记得住,当然,记得住的都是强人。

2.在汇编时代,编程语言进步了,做出了第一次的抽象,把0和1抽象成某些句子,可以利用简单的句子来描述a=1,但是由于抽象程度有限,因此,编程的复杂程度还是比较高

3.到了c语言时代,可以说抽象进行了一次飞跃,C语言基本能够处理日常问题,而且性能非常卓越

4.到了java时代,提出了oop,使得实际业务的描述跟计算机的解决方案的描述已经比较吻合

总结:

4个时代的变迁,性能越来越低,但是可读性越来越高,时至今日,除非是高并发互联网企业,一般来说性能不是最大问题,瓶颈出现在人上面,因此,现在可读性反而显得更加重要。

2.java的基本特性

1)万物皆对象。

对象是一个奇特的变量,它既可以存储数据,也可以执行操作,我们可以抽象问题的构件来组成程序。

例如:名字是“jack”的狗会叫的。

class Dog(){

private String name;

private String id;

public void bark(){

}

}我们建立狗的对象,然后这个狗有一个属性“名字”,而且它会叫,因此有一个方法“bark”

在对象狗里面,既可以存储狗的名字,也可以执行狗叫的方法。

2)程序是对象的集合,它们通过发送信息来告诉彼此需要做什么(说白了,就是调用对象的方法)。

package com.ray.ch01;

public class Test {

public static void main(String[] args) {

Dog dog = new Dog();

dog.setName("jack");

dog.bark();

}

}

class Dog {

private String name;

public void bark() {

System.out.println(name + " is barking");

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

在上面的程序中dog.bark()就是调用了Dog对象的bark方法。

3)每个对象都有由其他对象组成的存储。

package com.ray.ch01;

import java.util.ArrayList;

public class GroupOfDogs {

private ArrayList catList;

private void initCatList() {

for (int i = 0; i < 5; i++) {

Cat cat = new Cat();

cat.setName("rose" + i);

catList.add(cat);

}

}

public static void main(String[] args) {

new GroupOfDogs().initCatList();

}

}

class Cat {

private String name;

public void bark() {

System.out.println(name + " is barking");

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

从上面的代码可以看出,特别是private ArrayList catList,这一个存储就是通过其他对象来完成的。

4)每个对象都有类型

package com.ray.ch01;

public class Bird {

public static void main(String[] args) {

Bird bird = new Bird();

}

}

上面的代码,bird是一个对象,它的类型是Bird,同时bird这个对象,也是Bird这个类型所具象出来的一个实例。

5)某一特定类型的对象,都可以接收同样的消息。

package com.ray.ch01;

public class Bird {

private void say() {

}

public static void main(String[] args) {

Bird bird1 = new Bird();

bird1.say();

Bird bird2 = new Bird();

bird2.say();

}

}

上面的代码建立两个不同的对象bird1和bird2,他们是同一个类型Bird,因此,它们可以接收同样的信息,也就是我需要调用Bird这个类型里面的say方法时,bird1和bird2都可以调用。

最后,对象是具有独立的存储、方法、标识,在jvm里面,每一个对象都是独立的,具有唯一id。

这一章节简单介绍了编程语言抽象过程,以及介绍了java的五个基础特性。

这一章节就到这里,谢谢。

-----------------------------------

版权声明:本文为博主原创文章,未经博主允许不得转载。

JAVA狗叫源代码_从头认识java-1.1 编程语言抽象过程以及java的基础特性相关推荐

  1. JAVA狗叫源代码_自制超声波驱狗器

    前言 有些时候,你会发现有的狗看见你就会不停的叫,这很烦.大多数时候,这不是狗的问题,而是狗主人的问题.如何让狗停止大叫,这是本文要讨论的问题. 超声波驱狗器是一种让狗停止大叫的装置,可以分为两类: ...

  2. java虚拟机是干吗的_从头开始学习-JVM(二):为什么java需要JVM(Java虚拟机)?...

    前言 在我们对java的越发了解之后,我们开始把注意力投到了java虚拟机这一块. 我们意识到,java所谓的"Write Once,Run Anywhere"的特性,就是基于JV ...

  3. Python后端转JAVA最快多久_【动力节点】老杜支招:Java小白学习入门攻略,涵盖学习路线...

    动力节点在B站的直播相当好,相当受欢迎,教学总监亲自解惑.零基础学Java的同学确实把思路打开不少. 回顾:11月14日晚8:00,杜老师在动力节点B站大咖直播间,首次开播与粉丝面基,本场直播不吹,不 ...

  4. java 等待几秒_问懵逼:请站在 JVM 角度谈谈 Java 的锁?

    存在的问题 自旋锁 自适应自旋 Java 对象的内存布局(重要) synchronized 锁升级流程 偏向锁 轻量级锁 重量级锁 可重入 悲观锁(互斥锁.排他锁) <Java 2019 超神之 ...

  5. java 中张孝祥老师_谁有传智博客张孝祥老师的Java视频——必须是完整的

    报告楼主,我有! 传智播客官网 itcast 传智播客J2EE全套视频教程,是目前覆盖面最广,项目最真实的视频教程 传智播客Java EE视频教程 <传智播客AJAX视频教程> <传 ...

  6. 学java之前要学_之前学过C#,现在还想学java,一般要学多久时间?

    之前学过C#,现在还想学java,一般要学多久时间? (2011-06-22 22:24:55) 标签: 新贵 杂谈 曩昔学功C#,现在还念学java,普通要学多暂时光?出有最好答案那要望您学的基础了 ...

  7. java名侦探柯南游戏大全_孩子们的游戏(圆圈中最后剩下的数),Java代码实现思路分享...

    下面给大家分享的是一个Java代码实例,下面一起来了解一下吧. 抽象建模能力 题目: 让小朋友们围成一个大圈,之后,随机指定一个数m,让编号为0的小朋友开始报数. 每一次,喊到了m-1的那个小朋友要出 ...

  8. java 修改源码_再谈给应用程序diy启动画面和java源代码补丁修改

    再谈给应用程序diy启动画面和java源代码补丁修改 2006-8-21 16:18 6365 再谈给应用程序diy启动画面和java源代码补丁修改 2006-8-21 16:18 6365 搞diy ...

  9. java 聊天工具源代码_简易聊天软件源码

    [java]代码库import java.io.*; import java.net.*; import java.util.*; public class ChatServer { boolean ...

最新文章

  1. Python+selenium自动化测试:报错:TypeError: 'WebElement' object is not iterable
  2. Android Studio 打开提示Invalid Gradle JDK configuration found错误
  3. [译] 每天一段 Spring 5 官方文档(5.1.4.RELEASE)—— Spring Framework Overview 06
  4. java如何对List集合中的元素进行排序(请收藏)
  5. 我不是天生的飞鸽传书2011
  6. Algorithms - Insertion Sort - 插入排序
  7. 测试文档模板_学会word2007创建自定义模板的方法,让你新建的文档结构都一致...
  8. 教你编写第一个人工智能程序
  9. 平稳时间序列模型的统计性质
  10. php登陆注册加密函数,php加密函数_php用户自定义加密函数
  11. 基于SSD1306的OLED的驱动学习(二):SSD1306的寻址方式
  12. 海量实时广告流平台(DSP广告系统)架构设计与实践
  13. matlab 无刷电机,无刷直流电机MATLAB仿真模型
  14. Windows2000下IE5升级到IE6
  15. 电脑怎么安装xp系统原版镜像
  16. 电脑网络异常故障解决办法
  17. HDU-4826 Labyrinth
  18. 虚拟主播合成视频使用教程
  19. kaldi 的安装和thchs30语音识别测试
  20. 说说北大软微那些事儿

热门文章

  1. Python语言程序设计基础 第二版(嵩天著)课后答案第六章
  2. [置顶] 忆往昔,看今朝(2012-2013年总结)
  3. .NET DataGridView 单元格添加日历选择控件
  4. python压缩文件tar_python 实现tar文件压缩解压的实例详解
  5. Unity案例-实现心电图效果
  6. 论文笔记:Universal Adversarial Triggers for Attacking and Analyzing NLP
  7. python判断素数_小白学Python | 你还在说你入不了门吗
  8. uva 11021 Tribbles 麻球繁衍 概率
  9. 数据安全--15--去标识化技术
  10. Sophos XG Firewall:如何使用Windows Server 2012为企业无线身份验证配置RADIUS