博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA基础中的基础
阅读量:3964 次
发布时间:2019-05-24

本文共 8602 字,大约阅读时间需要 28 分钟。

1. 项目流程图

在这里插入图片描述

2. 计算机构成

2.1 软件

使计算机按照事先预定好的顺序完成特定的功能的虚拟构件

系统软件

DOS/win/MacOS/iOS/Unix/Linux
应用软件
Android(基于Linux系统环境运行)/办公软件/设计软件/开发软件等等

2.1硬件

计算机系统中由电子,机械和光电元件等组成的各种物理装置的总称,按系统结构的要求构成一个有机整体为计算机软件运行提供物质基础。

构成成分:CPU、主板、内存、电源、主机箱、硬盘、显卡、键盘、鼠标,显示器

3. 计算机的三种体系

  1. 图灵机:软件与硬件分开,软件控制硬件(控制程序和输入程序)
  2. 冯诺依曼体系:计算机应该由计算器,运算器,存储设备,输入设备,输出设备组成
  3. 哈佛结构:基本与冯诺依曼结构相同,只是将存储器分成了程序/指令存储器 和 数据存储器,这样可以使得读写指令 和 读写数据分离开来,提高效率

4. DOS命令

命令 释义
d: D盘盘符切换
dir 列出盘符下所有文件;/p 分页显示下一页内容,按任意键查看下一屏;/s 显示所有目录及其子目录下所有文件 ;/w 宽屏显示;/o 分类顺序显示
cd java 切换文件夹,进入java文件夹
cd … 返回上一级目录
cd . 当前目录
cd …/… 返回上两级目录
cd / 返回根目录
tab 自动补齐
md 新建文件夹;可以新建以【.】开头的文件夹
rd 删除空文件夹
del + 文件名.扩展名 删除文件,不可逆
* 通配符,根据*.exe查找所有exe文件或者java.*查找所有java名称文件
cls 清屏
copy a.txt d:\myFile 复制a.txt文件到d:\myFile文件夹中
copy myFile myPhoto 只复制myFile文件夹下的所有文件到myPhoto中,不包括子文件夹中的文件以及文件夹
xcopy myFile myPhoto /s 复制myFile文件夹下的所有文件及文件夹到myPhoto中,包括子文件夹中的文件,但不复制空目录
xcopy myFile myPhoto /e 复制myFile文件夹下的所有文件及文件夹到myPhoto中,包括子文件夹中的文件,包括空目录

5. 二进制

5.1 1~15二进制编码

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111

5.2 进制格式

八进制 0 或 %o 表示:0-7,所以相当于每3位二进制=1位八进制,000~111。

十六进制 0x 或 %x 表示:0-F,所以相当于每4位二进制=1位十六进制,0000~1111。

5.3 进制的转化

十进制转二进制

  • 十进制除2取余数,必须除尽至商0,倒叙即转为二进制
  • 小数:小数部分每乘以2取整数部分整数,直到小数部分为0,从上到下顺序排列
  • 5.25–>101.01 ;3.2这样的数字,小数部分无法乘2到0,所以只能近似取值

二进制转十进制

  • 从低位到高位,各位数字依次乘以20,21,22…,然后相加
  • 二进制从低位到高位依次为1/2/4/8/16/32…相当于个十百千,分别乘以各位数字,然后相加
  • 小数:小数部分为2的负次幂 111.11–>7.75

十进制转八进制/十六进制

十进制除8或16,除尽至商0取余数,倒叙

八进制转十进制

低位到高位依次为1/8/64/83…,相当于个十百千,分别曾以各位数字,然后相加

十六进制转十进制

低位到高位依次为1/16/162/163…,相当于个十百千,分别曾以各位数字,然后相加

八进制转二进制

各位数字分别处以2,除尽至商0取余数倒叙,必须是三位,如果不足三位,超三位舍弃高位,补零,如:226,分别处以2取余数倒叙为010/010/110

十六进制转二进制

各位数字分别处以2,除尽至商0取余数倒叙,必须是四位,如果不足四位补零,超四位舍弃高位

二进制转八进制/十六进制

