一 . Java组成部分

JDK : java development kit (Java开发工具)

JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也 包括了JRE。 所以安装了JDK,就不用在单独安装JRE了。其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等。

JRE : java runtime environment (Java运行环境)

包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好
Java程序,计算机中只需要安装JRE即可。

JVM : java Virtual Machine (Java虚拟机)

简单而言,使用JDK的开发工具完成的java程序,交给JRE去运行

  • JDK = JRE + 开发工具集(例如Javac编译工具等)
  • JRE = JVM + Java SE标准类库

JDK--开发环境(核心)

jdk主要包含三个部分:

  1. Java运行时环境,JVM
  2. Java的基础类库,这个类库的数量还是相当可观的
  3. Java的开发工具,它们都是辅助你更好地使用Java的利器jre--运行环境

JRE--运行环境

  1. jdk中的jre,jdk中包含的jre,在jre的bin目录里有个jvm.dll, 另,jre的lib目录中放的是一些JAVA类库的class文件,已经打包成jar文件。
  2. 独立的jre

不管是JDK中的JRE还是JRE既然是运行时环境必须有JVM。所以JVM也是有两个的。

JVM--转换环境

一次编译,随处运行

Java的程序也就是编译的代码都会编译为class文件,class文件就是在jvm上运行的文件,只有JVM还不能完全支持class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib,而jre包含lib类库。

JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改的运行。

二 . OOP五大特性

面向对象编程的最大挑战就是如何在问题空间的元素和解决方案空间的对象之间建立一对一的关联。

  1. 万物皆对象
  2. 程序就是多个对象彼此调用方法的过程
  3. 从内存角度而言,每个对象都是由其它更基础的对象组成的
  4. 每一个对象都有类型,都可以进行实例化, 类描述了具有相同特性和行为的对象集合,一个类实际上就是一个数据类型。
  5. 同一类型的对象可以接收相同的消息

创建抽象数据类型(类)是面向对象程序设计的基本概念之一。抽象数据类型的运行方式与内置类型几乎完全一致:你可以创建某一类型的变量(按照面向对象的说法,程其为对象或实例),然后操作这些变量(称其为发送消息或请求;你发送消息,对象就能够知道需要做什么)。

每个对象都是一个接口

所有的对象都是唯一的,但同时也是具有相同的特性和行为的对象所归属的类的一部分。程序中使用基本关键字class来引入新的类型。事实上,所有的面向对象程序设计语言都是用class这个关键字来表示数据类型。
每个对象都只能满足某些请求,这些请求由对象的接口(interface)所定义,决定接口的便是类型 ,接口确定了对某一特定对象所能发出的请求。但是,在程序中必须有满足这些请求的代码。这些代码与隐藏的数据一起构成了实现. 定义这个对象的“引用”(名),然后调用new方法来创建该类型的新对象。为了向对象发送消息,需要声明对象的名称,并以圆点符号链接一个消息请求

三 . 类间的关系

1.依赖 (dependent)

依赖关系表示一个类依赖于另一个类的定义(引用了), 与关联不同的是,类里并没有另一个类型的属性,另一个类的实例是以参量的方式传入到本类方法中去的。一般而言,依赖关系在Java语言中体现为成员变量、局域变量、方法的形参、方法返回值,或者对静态方法的调用。

在UML图中是用虚线箭头表示

class A {
private B b;//成员变量
public B show(B b) {//形参
B.show();//静态方法的调用
new B();//局部变量
return b;//返回值
}
}
class B {
static void show(){}
}

2.关联 (Association)

关联关系:指的是类与类之间的联接,它使一个类知道另一个类的属性和方法(实例变量体现)。A类依赖于B对象,并且把B作为A的一个成员变量, 则A和B存在关联关系. (依赖且是成员变量)
关联可以是双向的,也可以是单向的。两个类之前是一个层次的,不存在部分跟整体之间的关系。

在UML图中是用实线或实线箭头表示

 class AClass {
private BClass b;//A单关联B
} class BClass {//B双向关联C
private CClass cClass;
} class CClass {
private BClass bClass;
}


