理论基础01:OOP-面向对象编程(Java概述)

transient: 变量修饰符,序列化失效 volatile和const一样是一个类型修饰符,被用来修饰不同线程访问和修改的变量
//java初始化顺序:默认赋值 直接显式赋值 静态代码块赋值 代码块赋值 构造器赋值

//初始化顺序:父静态变量-->子静态变量-->父非静态变量-->父静态代码块-->父构造函数------>子非变量
-->子静态代码块-->子构造函数

Java语言发展史 Java之父:詹姆斯 高斯林(James Gosling)
Java语言诞生于1995年,正式版本于1996年1月发布(jdk1.0);Java由SUN公司研发,SUN公司被 Oracle 收购
JavaSE5.0(1.5.0)Tiger 老虎  JavaSE6.0(1.6.0) Mustang 野马  JavaSE7.0(1.7.0) Dolphin 海豚

Java语言平台版本
JavaSE 标准版:是为开发桌面级应用提供的解决方案 该技术体系是下面两个体系的基础
JavaEE 企业版:是为企业级环境下的应用程序提供的一套解决方案 如Servlet JSP等
JavaME 小型版:是为开发电子消费产品和嵌入式设备提供的解决方案
C/S : Client / Server 客户端/服务器   B/S : Brower / Server 浏览器/服务器

Java语言特点
简单性 解释性 面向对象 高性能 分布式处理 多线程 健壮性 动态 安全性  跨平台 自动内存管理 开源 跨平台
跨平台原理:sun公司针对不同的操作系统开发了Java虚拟机(JVM Java virtual machine),由JVM负责Java程序在相应的体系中运行,实现了 write once,run anywhere

JRE与JDK
JRE(Java runtime Environment Java运行环境)包括JVM和Java程序所需的核心类库等
JDK(Java development kit Java开发工具包):是提供给开发人员使用的,其中包含了Java的开发工具,也包含了JRE
其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等  简单而言:使用JDK开发完成的Java程序,交给JRE去运行
JVM Java Virtual Machine Java虚拟机 ---- 主要用于与操作系统进行交互

javac HelloWorld.java 编译java源文件
java HelloWorld 执行字节码文件
简单介绍关键字 类体 结构 main方法

开发第一个应用程序的注意事项:
① 以 .java 结尾的文件,称为 Java源文件
② 一个 .java 源文件中可以有多个类,但是只能有一个 public 修饰的类
③ public 修饰的类的名称必须与 .java 源文件名称一致!
④ 每条语句以 ";" 结尾
⑤ Java 严格区分大小写
⑥ 若需要执行一个 .class 字节码文件,需要有主方法: public static void main(String[] args){}


环境搭建:计算机属性->高级系统设置->高级->环境变量 在系统变量新建变量名为%JAVA_HOME% 变量值为JDK安装路径 如 D:\Java\jdk1.7
在系统变量找到classpath:添加D:\Java\jdk1.7\bin;
set path=sxt;%path% start开新窗口 设置还有效
JAVA_HOME
//set classpath=d:\java0712\day01 //设置类路径
set classpath= //取消类路径
先找classpath
设置多个路径 set classpath=.;c:\;d:\

set查看所有环境变量
set java_home查看javahome变量路径
set 变量名= 清空环境变量的值  set 变量名=具体值;给变量赋值
%变量名%获取原有环境变量的值
set path=新值;%path% //当前配置有效

Java两大核心机制
–Java虚拟机(Java Virtual Machine)
–垃圾收集机制(Garbage Collection)将不再使用的内存空间进行回收。
JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。

// JRE = JVM + Java SE标准类库
JDK = JRE + 开发工具集(例如Javac编译工具等)
//JRE(Java Runtime Environment Java运行环境) 包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
//JDK(Java Development Kit Java开发工具包)JDK是提供给Java开发人员使用的,其中包含了java的开发工具,

====
/**
@author : hezhan  @version : v1.0  @param 方法的参数说明信息
*/
javadoc -d mydoc -author -version Rectangle.java//public class 才可以生成文档

javac -d <包目录结构的起始位置> <源文件名.java>  javac -d ./ Bird.java

打包过程如下: 创建文本文件,在其中指明主类。例如tempfile.txt: Main-Class: com.ccc.TestPerson <换行> 在应用程序相对于包的根目录中,执行jar命令打包程序: jar cmf tempfile.txt MyProgram.jar ./