分别拆为每三个一组/每四个一组,然后分别进行类似"二进制转十进制"的运算方法

5.4 进制的运算

原码/反码-补码

  1. 反码: 1变为0,0变为1,注意最高位表示数字符号,如正数为0,负数为1,不可进行反码操作
  2. 补码: 反码基础上+1
  3. 反码和补码的操作不包括符号位
  4. 意义: 计算机都是以补码形式存储和处理数据,正整数都是三码合一,而负整数需要进行反码-补码转化,这样可以简化计算机的运算逻辑复杂度,提高计算机运行效率,如81+(-81),如果不进行转码操作,直接计算结果是错误的
  5. 正数三码合一

6. 语言的分类

6.1 编译性语言

速度快,直接交给CPU执行:C/C++/PHP/Object-C

6.2 解释性语言

跨平台,效率略低,需要解释给CPU:Java/C#

7. Java语言

7.1 Java语言发展史

创始人:詹姆斯·高斯林(James Gosling),1990年,在Sun公司与Patrick,Naughton和Mike Sheridan等人合作“绿色计划”,后来发展一套语言叫做“Oak”,后改名为Java

7.2 java平台版本

  • J2SE(Java 2 Platform Standard Edition)
    标准版是为开发普通桌面和商务应用程序提供的解决方案,该技术体系是其他两者的基础,可以完成一些桌面应用程序的开发
  • J2ME(Java 2 Platform Micro Edition)小型版
    是为开发电子消费产品和嵌入式设备提供的解决方案
  • J2EE(Java 2 Platform Enterprise Edition)企业版
    为开发企业环境下的应用程序提供的一套解决方案

7.3 java语言特性

  1. 核心:简单性、面向对象、开源、跨平台
  2. 其他:解释性、高性能、分布式处理、多线程、健壮性、动态、结构中立、安全性

体系结构中立:虚拟机生成代码,可在任何机器上执行

可移植性:各种Java库和可移植接口,支持平台独立性

7.4 java配置环境变量

需要配置的原因:windows系统在查找程序的时候首先会在当前文件夹下查找,找不到的话就会去path路径下找

  1. 找到exe路径,如D:\Java\benti\bin\
  2. 我的电脑–>属性–>高级系统设置–>环境变量–>系统变量
  3. 新建系统变量:JAVA_HOME,变量值为D:\Java\benti
  4. 找到path,编辑后新建%JAVA_HOME%\bin 放到最上面

7.5 java 核心

  1. java具有跨平台特性,需要编译器进行编译,然后在不同平台的虚拟机jvm上执行
    在这里插入图片描述
  2. JRE
    Java Runtime Environment 运行环境
    JRE=JVM+lib(核心类库,辅助JVM运行的工具)
  3. JDK
    Java Development Kits 开发工具包
    JDK=JRE+开发工具包
  4. JDK目录结构分析
    • bin: binary二进制,主要存放java的开发工具

    • javac.exe/java.exe/javadoc.exe(编写说明文档)/javap.exe(反编译)

      javap: 把class字节码文件反编译为虚拟机指令,CA FE BA BE开头字节码文件为java固有的模数

      dos命令下
      (1) javap -c XXX.class
      (2) javap -v XXX.class
      (3) 在dos中使用Java反编译工具 javap 反编译 .class 文件 :
      javap -c -l -private XXX.class
      -c: 反编译的一个选项
      -l: 显示行号
      ​-private: 显示所有的类和成员
      ​XXX.class: 编译之后生产的字节码文件

      javadoc:开发工具中的Generate javadoc选项进行生成,注意要将【-encoding utf-8 -charset utf-8】写入对应位置然后生成

    • db: Database数据库 ,是JDK自带的小型数据库Derby

    • include,存放java运行需要调用的系统资源的接口文件

    • jre

    • lib

    • src.zip,Java完整源代码

  5. 垃圾回收机制GC(Garbage Collection)
    JVM提供了一种系统线程跟踪存储空间的分配情况,并在JVM的空闲时,检查并释放那些可以被释放的存储空间。
    垃圾回收器在Java程序运行过程中自动启用,程序员无法精确控制和干预,即使程序员通过代码告诉垃圾回收器执行,不会立即回收内存。
  6. 设置java运行内存
    在这里插入图片描述
  7. 设置main方法的args参数
    在这里插入图片描述

