目录
1、基础概述
1.1、软件开发
软件就是一系列人为组织好的指令的集合,它分为系统软件(windows、mac、linux)和应用软件(应用)。
我们在开发过程中与计算机的交互方式一般分为两种:
图形化界面GUI:交互较为简单,现在我们使用手机电脑的页面都是图形界面
命令行方式CLI::交互需要一些特定的指令,比如DOS窗口、Linux等
常用的DOS指令: win+R键,输出cmd可以打开DOS窗口 盘符: 进入不同的盘(c:、d:) dir 列出当前目录内的文件夹和文件 cd 进入指定的目录 md 创建新的目录 rd 删除目录 cd.. 返回上一级目录 cd\ 返回到根目录 del 删除文件 exit 退出DOS命令行
开发软件需要学习计算机语言,计算机语言就是人与计算机交互的方式,就类似于我们的汉语、英语一样。它的种类很多:C、C++、Java、PHP、Python等等。
- 第一代语言:机器语言,指令是以二进制代码形式存在的
- 第二代语言:汇编语言,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。目前汇编语言主要应用在计算机底层设计,比如单片机等。
- 第三代语言:高级语言,就是目前主要学习的语言。
- C语言:面向过程的语言
- C++:面向过程+面向对象
- Java、Python:面向对象
1.2、Java简介
Java是一门面向对象的程序设计语言,起源于Sun Microsystems 公司1991年的Green项目,由 James Gosling和同事们共同研发,于1996年发布JDK1.0版本,最初名字oak,后改名java。2010 年 Oracle 公司收购 Sun Microsystems,之后由 Oracle 公司负责 Java 的维护和版本升级。Java在发展期间,有两个比较重要的版本,分别是2004年的JDK1.5版本(更名为JDK5.0),2014年的JDK8.0。
Java的体系平台:
按应用范围,Java 可分为 3 个体系
1、JavaSE:平台标准版(基础),包含了java语言基础、JDBC 操作、I/O 操作、网络通信以及多线程等技术
2、JavaME:移动平台的嵌入式开发(基本淘汰)
3、JavaEE:企业级开发,web,服务器开发,以JavaSE为基础,是Java能流行的根本所在。
它由 Java 虚拟机(Java Virtual Machine,JVM)和 Java 应用编程接口(Application Programming Interface,API)构成,已经嵌入了几乎所有的操作系统,所以Java拥有一次编写到处运行的特点。
特性:
1、简单性
2、面向对象
3、可移植性:跨平台运行,一次编写到处运行,java的核心优势
4、高性能
5、分布式:操作分布(不同主机上布置相关操作)和数据分布(数据存放在多个不同主机上)
6、动态性
7、多线程
8、安全性:考虑了网络/分布式环境
9、健壮性
基础知识图解:

1.3、Java运行
运行机制:(编译+解释)java是先把源程序编译成字节码文件(.class),然后以解释的方式执行字节码。
1、编译型:程序执行之前,把程序编译成为机器语言的文件。执行效率高。
2、解释性:每执行一次就要翻译一次,效率比较低。
运行过程:
编写程序源代码(.java文件)→经过jdk的编译器→编译成字节码文件(.class)→字节码文件加载到虚拟机(JVM)→虚拟机解释执行.class文件→解释器解释成计算机语言→计算机读取
运行环境:(开发运行需要下载JDK 甲骨文公司)
1、JDK(Java Development Kit):开发者工具包,是开发java程序的关键(包含JRE)
- bin包:提供 JDK 工具程序(语言编译器、语言解释器等等)
- include包:和JVM交互的头文件
- lib包:类库
- jre包:java运行环境
- conf包:配置
2、JRE(Java Runtime Environment):java运行时环境,需要调用相关的类库后,JVM才能执行相关的.class文件。包含JVM
3、JVM(Java Virtual Machine):java虚拟机,属于虚拟的计算机,是java跨平台的核心部分。JVM直接运行在操作系统之上,不和硬件直接交互。
- 字节码指令集
- 寄存器
- 栈:虚拟机栈、本地方法栈
- 堆
- 存储方法域
- 垃圾回收。
JDK包含了JRE,JRE包含了JVM。
JVM就相当于一个独立的虚拟计算机,它架构在操作平台上,一面和Java源程序对接,一面和不同的计算机操作平台对接,而它的作用就是运行Java源程序编译后的字节码文件(.class),并根据不同的平台翻译成不同的机器码。所以Java才可以在不同的平台上运行。
可以说不同平台的JVM不同的本质是其中的解释器不同,因为解释器需要根据不同的平台,解释出不同的机器码。一个程序开始运行,虚拟机就开始实例化,多个程序就会存在多个虚拟机,虚拟机之间不能共享数据,程序关闭虚拟机实例消亡。