可以在命令行执行.jar类型打包应用程序。例如: java –jar MyProgram.jar

/** JavaDoc @link生成参考其他JavaDoc的文档链接、@deprecated标明被废弃的类或方法或变量、@param描述方法参数、@return描述方法返回值、@throws描述方法抛出的异常
<p><strong>SmartDoll</strong>代表智能福娃</p>
@since 1.0    @link  @deprecated  @param描述方法的参数  @return描述返回值  @throws描述方法异常
@version 3.0
@author hz
@see com.hz.demo.Test
*/

javac -nowarn不输出警告信息 -verbose输出编译器运行中的详细工作信息 -classpath<路径>覆盖classpath环境变量,重新设定用户的classpath -sourcepath<路径>指定Java源文件的路径 -d<目录>指定编译生成的类文件的存放目录 -help显示各个命令选项的用法

java -classpath<路径>覆盖classpath环境变量 -verbose输出运行中的详细工作信息 -D<属性名=属性值>java -Duser="Tom" ClassName(System.getProperty("user"))//Tom -jar指定运行某个JAR文件中的特定Java类 -help显示各个命令选项的用法

JNI:java native interface

//java语言使用unicode字符集,含有65535个字符。所以字母包括A-Z a-z 汉字 日文片假名 平假名和朝鲜文等。
//Unicode:一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,使用 Unicode 没有乱码的问题。
//--cmd汉字乱码:javac -encoding UTF-8 lx.java
//--小应用程序查看器:appletviewer c:\java\hz\boy.html

打包:jar -cvf c:\dollapp\deploy\dollapp.jar *.*

解包:jar -xvf c:\dollapp\deploy\dollapp.jar

Java Virtual Machine:源文件-编译为字节码文件-由类加载器在字节码检验后-解析器-运行环境

 

 

 

 

ASCII(American Standard Code for Information Interchange)美国信息互换标准代码

//import语句:为了能使用java提供的类,我们可以使用import语句来引入所需要的类。在一个java源文件中可以有多个import语句,它们必须写在package语句(如果有的话)和类的定义之间。
//java为我们提供了大约60个包。javaAPI的类被组织成8个包:
java.applet 包含所有的实现Java Applet的类
java.awt 包含抽象窗口工具集中的图形 文本 窗口GUI类
java.awt.image 包含抽象窗口工具集中的图像处理类
java.lang 包含所有的基本语言类 //核心类库 系统自动引入
java.io 包含所有的输入输出类
java.net 包含所有实现网络功能的类
java.until 包含有用的数据类型类
java.awt.peer 平台无关的GUI工具集界面
如果要从一个包中引入多个类,可以使用*来替代: import java.awt.*;
引入自定义包:import tom.jiafei.*

 API(Application Programming Interface,应用程序编程接口)是 Java 提供的基本编程接口

关键字:被Java语言赋予特定含义的单词,关键字的字母都是小写,一般文本编辑器都有特殊的颜色标记
注意:goto和const作为保留字存在
关键字:被Java赋予了特殊含义的单词。如 abstract assert boolean break byte case catch char class const continue default do double else enum extends
false final find finally float for goto if implements import instanceof int interface long native new null package private protected public  while else short
void synchronized switch true break return 
static this super try throw throws
注意:关键字所有字母都为小写;main不是关键字但是却被JVM所识别

Java keywords

abstract assert boolean break byte case catch char class continue default do double else enum extends final finally float for if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronize this throw throws transient try void volatile while

标识符identifier:就是给类 接口 方法 变量等起名字时使用的字符序列(凡是自己命名的地方都叫标识符)
组成规则:英文大小写字母 数字0-9 $ 和_
注意:数字不能开头 不能是Java的关键字 严格区分大小写
包的命名规则:全部小写xxxyyyzzz,一般是公司域名倒着写 com.bjsxt.bean
类 接口:命名采用首字母大写 各个单词遵随驼峰式命名XxxYyyZzz
方法和变量:首字母小写 后面每个单词首字母大写xxxYyyZzz
常量:所有字母大写 XXX_YYY_ZZZ

注释:用于解释说明程序的文字,提高程序的可读性,帮助排错.Java为我们提供了三种注释方式
单行注释 //注释文字  多行注释 /*注释文字*/  文档注释 /** 注释文字 */  注意:多行注释不能嵌套