7.6 java语言开发规范

  1. 组成规则
    英文大小写字母、数字、$和_
    不能是java中关键字;不能数字开头;禁止出现仅靠大小写区分的相似的标识符
  2. 命名格式要求(按照级别划分)
  • 项目名称
  • 包名称:全部小写,一般为公司域名的倒写 www.naruto.com–>com.naruto.package(包名)
  • 首字母大写,多个单词相连的时候,每个单词的首字母都要大写(驼峰命名)TestDemo
  • 方法名、变量、常量

    方法名和变量:一个单词时,首字母小写,多个单词时,从第二个单词开始,所有的单词的首字母都要大写getName

    自定义常量:所有字母大写,多个单词连接时,使用下划线( _ )连接MAX_VALUE
    变量的名字应当使用“名词”或者“形容词+名词”
    函数的名字应当使用“动词”或者动宾

  1. 注释格式要求
  • "文档"注释必须在类、接口、构造器、方法、字段信息前
    位于声明之前,注释前空一行,注释后不空行;

文档注释格式:

/***函数功能介绍*@param  参数1  说明*@param  参数2  说明*@renturn 返回值类型  说明*///相关标签介绍——     @param ;  	参数    ——     @return ;   	返回值  ——     @exception ; 异常类名 ——     @author ;  	作者  ——     @version ; 	版本号——     @see ;        	引用——     @since ;   	描述文本——     @serial ;    	序列化警告——     @deprecated ;	过期文本
  • 函数要有实现注释
    块注释或单行注释之前要空行,但是与后面代码之间没有;
    并行注释,则必须在注释和代码之间空格
  1. 函数/方法书写格式要求
  • 所有的成员变量或者局部变量的定义都放到最前面,统一
  • 数据类型选择,请注意范围:没有特定要求的情况下,浮点类型最好使用double
  • 尽量减少单独 return; 的使用
  • 函数功能单一化:仅数据处理
  • 分段空行要求

    源文件中的逻辑片断之间

    类声明和接口声明之间
    函数之间
    方法内的局部变量和方法的第一条语句之间
    一个方法内的两个逻辑段之间间隔一个空行
    一个大语句内与第一个小语句之间不需要空行,而多个小语句之间需要空行

  • 空格缩进要求

    所有关键字之后要加一个空格

    语句内的逗号和分号之后要加一个空格
    所有的二元运算符前后应当加空格
    一元操作符如“!”、“~”、“++”、“–”等前后不加空格
    在括号的内侧总是不添加空格
    函数名之后不要加空格,紧跟左括号, 但是小括号后与大括号之间必须空格
    作为结束符的“;”和 ","前面一律不加空格
    “[]”、“.”等操作符前后不加空格

  • 换行要求

    每行不允许超过80个字符,超过80个字符必须折行

    if语句的折行通常缩进2个tab,保证对齐
    三元表达式折行:【?】和【:】各站一行,作为开头
    一行一个声明

  • 变量/运算表达式要求

    常量与变量间的比较,建议把常量放在变量前 【if (null == arr)】

    默认i/j/k/m/n为循环变量
    在代码中注意数据类型一致化问题
    操作字符转换,能用字符表示,就不要用其他数据
    在声明局部变量的同时必须初始化,一般变量为0/-1,数组为null
    在含有多种运算符的表达式中使用圆括号【(x >= 0) ? x : -x;】
    三元运算符必须单独使用,不要再和其它运算混在一起
    禁止使用内嵌(embedded)赋值运算符,必须拆分

  1. 流程控制语句规范
  • if语句的逻辑判断部分,要充分利用逻辑短路原则:重要性先后判断,提高效率

  • switch-case 语句

    (1)运行的代码只能是case 到 break之间,或者case 到 大括号之间!!! 在case之外的点是不能被执行的,编译时会有语法错误,如果在eclipse /IDE工具下,提示的是 unreachable code

    (2)break可以省略,但是代码是继续执行到遇到break或者大括号结束,穿透特性,无特殊情况必须有break;
    (3)不能出现相同的case选项
    (4)必须有default
    (5)switch的值只能是byte/short/int/char/enum(枚举)和String

  • 循环语句

    (1)在dos中,出现死循环, ctrl+c 终止

    (2)先把循环结构写好,然后填充内容
    (3)do{ }while( ); 语句,注意有分号, 第一次循环执行是不经过任何判断的,不可控,直接执行
    (4)[已知] / [可控] / [效率]

  • continue break return

    (1)continue关键字:1. 结束本次循环,继续下一项循环,在while或者do - while中,如果使用continue关键字,要时刻注意continue关键字的位置,是否会影响到循环条件变更,如果条件不变,导致死循环 2. 在业务逻辑中,如果必须使用continue,则最好与for循环使用

    (2)break关键字:跳出switch case结构或者循环结构
    (3)return关键字:将当前方法运行的结果进行返回,结束方法

  1. 数组
    0x0: 是内存中编号为0的空间首地址,这个地址是受系统保护的!!!
    这个地址,任何的程序,都不能读取或者写入数据 , 如果发生读写操作,直接被系统干掉!!
    null 这个就是0x0的关键字
    null可以作为【引用数据类型】变量的初始值
  2. 函数
  • 在代码中,有很多重复功能的代码块。需要重复利用,在不同的地方,重复使用!!!
  • 函数编程思想:
  1. 需求分析:
    (1)函数功能/使用目的是什么?
    (2)函数的命名,见名知意
    (3)函数需要哪些参数?什么类型?参数列表
    (4)函数的返回值类型是什么?含义是什么?
  2. 思考逻辑实现流程
    用【实现注释】直接把函数的运行流程,步骤写好,尽量细化, 必须有参数合法化且重要性先后的判断
  3. 按照流程写代码
    按照注释,完成代码,在完成当前步骤之前,不要考虑下一步
  4. 测试
    健壮性,安全性,稳定性,高效
  • 递归函数
  1. 递归程序必须事先判断好停止点,不然就会造成无限调用的情况
  2. 递归程序执行的动作虽然一样,但是每次执行的参数都不同,不然就会无意义