按照多重性分类:

  • 一对一:一个A对象属于一个B对象,一个B对象属于一个A对象。
  • 一对多:一个A对象包含多个B对象。
  • 多对一:多个A对象属于一个B对象,并且多个A对象中的每个A对象只能属于一个B对象。
  • 多对多:一个A对象属于多个B对象,一个B对象属于多个A对象。

3.聚合(aggregtion)

  • 聚合关系是关联关系的一种特例,他体现的是整体与部分,是一种“弱拥有”的关系,即has-a的关系。聚合是整体和个体之间的关系。
  • 例如,汽车类与引擎类、轮胎类,以及其它的零件类之间的关系便整体和个体的关系。
  • 与关联关系一样,聚合关系 也是通过实例变量实现的。但是关联关系所涉及的两个类是处在同一层次上的,而在聚合关系中,两个类是处在不平等层次上的,一个代表整体,另一个代表部分。
  • 聚合关系表示整体和个体的关系,整体和个体可以相互独立存在,一定是有两个模块分别管理整体和个体。

在UML图中是用空心箭头+实线箭头表示

 class Iphone {//整体(手机)
private Card card;//成员变量
} class Card {//个体(卡)
}

4.组合(composition)

  • 组合关系是关联关系的一种特例,他体现的是一种contains-a(包含)的关系,这种关系比聚合更强,也称为强聚合。
  • 它要求普通的聚合关系中代表整体的对象负责代表部分对象的生命周期,组合关系是不能共享的。代表整体的对象需要负责保持部分对象和存活,在一些情况下将负责代表部分的对象湮灭掉。代表整体的对象可以将代表部分的对象传递给另一个对象,由后者负责此对象的生命周期。换言之,代表部分的对象在每一个时刻只能与一个对象发生组合关系,由后者排他地负责生命周期。部分和整体的生命周期一样。
  • 部分和整体是不能分开的,一定是在一个模块中同时管理整体和个体,生命周期必须相同(级联)。(人和心脏)

在UML类图中,组合通常使用实心菱形+实线箭头表示

class Iphone {//整体(手机)
//手机出厂是必须有屏幕,手机销毁屏幕也G
private Screen screen=new SCreen();
public Iphone() {
screen = new Screen();
}
}
class Screen {//个体(屏幕)
}

5.泛化 (generalization)

泛化关系可以说是继承关系,是依赖关系的特例。

在UML类图中,组合通常使用实线空心三角箭头表示 带箭头的实线,箭头指向父类

6 .实现关系(Implementation)

B类实现了A接口,就说A接口和B类之间有实现关系,实现关系是依赖关系的特例。

在UML类图中,组合通常使用虚线空心三角箭头表示 带箭头的虚线,箭头指向父类

四 . Java主要特性

  • Java语言是强制面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)
  • Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
  • Java语言是健壮的。Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择
  • Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。如:安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查。
  • Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。
  • Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统的解释器中运行。先编译后解释。
  • Java是性能略高的。与那些解释型的高级脚本语言相比,Java的性能还是较优的。
  • Java语言是原生支持多线程的。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。

五、 Java程序运行机制及运行过程

  • 特点一:面向对象

    • 两个基本概念:类、对象
    • 三大特性:封装、继承、多态
  • 特点二:健壮性
    • 吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制
    • 主要是因为Java中有一种机制:自动垃圾回收机制(GC机制—garbage collection)。因为Java语言引入了自动垃圾回收机制(GC机制),Java程序启动了一个单独的垃圾回收线程,时刻监测内存使用情况,在特定时机会回收/释放垃圾数据,这样会让内存时刻处于最好的状态。
  • 特点三:跨平台性 (针对字节码)
    • 跨平台性:通过Java语言编写的应用程序在不同的系统平台上都可以运行。“Write once , Run Anywhere”
    • 原理:只要在需要运行java 应用程序的操作系统上,先安装一个Java虚拟机(JVM Java Virtual Machine) 即可。由JVM来负责Java程序在该系统中的运行。

Java两种核心机制

1、Java虚拟机(Java VirtalMachine)

  • JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。
  • 对于不同的平台,有不同的虚拟机。
  • 只有某平台提供了对应的java虚拟机,java程序才可在此平台运行。
  • Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行