转义字符:'\x' x表示任意,\是转义符号,这种格式叫做转移字符
常见的转义字符 \t 表示制表符tab \r 回车 \n换行 '\"' '\''
转义字符:\'单引号 \"双引号 \\斜杠  \f换页 \t:table跳格 \b退格  \n换行符 \t制表符 \r回车(光标定位在当前行的开头) \\ \' \"

常量:在程序执行过程中其值不变,根据Java为我们提供的数据类型,可以定义相应的常量
1.整数常量.所有整数:120 911 12580   二进制:0b1101  八进制:076  十六进制:0xaf
2.小数常量.所有小数: 3.1415926 2.71828
3.布尔型常量.较为特殊,只有两个值:true false
4.字符常量.将一个数字字母或者符号用单引号括起来: 'a' '?' '2'
5.字符串常量.将一个或多个字符用双引号括起来: "abc" "110" "?#$+*@" ""
6.null常量.只有一个值就是null(可以赋值给引用数据类型表示空引用)

变量:成员变量(实例变量,类变量)堆内存、局部变量(参数变量、方法内的变量、代码块内的变量)栈内存

堆栈:用于临时保存局部变量的值;  堆:用于存储对象及其加载的类

Java提供两种数据类型:基本数据类型 和 引用数据类型

 

 

基本数据类型分为4类8八种
整型:  正数:原码、补码、反码都相同;  负数的补码=反码+1;  反码:0变1,1变0;
byte 占一个字节 -128到127
short 占两个字节 -2^15到2^15-1
int 占四个字节 -2^31到2^31-1 默认数据类型
long 占八个字节 -2^63到2^63-1 234L
浮点型:
float 占四个字节32位 12.5f
double 占八字节64位 默认数据类型
字符型:char 占两个字节 0-65535 Java语言采用Unicode编码 每个字符占两个字节,中文也是占用两个字节 所以char可以存储一个汉字
布尔型:boolean:true false

引用数据类型 :
|---类(class) -------- String
|---接口(interface)
|---数组([])

数据类型转换之隐式转换(小->大自动完成) int x=3;byte b=4; x = x + b;
自动类型转换(自动升级): 小容量转大容量。(系统自动完成)
①byte short char ---> int ---> long ---> float ---> double
②byte short char 三者之间不做运算,若运算都将自动提升为 int 再做运算
③boolean 不参与运算 boolean类型不可以转换为其它的数据类型。
④任何基本数据类型与 String 使用连接符"+" ,都将自动“串接”成 String
数据类型转换之强制转换(大->小 必须强制转换)
强制类型转换: 大容量转小容量.需要使用强转符 "(需要转换的类型)"可能损失精度
注意:混合运算时,byte short char之间不会相互转换,都会自动提升为int类型,其他类型混合运算时 小的数据类型提升为大的
char可以存储中文


数据类型和类型转换
为什么要有数据类型?为了对客观世界的对象进行描述.Java是强类型语言,对于每一种数据都定义了明确的具体数据类型
不同的数据类型在内存中分配不同的内存空间.

char 型数据用来表示通常意义上"字符"。
•字符型常量的三种表现形式:
1 字符常量是用单引号(‘ ’)括起来的单个字符,涵盖世界上所有书面语的字符。例如:char c1 = 'a'; char c2 = '中'; char c3 = '9';
2 Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。例如:char c3 = '\n'; -- '\n'表示换行符
3 直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表一个十六进制整数。如:\u000a 表示 \n。
•char 类型是可以进行运算的。因为它都对应有 Unicode 值。
注意:声明String变量 必须使用双引号 String str = "Hello";

boolean 类型适于逻辑运算,一般用于程序流程控制:
–if条件控制语句;
–while循环控制语句;
–do-while循环控制语句;
–for循环控制语句;
•boolean类型数据只允许取值true和false,不可以0或非 0 的整数替代true和false,这点和C语言不同。

顺序结构(sequence structure):自上而下
选择结构(selection structure):if(){} else if(){} else if(){} else{ }  switch(n) {case 1: ; break;  case 2: ; ;  default: ; } n的数据类型可以是:byte,short,char,int,枚举,String;
循环结构(iteration structure):while(){ continue; break;}  do{ }while();  for(int i=0; i<n; i++){ };  for(String s:str){System.out.println(s);}