8.基本数据类型

8.1 常量

字符常量

定义: 单引号包含的单个元素
转义字符:

1.转义字符是一个整体,可以看做一个字符常量

2.转义字符有且只能转义\之后的第一个字符
类别:
"打印双引号
\r回车
\n换行
\t制表符,即tab
\展示一个反斜杠
\\展示两个反斜杠
‘\40’表示八进制40,对应十进制为32,即sp空格
‘\x40’表示十六进制40
需要初始化一个字符变量,可以使用’\0’
自定义常量
自定义常量(不可变的“变量”)

8.2 基本数据类型

关键字

数值型

类型 字节 范围
整数型byte 1字节(8bit) -27~27-1(-128~127)
整数型short 2字节 -215~215-1 -32768到 32767
整数型int 4字节 -231~231-1
整数型long 8字节 -263~263-1
浮点型float 4字节
浮点型double 8字节

循环取值:各类型数据,在超过取值范围的时候,不会报错,而是在取值范围内循环

byte z = -128;byte w = --z;//结果为127

字符型char

  • 2字节 0~65535,没有负数
  • 因为java使用的是Unicode编码,Unicode编码中的每个字符占用两个字节,可以存放中文

布尔型boolean

理论上是占八分之一个字节

类型转换

由于不同数据类型之间无法进行运算,所以需要将一种数据类型转换为另外一种数据类型

隐式转换

  • 小的数据类型转成大的数据类型。
  • Long类型默认可以转Float
  • 整型转浮点型,默认向下取整
  • 二进制小数部分存在近似取值,所以,double类型数据存在丢失精度的问题
double n = (1.4 - 0.5)/0.9;//由于1.4转二进制只能近似,所以结果为0.999999999
  • char 默认转 int

强制转换

注意不要超过目标变量类型的极限

8.3 引用数据类型

类、接口、数组、枚举(一种类)、注解(一种接口)、字符串

8.3.1 包装类