2、垃圾收集机制(Garbage Collection)

  • 不再使用的内存空间应回收——垃圾回收。
  • 在C/C++等语言中,由程序员负责回收无用内存。
  • Java 语言消除了程序员回收无用内存空间的责任:Java程序启动了一个单独的垃圾回收线程,时刻监测内存使用情况。并在JVM空闲时,检查并释放那些可被释放的存储空间。
  • 垃圾回收在Java程序运行过程中自动进行,程序员无法精确控制和干预。

六 Java注意事项

  1. 尽量使用final修饰符
  2. 尽量重用对象
  3. 尽可能使用局部变量
  4. 及时关闭流
  5. 尽量减少对同一个变量的重复计算
  6. 尽量采用懒加载的策略,即在需要的时候才创建
  7. 慎用异常
  8. 不要在循环中使用trycatch,应该把其放在最外层
  9. 尽量能估计到待添加的内容的长度,为底层以数组方式实现的集合、工具类指定初始长度
  10. 当复制大量数据时,使用system.arraycopy命令
  11. 乘法和除法使用移位操作
  12. 循环内不要不断创建对象引用
  13. 基于效率和类型检查的考虑,应该尽可能使用array,无法确定数组大小时才使用ArrayList
  14. 尽量使用hashmap、ArrayList、stringbuilder,除非线程安全需要,否则不建议使用hashtable、vector、stringbuffer,后三者由于使用同步机制而导致了性能开销。
  15. 不要将数组声明为public static final
  16. 尽量在合适的场合使用单例模式
  17. 尽量避免使用静态变量
  18. 及时清除不再需要的会话
  19. 实现RandomAccess接口的集合比如ArrayList,应当使用最普通的for循环而不是foreach循环
  20. 使用同步代码块代替同步方法
  21. 将常量声明为static final,并以大写命名
  22. 不要创建一些不使用的对象,不要导入一些不使用的类
  23. 程序运行过程中避免使用反射
  24. 使用数据库连接池和线程池
  25. 使用带缓冲的输入输出流进行IO操作
  26. 顺序插入和随机访问比较多的场景用ArrayList,元素删除和中间插入比较多的场景使用LinkedList
  27. 不要让public方法中有太多的参数
  28. 字符串变量和字符串常量equals的时候将字符串常量写在前面
  29. 请知道,在java中if (i == 1)和if (1 == i)是没有区别的,但从阅读习惯上讲,建议使用前者
  30. 不要对数组使用toString方法
  31. 不要对超出范围的基础数据类型做向下强制类型转型
  32. 公用的集合类中不使用的数据一定要及时的remove掉
  33. 把一个基本类型转为字符串,toString最快,String.valueOf次之,数据+“”最慢
  34. 使用最有效率的方法去遍历map
  35. 对资源的close()建议分开操作
  36. 一行代码尽量只写一遍

