一、计算机概述
1、软硬件与语言
根据冯·诺依曼体系结构,计算机可以划分为五个部分:存储器、运算器、控制器、输入设备、输出设备。我们可以更加简单地把计算机划分为软硬件两个部分,硬件是指计算机系统中由电子,机械和光电元件等组成的各种物理装置,这些物理装置按系统结构的要求构成一个有机整体为计算机软件运行提供物质基础,常见如显示器、扫描仪、键盘等;软件是一系列按照特定顺序组织的计算机数据和指令的集合,又可分为系统软件和应用软件,系统软件如操作系统、驱动管理和网络连接等,应用软件如Microsoft office办公套件、QQ、迅雷等。
软件开发是借助开发工具和计算机语言制作软件,计算机语言可以简单划分为面向对象和面向过程类语言,Java是一种纯的面向对象语言,C是一种纯的面向过程类语言,C++既可以做到面向过程又可以做到面向对象。
2、人机交互方式
①命令行方式:需要控制台,需要记一些特定的命令Dos命令,命令行方式成就了IBM。
②图形化界面(GUI)方式:简单直观,图形化界面成就了微软。
③语音识别触控:语音识别方式成就了苹果。
人类未来的人机交互方式可能走向三维触控,如苹果的3D Touch技术。
3、基本DOS命令
盘符切换: d:回车
进入指定目录: cd
返回上一级目录:cd..
返回根目录:cd\
显示当前目录下的所有文件及文件夹: dir
清屏: cls
退出: exit
扩展命令:(了解)
创建文件夹:md
删除文件夹:rd
删除文件:del *.txt
删除不为空的文件夹: rd \s \q
二、Java语言发展概述
java之父:詹姆斯·高斯林(James Gosling)
1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒、PDA等的微处理器;
1994年将Oak语言更名为Java;1995 有了jdk1.0 ,之后相继有了jdk1.4.2 jdk1.5(5.0) jdk1.6(6.0) ...jdk8
Java的三种技术架构:
JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发;
JAVASE:Java Platform Standard Edition,完成桌面应用程序的开发,是其它两者的基础;
JAVAME:Java Platform Micro Edition,开发电子消费产品和嵌入式设备,如手机中的程序;
java的特点:简单性、面向对象、网络技能(Network-Savvy)、健壮性、安全性、体系结构中立、可移植性、解释型、高性能、多线程、动态性
问:JRE,JDK,JVM之间的区别是什么
JRE:java运行环境.
JDK:java开发环境.
JVM:java虚拟机,保证java语言跨平台
JDK=JRE+核心类库
JRE=JVM+运行时类库
三、path和classpath配置方式
1、配置环境变量
让java jdk\bin目录下的工具,可以在任意目录下运行,原因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。
Path的配置
1):永久配置方式:JAVA_HOME=%安装路径%\Java\jdk
path=%JAVA_HOME%\bin
2):临时配置方式:set path=%path%;C:\Program Files\Java\jdk\bin
特点:系统默认先去当前路径下找要执行的程序,如果没有,再去path中设置的路径下找。
classpath的配置:
1):永久配置方式:classpath=.;c:\;e:\
2):临时配置方式:set classpath=.;c:\;e:\
注意:在定义classpath环境变量时,需要注意的情况
如果没有定义环境变量classpath,java启动jvm后,会在当前目录下查找要运行的类文件;
如果指定了classpath,那么会在指定的目录下查找要运行的类文件。
还会在当前目录找吗?两种情况:
1):如果classpath的值结尾处有分号,在具体路径中没有找到运行的类,会默认在当前目录再找一次。
2):如果classpath的值结果出没有分号,在具体的路径中没有找到运行的类,不会再当前目录找。
一般不指定分号,如果没有在指定目录下找到要运行的类文件,就报错,这样可以调试程序。
2、javac命令和java命令
要知道java是分两部分的:一个是编译,一个是运行。
javac:负责的是编译的部分,当执行javac时,会启动java的编译器程序。对指定扩展名的.java文件进行编译。 生成了jvm可以识别的字节码文件。也就是class文件,也就是java的运行程序。
java:负责运行的部分.会启动jvm.加载运行时所需的类库,并对class文件进行执行.
一个文件要被执行,必须要有一个执行的起始点,这个起始点就是main函数.
四、关键字
1、关键字特点
被Java语言赋予特定含义的单词叫做关键字,组成关键字的字母全部小写
2、关键字注意事项
①goto和const作为保留字存在,目前并不使用;
②类似Notepad++这样的高级记事本,针对关键字有特殊的颜色标记,非常直观
3、Java中关键字
五、标识符
1、含义
标识符就是给类,接口,方法,变量等起名字时使用的连续字符序列。
2、组成规则
①英文大小写字母;②数字字符;③$和_
3、注意事项
①不能以数字开头;②不能是Java中的关键字;③区分大小写
4、命名规则
①包:类似文件夹
一级:one
多级:one.day1
②类和接口:
一个单词:class Teacher 首字母大写
多个单词:class TeachJava 每个单词首字母都要大写
③方法和变量:
一个单词:全小写 teach()
多个单词:从第二个单词开始首字母大写 eatFood()
④常量:
一个单词:全大写 PI
多个单词:全大写,多个单词之间用下划线连接STUDENT_MAX_AGE
六、注释
Java中用于解释说明程序的文字叫做注释,JVM虚拟机会自动识别,不会予以执行。
Java中注释分类格式
①单行注释 格式: // 注释文字
②多行注释 格式: /* 注释文字 */
③文档注释 格式:/** 注释文字 */
<span style="font-size:18px;"><span style="font-size:14px;">class Helloworld {
/**
* java程序运行入口
*/
public static void main(String[] args) {
// 以下代码显示输出唐伯虎
System.out.println("唐伯虎");
/*
诗名:《桃花庵》
意义:别人笑我疯疯颠颠,但哥看透一切
*/
System.out.println("别人笑我太疯癫");
System.out.println("我笑他人看不穿");
System.out.println("不见武林豪杰墓");
System.out.println("无花无酒锄作田");
}
}
</span></span>
注意事项:注释是一个程序员必须要具有的良好编程习惯,体现了一个程序员良好的职业素养。初学者编写程序可以养成习惯:先写注释再写代码。将自己的思想通过注释先整理出来,在用代码去体现。因为代码仅仅是思想的一种体现形式而已。
七、数据类型
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配了不同大小的内存空间。
与C和C++不同,Java规范中没有“依赖具体实现”的地方。基本数据类型的大小以及有关算法都做了明确的说明。例如Java中的int永远为32位的整数,long永远为64位的整数……唯一的限制只是int类型的大小不能低于short int,并且不能高于long int。在java中,数据类型具有固定的大小,这消除了代码移植时令人头痛的主要问题。二进制数据以固定的格式进行存储和传输,消除了字节顺序的困扰。字符串是用标准的Unicode格式存储的。
Java八种数据类型的取值范围:
不同类型 | 关键字 | 字节数 | 取值范围 | 默认值 |
字节型 | byte | 1个字节 | -27~27-1(-128~127) | 0 |
短整型 | short | 2个字节 | -215~215-1(-32768~32767) | 0 |
整型 | int | 4个字节 | -231~231-1(-2147483648~2147483647) | 0 |
长整型 | long | 8个字节 | -263~263-1(-9223372036854775808~9223372036854775807) | 0 |
单精度浮点型 | float | 4个字节 | 大约±3.40282347E+38F(有效位数为6~7位) | 0.0f |
双精度浮点型 | double | 8个字节 | 大约±1.79769313486231570E+308(有效位数为15位) | 0.0d |
字符型 | char | 2个字 | 0~216-1(从0~65536) | ‘\u0000’ |
布尔型 | boolean | 1个字节 | True/false | false |
<span style="font-size:18px;"><span style="font-size:14px;">/**
* 学习数据类型:
*
* 分类:基本数据类型
* 引用数据类型(后面讲)
*
* 基本数据类型:
* 1、整数类型:
* byte 1字节
* short 2字节
* int 4字节(默认)
* long 8字节
*
* 2、浮点数:
* float 4字节
* double 8字节(默认)
*
* 3、字符:
* char
*
* 4、布尔类型
* boolean
*
*
* 变量使用的完整步骤:
* 1、声明变量:byte age;
* 2、变量赋值:age = 33;
* 3、使用变量:System.out.println(age);
*/
class NewDataType {
/**
* java程序运行入口
* jvm自动加载main方法
*/
public static void main(String[] args) {
// 这是使用常量
System.out.println(100);
/*
变量及变量的格式:数据类型 标识符 = 赋值;
*/
byte age = 88;
System.out.println(age);
short money = 10000;
System.out.println(money);
// 只要看到数字,java语言中默认int类型
int happy = 10000000;
System.out.println(happy);
// 在使用long类型时,等号右边的数字末尾加字母L,建议大写
long happy2 = 100000000000000L;
System.out.println(happy2);
// 浮点数默认是double类型
float pay = 6.5F;
System.out.println(pay);
double pay2 = 1999999.001;
System.out.println(pay2);
}
}</span></span>
八、常量和变量
1、常量
在程序执行的过程中其值不可以发生改变的量叫做常量,Java中常量可分为字面值常量和自定义常量。
①字符串常量 用双引号括起来的内容
②整数常量 所有整数 12,23
③小数常量 所有小数 12.34,56.78
④字符常量 用单引号括起来的内容 ‘a’,‘A’,‘0’
⑤布尔常量 较为特有,只有true和false
⑥空常量 null(数组部分讲解)
<span style="font-size:18px;"><span style="font-size:14px;">/**
* 学习常量:
*
* 分类:字面值常量、字定义常量
*
* 字面值常量:
* 1、字符串常量:用双引号括起来,多个字母字符
* "madongmei","马冬梅"
*
* 2、整数常量:100
*
* 3、小数常量:6.5 带小数点
*
* 4、字符常量:用单引号'',只能写一个
* '男'、'女'
* 5、布尔值(真假):true真、false假
*
* 6、null:空值
*/
class ConstantDemo {
/**
* java程序运行入口
* jvm自动加载main方法
*/
public static void main(String[] args) {
// 演示字符串常量
System.out.println("你很帅");
// 演示整数常量
System.out.println(10000000);
// 演示小数常量
System.out.println(6.5);
// 演示字符常量
System.out.println('男');
// 演示布尔值常量
System.out.println(true);
System.out.println(false);
}
}</span></span>
2、变量
在程序执行的过程中,在某个范围内其值可以发生改变的量叫做变量,变量的定义格式为:数据类型 变量名 = 初始化值。
<span style="font-size:18px;"><span style="font-size:14px;">/**
* 学习变量使用过程中的注意事项
*
* 作用域:在哪个大括号中定义变量,变量的作用域就在哪里!
*/
class NewDataType2 {
/**
* java程序运行入口
* jvm自动加载main方法
*/
public static void main(String[] args) {
// 在main方法中定义
int money = 100;
// 变量要赋值才能使用
boolean x = true;
System.out.println(x);
// 一行可以定义多个变量,但不建议
// int x1 = 5; int x2 = 10;
int x1 = 5;
int x2 = 10;
}
}</span></span>
九、进制转换
1、进制概述
进制就是进位制,是人们规定的一种进位方法。 对于任何一种进制--X进制,就表示某一位置上的数运算时是逢X进一位。二进制就是逢二进一,八进制是逢八进一,十进制是逢十进一,十六进制是逢十六进一。
2、不同进制的数据组成
①二进制
由0,1组成。以0b开头
②八进制
由0,1,…7组成。以0开头
③十进制
由0,1,…9组成。整数默认是十进制的
④十六进制
由0,1,…9,a,b,c,d,e,f(大小写均可)。以0x开头
3、进制转换诀窍
①十进制和二进制的快速转换利用8421码;
②二进制和八进制、十六进制之间转换以十进制作为桥梁;
③二进制到八进制每3位一组合,二进制到十六进制,每4位一组合。
4、有符号数据表示方法
在计算机内,有符号数有3种表示法:原码、反码和补码。所有数据的运算都是采用补码进行的。
①原码:就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
②反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
③补码:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
5、观察与操作①
<span style="font-size:18px;"><span style="font-size:14px;">public class Hello {
public static void main(String args[]){
int x = 13 ;
int y = 15 ;
System.out.println(x & y) ;
}
}</span></span>
下面使用二进制的方式分析以上的程序:
13的二进制: 000000000 00000000 00000000 00001101
15的二进制: 000000000 00000000 00000000 00001111
&操作: 000000000 00000000 00000000 00001101 → 13
观察与操作②
<span style="font-size:18px;"><span style="font-size:14px;">public class Hello {
public static void main(String args[]){
int x = 9 ;
int y = 7 ;
System.out.println(x | y) ;
}
} </span></span>
继续使用二进制分析:
9的二进制: 000000000 00000000 00000000 00001001
7的二进制: 000000000 00000000 00000000 00000111
|操作: 000000000 00000000 00000000 00001111 → 15
观察与操作③
<span style="font-size:18px;"><span style="font-size:14px;">public class Hello {
public static void main(String args[]){
int x = 9 ;
System.out.println(x << 2) ;
System.out.println(x) ;
}
}</span></span>
分析以上的数据操作:
9的二进制: 000000000 00000000 00000000 00001001
向左移两位: 000000000 00000000 00000000 00100100 → 36
面试题:要求以最快的方式计算出2的3次方 —— 靠移位最快
<span style="font-size:18px;"><span style="font-size:14px;">public class Hello {
public static void main(String args[]){
int x = 2 ;
System.out.println(x << 2) ;
}
}</span></span>
十、运算符
1、算术运算符
2、赋值运算符
+= | a+=b | a=a+b |
-= | a-=b | a=a-b |
*= | a*=b | a=a*b |
/= | a/=b | a=a/b |
%= | a%=b | a=a%b |
<span style="font-size:18px;"><span style="font-size:14px;">public class OperatorTest05 {
<span style="white-space:pre"> </span>public static void main(String[] args) {
<span style="white-space:pre"> </span>int a = 1;</span></span>
<span style="font-size:18px;"><span style="font-size:14px;">
<span style="white-space:pre"> </span>int b = 2;
<span style="white-space:pre"> </span>//a=a + b a+=b; System.out.println(a);
<span style="white-space:pre"> </span>}
}</span></span>
3、关系运算符
4、逻辑运算符
5、位运算符
6、三目运算符
格式:(关系表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
<span style="font-size:18px;"><span style="font-size:14px;">public class OperatorTest06 {
<span style="white-space:pre"> </span>public static void main(String[] args) {
<span style="white-space:pre"> </span>int a = 11;
<span style="white-space:pre"> </span>int b = a>0?1:-1; System.out.printn(b);
<span style="white-space:pre"> </span>boolean c = a%2==0?true:false; System.out.println(c);
<span style="white-space:pre"> </span>}
}</span></span>
<span style="font-size:18px;"><span style="font-size:14px;">import java.util.Scanner;
/**
* Scanner:用来获取键盘录入数据的
* 三步
* A;导包
* B:创建对象
* C:键盘录入
*
* 根据 new Scanner(System.in);
* 推断我们使用键盘录入功能是 所创建对象调用的构造方法:
*
* 怎么看 System.in的类型? InputStream
* System是个类
* 直接调了一个变量,这个变量是静态的
* in
* public static final InputStream in ;“标准”输入流
*
* 我选择的构造方法是哪一个了呢?
* Scanner(InputStream source)
*
*/
public class ScannerDemo {
public static void main(String[] args) {
//
Scanner sc = new Scanner(System.in);
//接收数据
int i = sc.nextInt();
System.out.println(i);
}
}</span></span>
<span style="font-size:18px;"><span style="font-size:14px;">import java.util.Scanner;
/*
* InputMismatchException: 录入数据与接收不匹配
* public boolean hasNextInt()
* 判断录入的是不是int类型
* 是就是返回true
* 否就返回false
* public int nextInt()
* 接收录入int类型的数据
*
* hasNextXxx() :判断你录入数据是不是Xxx类型
* nextXxx():接收你录入的数据并转换成Xxx类型
*
*/
public class ScannerDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
if (sc.hasNextInt()) {
int nextInt = sc.nextInt();
System.out.println(nextInt);
}else{
System.out.println("你输入的类型不匹配,要的是int类型");
}
System.out.println("请在此录入");
int b = sc.nextInt();
System.out.println(b);
}
}</span></span>