包装类不要使用==,这个只在-128~127生效

包装类与基本类型一样,不能修改参数数值,可以使用Holder

@Testpublic void testHashCode() {
IntHolder x = new IntHolder(2); Integer y = triple(x); System.out.println("x = " + x.value + ", y = " + y);}private Integer triple(IntHolder x) {
x.value = 3 * x.value; return x.value;}//printx = 6, y = 6

9.运算符

9.1 算数

在运算的过程中,只有被赋值的变量才会修改变量值,其他的都是在提供运算数据,final修饰的变量也会变为只提供运算数据的常量。

自增自减运算:

按照算术运算符优先级,首先会计算number++,在内存中,会将number的值存储在一个区间内,然后执行number = number +1,最后将【区间内存储的值】进行赋值运算,赋给k

在使用自增自减运算符,单独成行,避免没有必要的歧义

9.2 逻辑运算符

  1. & : 逻辑与,同时 true & true = true true & false = flase ,不存在短路问题
  2. | : 逻辑或 true| true = true true | false = true false | false = false,不存在短路问题
  3. ^ : 异或(相同为假不同为真) true ^ true = false false ^ false = false rue ^ false = true
  4. ! : 非 !true = false !false = true
  5. && : 短路与, 两遍只要有一边的值为fasle , 虚拟机就不会再查看另外一边了
  6. || : 短路或, 两边只要有一遍的值为true, 虚拟机就不会再查看另外一边了

9.3 位运算(二进制)

  1. & 与, 有0则0
  2. | 或, 有1则1
  3. ^ 异或, 相同为0,不同为1

    a^b^a , a^a^b , 结果均为b, 即一个数异或同一个数两次, 结果为本身

    可以用于数值交换:a=a^b; b=a^b;a=a^b

  4. ~ 按位取反, 0变1,1变0,符号位也变
  5. >> 有符号右移, 符号不变, 右移一位, 相当于除以2, 右移两位, 相当于除以4
  6. << 有符号左移, 符号不变, 左移一位, 相当于乘以2, 左移两位, 相当于乘以4
  7. >>> 无符号右移, 右边舍弃, 高位只补0

9.4 运算符的优先级

算数运算符

括号 > 正号、负号、++、-- > 乘号、除号、取余号 > 加号、减号 > 位运算 > 大于号、等号、小于号、不等号 > 各种赋值符号 > return

逻辑运算符

逻辑非 > 等号、不等号 > 逻辑与、或、异或 > 各种赋值符号

10 类设计技巧与原则

1、一定要保证数据私有

2、一定要对数据初始化
3、不要在类中使用过多基本类型
4、不是所有的域都需要独立的访问器get和更改器set
5、将职责过多的类进行分解
6、类名和方法名都要能够体现其职责
7、优先使用不可变的类

11 继承设计技巧

1、将公告操作和域放在超类

2、 不要使用被包含的域

protected 的缺点:

可以任意派生子类并访问 protected 的实例域, 破坏封装性;
同一个包内所有类都可以访问 protected 域, 即使其不是这个类的子类.
protected 的场景应该是定义只能在子类中使用的方法时才用.

3、使用继承实现 is-a 关系

4、除非所有继承的方法都有意思, 否则不要使用继承
5、 在覆盖方法时, 不要改变预期的行为
6.、使用多态, 而非类型信息
7、不要过多使用反射

转载地址:http://ksgzi.baihongyu.com/

你可能感兴趣的文章
ksh 简单变量
查看>>
ksh 运算符
查看>>
ksh 数组
查看>>
ksh 控制结构
查看>>
ksh 函数
查看>>
ksh 复合变量
查看>>
ksh 引用
查看>>
ksh 正则表达式
查看>>
ksh 命令退出状态
查看>>
ksh 文件测试
查看>>
ksh I/O
查看>>
ksh 格式化输出
查看>>
ksh 控制键
查看>>
ksh 动态命令
查看>>
ksh 多进程
查看>>
ksh 命令分隔符
查看>>
Linux 精萃
查看>>
sed 精萃
查看>>
awk 精萃
查看>>
awk 简介
查看>>