一、Java简单概述的更多相关文章

  1. java基础---java语言概述

    一.计算机编程的两种范型 1.面向过程的模型---具有线性执行特点,认为是代码作用于数据. 2.面向对象的模型---围绕它的数据(即对象)和为这个数据定义的接口来组织程序:实际上是用数据控制代码的访问 ...

  2. Java核心技术(Java白皮书)卷Ⅰ 第一章 Java程序设计概述

    第1章 Java程序设计概述1.1 Java程序设计平台 具有令人赏心悦目的语法和易于理解的语言,与其他许多优秀语言一样,Java满足这些要求. 可移植性 垃圾收集 提供大型的库  如果想要有奇特的绘 ...

  3. Java NIO系列教程(一) Java NIO 概述

    <I/O模型之四:Java 浅析I/O模型> 一.阻塞IO与非阻塞IO 阻塞IO: 通常在进行同步I/O操作时,如果读取数据,代码会阻塞直至有 可供读取的数据.同样,写入调用将会阻塞直至数 ...

  4. 第1章 Java语言概述--HelloWorld--环境搭建

    SE学什么 第1章 Java语言概述 第2章 基本语法 第3章 数组 第4章 面向对象编程(上) 第5章 面向对象编程(中) 第6章 面向对象编程(下) 第7章 异常处理 第8章 枚举类&注解 ...

  5. javaSE习题 第一章 JAVA语言概述

    转眼就开学了,正式在学校学习SE部分,由于暑假放视频过了一遍,略感觉轻松,今天开始,博客将会记录我的课本习题,主要以文字和代码的形式展现,一是把SE基础加强一下,二是课本中有很多知识是视频中没有的,做 ...

  6. Java集合--概述

    目录 Java集合--概述 摘要 图示 正文 Java集合--概述 摘要 ​ 本文主要介绍集合的整体概念,并作为接下来Java集合实现类讲解的索引. 图示 ​ 这是在网上看到了这样一张图,感觉很清晰, ...

  7. Java多线程-Java多线程概述

    第一章 Java多线程概述 线程的启动 线程的暂停 线程的优先级 线程安全相关问题 1.1 进程与线程 进程:可以将运行在内存中的程序(如exe文件)理解为进程,进程是受操作系统管理的基本的运行单元. ...

  8. 2015/12/29 Java语言概述 操作中注意事项

    java语言概述 ①版本分类:JavaSE 标准版 桌面开发                 JavaEE 企业版 网络开发                 JavaME 移动版 嵌入式开发(塞班系统 ...

  9. 一、Java语言概述与开发环境、第一个java程序

    目录: 1.1 Java特点 1.2 Java程序运行机制 1.3 安装JDl和配置环境变量 1.4 第一个JAVA程序 1.5 第一个JAVA程序的含义 前言 Java语言历时近二十年,已发展成为人 ...

  10. 00:Java简单了解

    浅谈Java之概述 Java是SUN(Stanford University Network),斯坦福大学网络公司)1995年推出的一门高级编程语言.Java是一种面向Internet的编程语言.随着 ...

随机推荐

  1. TypeScript的super

    (function(){ class Animal{ name:string; constructor(name:string){ this.name=name; } sayHello(){ cons ...

  2. 数据库链接失败错误ERROR com.alibaba.druid.pool.DruidDataSource - {dataSource-1} init error解决

    用java -jar启动之后,只要一访问数据库就报错,错误信息如下: 文字如下: 2019-07-02 10:25:12.220 ---> [http-nio-8080-exec-1] ---& ...

  3. Win+R 常用命令

      regedit 系统注册表编辑器 osk 打开键盘 msconfig 关闭系统开机启动项 gpedit.msc 本地组策略编辑器 nslookup IP地址侦测器 explorer 打开资源管理器 ...

  4. Blockchain-enabled Access Control with Fog Nodes for Independent IoTs

    摘要: 物联网设备能力有限且数量多,因此当前的传统物联网平台可能无法在可扩展性.可靠性和实时响应方面有效地处理访问控制.本文提出了一种基于区块链.雾节点和物的角色的分散式物联网访问控制系统,利用以太坊 ...

  5. java中线程的两种创建方式

    第一种:继承java.lang.Thread类.然后重写run方法 例如我们模拟一个龟兔赛跑 1 package edu.aeon.thread; 2 3 /** 4 * 说明:模拟龟兔赛跑 5 * ...

  6. Kafka -- 基本操作

    kafka 环境的安装 docker run -d --name zookeeper_zh --restart always --network kafka-net -e ALLOW_ANONYMOU ...

  7. Mysql数据库的表结构

    [INFORMATION_SCHEMA 数据库] 是MySQL自带的,它提供了访问数据库 元数据 的方式, 元数据:数据库名或表名,列的数据类型,或访问权限等. 在MySQL中,把[INFORMATI ...

  8. 读后笔记 -- Java核心技术(第11版 卷 II ) Chapter1 Java 8 的流库

    1.1 从迭代到流的操作 迭代:for, while 流:stream().优点:1)代码易读:2)性能优化 public class CountingLongWords { public stati ...

  9. Unity 读取Json文件、创建Json文件

    using System.IO; using UnityEngine; public class ReadJson:MonoBehaviour { public static TestSetting ...

  10. MySQL表操作(下篇)--完整性约束

    一.介绍 约束条件与数据类型的宽度一样,都是可选参数 作用:用于保证数据的完整性和一致性主要分为: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录FOREIGN KEY ...