for (初始化表达式①; 布尔值测试表达式②⑤⑦; 更改表达式){ 语句或语句块③⑥ ; }//执行顺序

//“&”和“&&”的区别:  位运算:& |  ^异或   逻辑运算:短路与&& ||  !
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“&”和“&&”的区别:单&时,左边无论真假,右边都进行运算;双&时,如果左边为真,右边参与运算,如果左边为假,
那么右边不参与运算。“|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。

//算术运算符 赋值运算符 比较运算符(关系运算符) 逻辑运算符 位运算符 三元运算符:a>b?true:false

+ - * / %  += -= *= /=  >= <= ==  左移<< 右移>>  无符号右移>>>  与运算& 或运算| 异或运算^ 取反码~

方法声明语法: 修饰符 返回值类型 方法名(参数类型 形参1,参数类型 形参2,….){ 程序代码 return 返回值; }//声明在类中,方法/函数不能嵌套

方法重载:方法名相同,参数列表不同,与返回值类型无关;

 面向对象程序设计OOP:Object Oriented Programming  面向过程编程:procedure oriented programming

构造类的结构,通过构造器constructor/构造方法创建对象:Person p = new Person();  构造方法/普通方法的重载overloading(同一个类)与覆盖overriding(在继承关系下,子类对父类方法的重写);

匿名对象:new Person().info();

类的封装encapsulation:private String name、继承inheritance:class Son extends Father、多态polymorphism:Animal a = new Dog();//父类引用指向子类对象

不能被继承的final类  final修饰的方法不能被重写;  final和abstract不能用时出现;

this可以调用本类构造器、本类方法、成员变量;  super可以调用父类构造器、父类方法、父类的成员变量

判断是否类对象: p instanceof Person

内部类的对象创建:Outer.Inner in = Outer.new Inner();

静态代码块->构造代码块->构造器

 

重载(overload):方法名称相同,参数列表不同。编译期概念

重写(override):子类和父类有相同的方法名和参数。运行期概念

 ==================

UML主要包含:
UCD(Use Case Diagram)用例图;从用户角度描述系统功能
Class Diagram:类框图;描述对象模型中类与类之间的关系
Sequence Diagram:时序图
Cooperation Diagram:协作图;描述对象的交互关系
State Transition Diagram:状态转换图
Component Diagram:组件图
Deployment Diagram:部署图
用例图、类框图、组件图和部署图构成了系统的静态模型
状态转换图、时序图和协作图则构成了系统的动态模型

===========

类之间的关系:5种
关联Association:两个相对独立的系统,当一个系统的实例与另一个系统的特定实例存在固定对应关系(构成从属关系)时即为关联;一对一、一对多、多对多
依赖dependency:指类之间的调用关系;类A访问类B提供的服务;通过参数传递对象调用方法,无需创建B类型
聚集(聚合)Aggregation:整体与局部的关系;不同的系统对象组合成一个整体,协作完成某些功能
泛化generalization:指类之间的继承关系
实现Realization:是类与接口之间的关系

 

 

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

面向对象三大基本特征和五大基本原则

三大特征:封装 继承 多态

封装encapsulation:把客观事物封装成抽象的类


继承inheritance:子类/派生类继承基类/父类/超类,可以使用父类功能,实现了类的扩展;类的单继承extends,接口的多实现implements 接口中只能定义全局常量static final;

  Java 代码的 复用有继承,组合以及代理三种具体的表现形式。


多态polymorphism:在继承前提下,子类覆写父类方法,父类引用指向子类对象。Animal A = new Dog();

 

五大原则:

单一职责原则(single-responsibility principle):一个来最好只做一件事。是低耦合、高内聚的引申
开放封闭原则(open-close principle):软件实体应该是可扩展,而不可修改的。即对扩展开放,对修改封闭。
利斯科夫替换原则(Liskov-substitution principle):子类必须能够替换其基类。
依赖倒置原则(dependency-inversion principle):依赖于抽象。即高层模块不依赖于底层模块;抽象不依赖于具体,具体依赖于抽象
接口隔离原则(interface-segregation principle):使用多个小的专门的接口,而不要使用一个大的总接口

posted @ 2021-02-05 12:08  geryhz  阅读(387)  评论(0编辑  收藏  举报