1.4、JDK安装
1.4.1、安装
- 登录JDK网站:JDK 。下载相应版本的的JDK


安装:点击安装程序安装即可(安装的路径尽量不含中文)(带着版本号,方便后续更换版本)
配置环境变量:计算机→右键选择属性→高级系统设置→环境变量
JAVA_HOME配置:更改不同的版本,这里配置的是哪个版本,使用的就是那个版本

在path中配置变量:%JAVA_HOME%\bin 和 %JAVA_HOME%\jre\bin

在cmd中输入命令测试是否安装成功:java -version

1.4.2、卸载
- 删除JDK的安装目录
- 在环境变量中删除配置的JAVA_HOME,删除path下关于java的目录
- cmd中使用命令:java -version 检验
1.5、Hello Java
安装好JDK后可以编写一个程序测试一下,可以直接使用文本编辑器简单测试一下(建议下载Notepad++):新建一个文件,按Java的格式编辑好后,保存为.java后缀的文件。
public class HelloJava{
/**
* 这是一个main方法,用来运行
*/
public static void main(String[] args){
String message = "Hello Java";
//打印语句
System.out.println(message);
}
}
进入cmd,跳到文件所在的文件夹,先编译,编译后会产生一个.class的文件,然后再运行这个 .class的文件,进行输出:


1.5.1、class类
public class 类名 表示这是一个类,我们的Java代码就是在一个个的类中进行编写的,其中class是一个关键字,表示为一个类,而public是一个修饰符,表示类是公开的,一个 .java 文件中可以写多个类,但是只能有一个类由public修饰符修饰,其此类的名字要和文件名相同。
而且类中的执行语句后面要以 ;结束。
public class HelloJava{
public static void main(String[] args){
String str =""; //执行语句以 ;结束
}
}
//一个文件中可以有多个类,但别public修饰的只能有一个
class Person{
}
class Student{
}
1.5.2、main方法
main是一个方法,它是一个程序的主入口,可以运行,会被JVM识别并自动加载。格式是固定的:
public static void main(String[] args) {
}
其中 public static void main(String[] 变量名) 这个格式是固定的,一个类最多只能有一个main函数(可以没有),程序的入口是main函数。(mian函数不是成员函数,无法被其他方法/类所调用)。
程序在运行时最先执行的就是main方法,JVM通过main找到需要启动的运行程序,并检查main所在的类是否被加载,如果没有就进行加载(mian方法的调用会优先于类,所以才会规定为public static)。mian方法内可以直接调用类的静态资源,非静态的可以通过new创建对象后再调用。
1.5.3、注释
注释在JAVA运行过程中是不执行的,它是为了方便程序员阅读代码。一些复杂的代码,可以在类上、方法上、和代码行上添加注释,可以更快速的帮助我们阅读代码的含义。
1、单行注释:idea快捷键 Ctrl+/
//注释内容
2、多行注释:idea快捷键 Ctrl+Shift+/
/*
代码
*/
3、文档注释:中间通常包含一些信息 idea快捷键 /**+Ent:放在类、接口、成员变量、方法之前,以通过 Javadoc 生成 API 帮助文档
/**
*@author (对类的说明)开发作者
*@version(对类的说明)开发版本
*@since 指明需要最早使用的JDK版本
*@param (对方法的说明)方法中的参数说明
*@return (对方法的说明)返回值
*@see (对方法的说明)可以在注释中实现链接跳转.@see可以指向包,类,方法,属性.
*@throws (对方法的说明)方法抛出的异常
*/

1.6、输入和输出
//输入 Java.util.Scanner
Scanner scanner = new Scanner(System.in); //常见Scanner输入对象
int a = scanner.nextInt(); //输入一个整数
String str = scanner.next(); //输入一个字符串,无法带空格
String str = scanner.nextLine(); //输入一个字符串,可含空格
char c = scanner.next().charAt(0); //输入字符串的第一个字符
double d = scanner.nextDouble(); //输入一个double
float f = scanner.nextFloat(); //输入一个float
//输出,打印 print
System.out.print(); //不换行打印
System.out.println(); //换行打印
System.out.printf("",); //格式化打印 整数%d、字符串%s、字符%c、实数%f

1.7、规范
命名规范
包名由小写字母组成。
1、个人项目 个体项目(individual:指个人发起,但非自己独自完成的项目,可公开或私有项目,copyright主要属于发起者。 包名为“indi.发起者名.项目名.模块名……” 单人项目(one-man):指个人发起,但非自己独自完成的项目,可公开或私有项目,copyright主要属于发起者。 包名为“onem.发起者名.项目名.模块名……” 个人项目(personal),指个人发起,独自完成,可分享的项目,copyright主要属于个人。 包名为“pers.个人名.项目名.模块名.……” 私有项目(private):指个人发起,独自完成,非公开的私人使用的项目,copyright属于个人。 包名为“priv.个人名.项目名.模块名.……” 2、团体的项目命名 team:团队项目,指由团队发起,并由该团队开发的项目,copyright属于该团队所有。 包名为“team.团队名.项目名.模块名.……” com :公司项目,copyright由项目发起的公司所有。 包名为“com.公司名.项目名.模块名.……”类名每个单词大写字母开头,后续小写字母。驼峰式命名
对象名称第一个单词全小写,后面的单词由大写字母开头。
常量的名称都大写,并且指出完整含义。
参数的名称无其他具体规定。
数组的命名使用“类型[] 数组名”的形式
编码格式规范:
- package必须是类中可执行的第一行代码,且只能有一句,可以有多层,每一层用.隔开
- 在单一的语句后有用 ;结束,在一对括号{}后不使用 ;
- 如果定义类的时候没有使用package,那么java就认为我们所定义的类位于默认包里面(default package)。
- :import导入包时使用,在package之下,类主体之上
- 类和方法的内容都写在{ }内部
package com.***.***; //类所在的包,必须在第一行
import java.util.* //导入java内util内的所有文件,*是导入所有
class 类名{
.......
}
1.8、API文档
API(Application Programming Interface,应用程序编程接口)是Java 提供的基本编程接口。可以帮助我们学习Java
中文版:API中文版,版本为JDK6的API。

1.9、开发工具
- 文本编辑工具:NotePad++
- Java集成开发环境 IDE:eclipse、MyEclipse、IntelliJ IDEA 、
1.10、进制
1.10.1、简介
进制就是当一个数,满足该进制的最大数时,该数前位+1,本位清零。我们最熟悉的就是十进制:9进一位就是10,19进一位就是20。
常用的进制一般有4种:
二进制:计算机底层都是二进制,0和1,满二进一,前缀一般为0b。
十进制:我们正常使用的进制为十进制,0~9,满十进一,无前缀为默认进制
八进制:0-7,满八进一,以数字0为前缀。
十六进制:0-9和A-F,满十六进一,以0X或0x为前缀
十进制 二进制 八进制 十六进制 0 0b0 00 0x0 1 0b1 01 0x1 2 0b10 02 0x2 3 0b11 03 0x9 4 0b100 04 0x4 5 0b101 05 0x5 6 0b110 06 0x6 7 0b111 07 0x7 8 0b1000 010 0x8 9 0b1001 011 0x9 10 0b1010 012 0xA 11 0b1011 013 0xB 12 0b1100 014 0xC 13 0b1101 015 0xD 14 0b1110 0016 0xE 15 0b1111 017 0xF 16 0b10000 020 0x10 17 0b10001 021 0x11
1.10.2、二进制
计算机底层都是二进制形式。而二进制有三种方式:原码、反码、补码。对于一个正数来说,三个码表示出来都是一样的结果。
- 原码:直接将一个数转换成二进制,其最高位是符号位
- 反码:对原码进行取反操作,只改变最高位
- 补码:反码+1
比如1个byte的变量为1个字节,8个bit,在二进制的形式下13和-13的原码为:
13: 0 0 0 0 1 1 0 1
-13:1 0 0 0 1 1 0 1
正数的反码和原码相同,负数的反码就是在它原码的基础上,除符号位外,其他位置取反。
13反码: 0 0 0 0 1 1 0 1
-13反码:1 1 1 1 0 0 1 0
负数补码就是在反码的基础上加上一个1
13补码: 0 0 0 0 1 1 0 1
-13补码:1 1 1 1 0 0 1 1
在计算机底层二进制的存储中,所有的数值,无论正负,都是以补码的方式存储的。
1.10.3、进制转换
十进制转换为其他进制:转换成几进制就对几进行求余
转换成2进制:

转换成8进制
转换成16进制
其他进制转换成10进制:

转换成二进制
8进制转换成二进制
16进制转换成2进制

二进制转换为8进制:需要将 3 个连续的数拼成一组,然后再独立转成八进制中的数字。

二进制转换16进制:需要将 4 个连续的数拼成一组,然后再独立转换为十六进制中对应的数字
