nat123做视频网站,帮客户做网站挣钱吗,建设一个怎样的自己的网站首页,app开发定制开发目录
前言
一、java基础
1.1概述
1.java语言发展史
2.Java语言版本
3.Java语言平台
4.Java语言特点
5.Java语言跨平台原理-可移植性
6.JRE和JDK的概述
7.JDK的下载和安装
8.JDK安装路径下的目录解释
9.path环境变量的作用及配置方式
10.classpath环境变量的作用及…目录
前言
一、java基础
1.1概述
1.java语言发展史
2.Java语言版本
3.Java语言平台
4.Java语言特点
5.Java语言跨平台原理-可移植性
6.JRE和JDK的概述
7.JDK的下载和安装
8.JDK安装路径下的目录解释
9.path环境变量的作用及配置方式
10.classpath环境变量的作用及其配置
1.2语法
1.常量
2.变量
3.标识符
4.关键字
5.注释
6.数据类型
1.数据为什么要分类型
2.数据类型的分类
3.数据类型转换
7.运算符
算术运算符
赋值运算符
关系运算符
逻辑运算符
位运算符
三元运算符
8.流程控制语句
顺序结构
选择结构
if语句
switch语句
循环结构
for
while
do...while
几种循环的区别
循环嵌套
死循环
控制跳转语句
1.3.方法
方法调用
方法调用--参数传递
方法重载
1.4数组
数组的初始化
数组的内存分配
二维数组实际开发几乎不用
二、面向对象
2.1概述
面向对象思想概述
2.2类与对象 2.3成员变量局部变量构造方法
2.4封装继承多态
2.5staticfinal
2.6抽象类接口
2.7权限修饰符
2.8成员内部类
三、集合框架
3.1概述
3.2List
3.3Set
3.4Map
四、异常
五、IO流
六、多线程
七、反射 前言
整理一下多年之前学习javaSE的笔记将会包括java基础对象集合异常IO流多线程反射 一、java基础
1.1概述
1.java语言发展史
詹姆斯·高斯林James Gosling在Sun公司参与绿色计划因为觉得使用C有很多弊端开发了一套语言--Oak橡树后改名为Java
2.Java语言版本
JDK 1.1.4 Sparkler 宝石 1997-09-12
J2SE 1.2 Playground 运动场 1998-12-04
J2SE 1.3 Kestrel 美洲红隼 2000-05-08
J2SE 1.3.1 Ladybird 瓢虫 2001-05-17
J2SE 1.4.0 Merlin 灰背隼 2002-02-13
JAVASE 5.0 (1.5.0) Tiger 老虎 飞跃的发展
JAVASE 6.0 (1.6.0) Mustang 野马
JAVASE 7.0 (1.7.0) Dolphin 海豚
3.Java语言平台
J2SE(Java 2 Platform Standard Edition)标准版开发桌面应用程序该技术体系是其他两者的基础
J2ME(Java 2 Platform Micro Edition)小型版开发电子消费产品和嵌入式设备
J2EE(Java 2 Platform Enterprise Edition)企业版开发企业应用程序主要是web应用该技术体系中包含大名鼎鼎的servlet、jsp等
4.Java语言特点
开源、跨平台
5.Java语言跨平台原理-可移植性
什么是跨平台write once ,run anywhere!(一处编译,到处运行)通过java语言编写的应用程序在不同的系统平台上都可以运行
原理在需要运行java应用程序的操作系统上安装一个Java虚拟机(JVM Java Virtual Machine)由JVM来负责Java程序在该系统中的运行--不同平台对应不用的虚拟机即可
6.JRE和JDK的概述
JREjava运行环境 java Runtime environmentJVM类库包括Java虚拟机和Java程序所需的核心类库等如果想要运行一个开发好的Java程序计算机中只需要安装JRE即可。
JDKjava开发工具 java development kitJREJAVA的开发工具包括编译工具(javac.exe) 打包工具(jar.exe)等
7.JDK的下载和安装
下载官网http://www.oracle.com选择对应的系统和版本即可java长期支持版本为78111721 安装的细节
1.安装路径不要有中文或者特殊符号如空格等
2.提示安装JRE建议安装上且不能和JDK安装目录相同否则可能会出现plesae ensure JAVA_HOME point to JDK rather JRE 可能出现的问题
在同一台机器上安装多个版本jdk修改环境变量不生效
原因因为在安装JDK时自动将java.exe、javaw.exe、javaws.exe三个可执行文件复制到了C:\Windows\System32目录由于这个目录在WINDOWS环境变量中的优先级高于JAVA_HOME设置的环境变量优先级
验证安装是否成功在bin目录下打开命令行测试javajavac
8.JDK安装路径下的目录解释
bin目录该目录用于存放一些可执行程序
db目录db目录是一个小型的数据库
jre目录Java程序运行时环境。此目录是Java运行时环境的根目录它包括Java虚拟机运行时的类包Java应用启动器以及一个bin目录但不包含开发环境中的开发工具
include目录由于JDK是通过C和C实现的因此在启动时需要引入一些C语言的头文件该目录就是用于存放这些头文件的
lib目录lib是library的缩写意为 Java 类库或库文件是开发工具使用的归档包文件
src.zip文件src.zip为src文件夹的压缩文件src中放置的是JDK核心类的源代码通过该文件可以查看Java基础类的源代码
9.path环境变量的作用及配置方式
作用配置后可以在不同的盘符下访问path路径下的可执行文件bin如果不配置path则要在bin目录下开发这显然不合适
配置方法
1.使用JAVA_HOME配置JDK安装目录
2.Path配置%JAVA_HOME%\bin这样修改JDK路径时不需要修改Path防止一些误操作
10.classpath环境变量的作用及其配置
作用配置访问的类文件的路径1.5以后默认是当前路径即编译后生成.class文件的路径即在哪生成就去找因此1.5以后不需要配置
弊端想要执行就必须放到配置路径下不符合实际需求
配置方法系统变量中配置classpath当前路径指的是.
1.2语法
1.常量
1.常量在程序执行的过程中其值不可以发生改变
2.常量的分类
字面值常量 字符串常量 用双引号括起来的内容 整数常量 所有整数 小数常量 所有小数 字符常量 用单引号括起来的内容,里面只能放单个数字,单个字母或单个符号 布尔常量 较为特殊只有true和false 空常量 null(数组部分讲解)
自定义常量
2.变量
1.变量在程序执行的过程中在某个范围内其值可以发生改变的量
2.变量的定义格式数据类型 变量名 变量值;
3.作用用来存放同一类型的常量并可以重复使用
4.注意 1.作用域问题同一个区域不能使用相同的变量名 2.初始化值问题局部变量在使用之前必须赋值 3.一条语句可以定义多个变量int a,b,c...;
3.标识符
1.标识符给类,接口方法变量等命名时使用的字符序列
2.标识符的组成规则英文大小写字母数字字符$和_
3.注意 1.不能使用关键字 2.不能数字开头但$和_可以如_123$123
4.开发中约定俗成的命名规则
见名知意不用拼音不写一半的单词
包最好是域名倒过来所有的字母小写 cn.gtmap
类或者接口名称为单个单词首字母大写名称为多个单词每个单词首字母大写(驼峰标识)
方法或者变量单个单词全部小写多个单词从第二个单词首字母大写
常量单个单词所有字母大写多个单词所有的字母大写用下划线区分每个单词这样可以区分多个单词方便阅读理解
4.关键字
1.关键字被Java语言赋予特定含义的单词
2.关键字的特点组成关键字的字母全部小写
3.常见关键字public static void class
4.注意goto和const作为保留字存在jdk8以前并不使用
5.注释
1.作用提高阅读性
2.分类 1.单行注释可以嵌套//注释1//注释2 2.多行注释不可以嵌套会把第一个结束标志视为注释结束/*注释*/ 3.文档注释可以用来制作说明书 通过javadoc命令生成说明书 author(提取作者内容) version(提取版本内容) param 参数名称//形式参数的变量名称return 函数运行完返回的数据 javadoc -d 指定的文件目录 -author -version ArrayTool.java
6.数据类型
1.数据为什么要分类型
Java语言是强类型语言对于每一种数据都定义了明确的具体数据类型在内存中分配不同大小的内存空间
存储结构不同针对不同的数据采用适合的存储方式 2.数据类型的分类
基本数据类型(4类8种)
整数型
byte 占一个字节 -128到127
short 占两个字 -2^15~2^15-1
int 占四个字节 -2^31~2^31-1
long 占八个字节 -2^63~2^63-1 浮点型
float 占四个字节 -3.403E38~3.403E38 单精度
double 占八个字节 -1.798E308~1.798E308 双精度
1位符号位 8位指数位 23位尾数位
1 23 52
取值范围主要看指数部分 float的指数部分有8bit(2^8)由于是有符号型所以得到对应的指数范围0-255 实际的取值要减去偏移量127去除全0全1减去偏移量127得到-126-127 double的指数部分有11bit(2^11)由于是有符号型所以得到对应的指数范0-2048 去除全0全1减去偏移量1023得到-1022-1023
精度(有效数字)主要看尾数位
单纯的比较两个数字0和0.0是相等的 字符型char占两个字节 0~65535
Java语言中的字符char可以存储一个中文汉字因为Java语言采用的是Unicode编码每个char占用两个字节汉字两个字节所以Java中的字符可以存储一个中文汉字 布尔型boolean
boolean理论上是占八分之一个字节,因为一个开关就可以决定是true和false了,但是java中boolean类型没有明确指定他的大小
boolean是基本数据类型Boolean是它的封装类和其他类一样有属性有方法可以new
jdk5Boolean在赋值和判断上和boolean一样 引用数据类型对象数组 3.数据类型转换
1.隐式转换Java中的默认转换规则
进行混合运算的时候byteshortchar不会相互转换都会自动类型提升为int类型
其他类型进行混合运算的是小的数据类型提升为大的
2.强制转换
强制转换的格式b (byte)(a b);//类型也要加括号
强制转换的注意事项如果超出了被赋值的数据类型的取值范围得到的结果会与你期望的结果不同
3.字符和字符串运算
System.out.println(a); a字符System.out.println(a1); 98 char和int运算提升为intSystem.out.println(helloa1); helloa1System.out.println(a1hello); 98hello//任何数据类型用与字符串连接都会产生新的字符串System.out.println(5555); 5555System.out.println(5555); 1055
7.运算符
运算符对常量和变量进行操作的符号
运算符分类算术运算符赋值运算符比较运算符逻辑运算符位运算符三目(元)运算符
算术运算符
算术运算符,-,*,/,%,,--
正号加法运算字符串连接符
/获取除法操作的商整数相除只能得到整数即会截断结果如果想得到小数必须把数据变化为浮点数类型
%获取除法操作的余数 当左边的绝对值小于右边绝对值时,结果是左边当左边的绝对值等于右边或是右边的倍数时,结果是0当左边的绝对值大于右边绝对值时,结果是余数 %运算符结果的符号只和左边有关系与右边无关java中负数取模规则先忽略负号进行运算然后符号与被取模数保持一致 (-10)%3-1; 10%(-3)1; (-10)%(-3)-1; 任何一个正整数%2结果不是0就是1这可以用来当作切换条件
自加对原有的数据进行1
--自减对原有的数据进行-1 --注意 单独使用放在操作数的前面和后面效果一样 参与运算使用 放在操作数的前面先自增或者自减然后再参与运算 放在操作数的后面先参与运算再自增或者自减
举例1int a 10;int b 10;int c 10;a b; a10,b11,c10c --a; a9,b11,c9b a; a10,b10,c9a c--; a9,b10,c8举例2int x 4;int y (x)(x)(x*10); //4 6 6*10 70举例3byte b 10;b; 自增自减运算符拓展赋值运算符会做自动强转不会出错b b 1; 报错
赋值运算符
分类
基本的赋值运算符把右边的数据赋值给左边
扩展的赋值运算符,-,*,/,%
把左边和右边做加法然后赋值给左边
举例
short s1;s s1;short s1;s1; 拓展赋值运算会自动强转s (short)(s1)
关系运算符
关系运算符,!,,,
注意无论你的操作是简单还是复杂结果是boolean类型
逻辑运算符
逻辑运算符|^!||
逻辑与有false则false
|逻辑或有true则true
^逻辑异或相同为false不同为true
!逻辑非非false则true非true则false
注意 逻辑运算符一般用于连接boolean类型的表达式或者值 表达式就是用运算符把常量或者变量连接起来的符合java语法的式子 算术表达式a b 比较表达式a b(条件表达式)
和||和|的区别 最终结果一样 具有短路效果左边是false右边不执行 是无论左边是false还是true,右边都会执行
位运算符
位运算符|^~
有0则00false
|有1则11true
^相同则0不同则1一个数据对另一个数据位异或两次该数本身不变可以用来加密解密
~按位取反
右移左边补最高位
无符号右移左边补0
举例1两个整数变量的交换
x x ^ y;
y x ^ y;
x x ^ y;
举例2最有效率的算出2 * 8的结果
23; 直接操作二进制效率是最高的
三元运算符
三元运算符(关系表达式) ? 表达式1 : 表达式2;
举例获取3个数中最大数(xy?(xz?x:z):(yz?y:z))
8.流程控制语句
顺序结构
选择结构
if语句
if(比较表达式1) {语句体1;
}else if(比较表达式2) {语句体2;
}else if(比较表达式3) {语句体3;
}
...
else {语句体n1;
}
注意事项
1.最后一个else可以省略但是建议不要省略可以对范围外的错误值提示
2.语句体只有1句时大括号可以省略但建议不省略因为会有陷阱如 int x 10;实际上是2句 int x; x 10;
if 语句可以嵌套
//判断3个数中最大值
private static int selectMax(int x, int y, int z) {int max;if (x y) {if (x z) {max x;} else {max z;}} else {if (y z) {max y;}else {max z;}}return max;
}
if语句和三元的相互转换问题
三元运算符实现的都可以采用if语句实现反之不成立
原因因为三元运算符是一个运算符运算符操作完毕就应该有一个结果而不仅仅是一个输出因此当if语句控制的操作是一个输出语句的时候就不能用三元运算符替换
switch语句
switch(表达式) {case 值1语句体1;break;case 值2语句体2;break;…default 语句体n1;break;
}
注意
1.表达式可以是 byte short char int String 枚举1.7以前不支持String类型
2.default可以省略但建议不省可以对错误情况做出说明default不放在最后也是最后不匹配才去执行但建议放在最后
3.最后一个break可以省略但建议不省
4.结束条件是break或者末尾的大括号而不是执行完default即所谓的break穿透
5.switch在判断固定值时使用if往往应用于区间
6.注意多个case对应同一处理的情况如下
//berak穿透
int x 2;
int y 3;
switch(x){default:y;case 3:y;case 4:y;
}
System.out.println(yy); //6switch (x) {case 1:case 2:case 3:System.out.println(春);break;case 4:case 5:case 6:System.out.println(夏);break;case 7:case 8:case 9:System.out.println(秋);break;case 10:case 11:case 12:System.out.println(冬);break;default:break;
}
举例1
int x 1,y 1;
if(x2 y2) // 2 2
{x 7;
}
System.out.println(xx,yy);
x2,y2
举例2
int x 1,y 1;
if(x2 y2) //2 1
{x 7;
}
System.out.println(xx,yy);
x2,y1
举例3
int x 1,y 1;
if(x1 | y1) //2 2
{x 7; //7 2
}
System.out.println(xx,yy);
x7,y2
举例4
int x 1,y 1;
if(x1 || y1) //2 1
{x 7; //7 1
}
System.out.println(xx,yy);
x7,y1
循环结构
循环结构forwhiledo...while
for
//for
for(初始化表达式;条件表达式;循环后的操作表达式) {循环体;}//增强for
for(接收数组元素的变量:循环对象-数组/集合) {...//语句}
执行过程 a:执行初始化语句 b:执行判断条件语句,看其返回值是true还是false 如果是true就继续执行 如果是false就结束循环 c:执行循环体语句; d:执行循环后的操作表达式 e:回到b继续
注意
1.判断条件语句无论简单还是复杂结果是boolean类型
2.循环体语句如果是一条语句大括号可以省略建议不省
while
初始化语句;while(判断条件语句) {循环体语句;控制条件语句;}
执行流程 a:执行初始化语句 b:执行判断条件语句,看其返回值是true还是false 如果是true就继续执行 如果是false就结束循环 c:执行循环体语句; d:执行控制条件语句 e:回到B继续
do...while
初始化语句;do {循环体语句;控制条件语句;}while(判断条件语句);
执行流程 a:执行初始化语句 b:执行循环体语句 c:执行控制条件语句 d:执行判断条件语句,看其返回值是true还是false 如果是true就继续执行 如果是false就结束循环 e:回到b继续
几种循环的区别
1.do...while循环至少执行一次循环体
2.for循环结束后循环控制变量从内存中弹出while循环的控制变量在while外声明不随其弹出但这样的情况在开发中很少几乎不用while和do while
循环嵌套
外循环控制行数内循环控制列数
乘法表
for (int i 1; i 9; i) {for (int j 1; j i; j) {System.out.print(j * i (i*j) \t);}System.out.println();
}\x x表示任意\是转义符号,这种做法叫转移字符
\t tab键的位置
\r 回车
\n 换行
\
\
死循环
当循环条件恒成立
while(true){...}
for(;;){...}
控制跳转语句
break switch 和 循环 中终止
continue 循环中跳出当次循环
return 借由结束方法的方式结束循环
//举例
for(int x1; x10; x) {if(x%30) {//在此处填写代码}System.out.println(“Java基础”);
}
在控制台输出2次:Java基础 break;
在控制台输出7次:Java基础 continue;
在控制台输出13次:Java基础 System.out.println(Java基础)
控制跳转语句标号
标号标记某个循环对其控制
标号组成规则合法的标识符
//outer就是标号,只要是合法的标识符即可
outer: for (int i 1;i 10 ;i ) {System.out.println(i i);inner: for (int j 1;j 10 ;j ) {System.out.println(j j);//标号一般用于跳出外部循环break和break inner没什么区别都是跳出本次循环break outer;}
}
1.3.方法
方法完成特定功能的代码块
方法作用提高代码的复用性
方法定义格式
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {方法体语句;return 返回值;
}
说明
修饰符目前就用 public static。后面我们再详细的讲解其他的修饰符
返回值类型就是功能结果的数据类型
方法名符合命名规则即可。方便我们的调用
参数实际参数就是实际参与运算的形式参数就是方法定义上的用于接收实际参数的
参数类型就是参数的数据类型
参数名就是变量名
方法体语句就是完成功能的代码
return结束方法
返回值就是功能的结果由return带给调用者如果方法有明确的返回值一定要有return带回一个值注意
方法与方法是平级关系不能嵌套定义
方法定义的时候参数之间用逗号隔开
方法调用
方法不调用不执行
怎么调用方法名给定入参方法调用的时候不用再传递数据类型
有返回值的调用用变量接收方法返回值或者结果作为其他操作的参数 方法调用--参数传递
基本数据类型值传递不改变原值因为方法调用后就会弹栈局部变量随之消失
引用数据类型值传递会改变原值因为即使方法弹栈,但实际改变的是堆内存中的数据数组对象还在仍可以通过地址访问
方法重载
定义同一个类中方法名相同参数列表不同个数类型顺序-算重载,但是在开发中不用与返回值类型无关
举例求和方法同名但参数列表不同两个整数两个浮点数...
1.4数组
数组存储同一种数据类型多个元素的集合
数组作用存储同种数据类型的多个值可以存储基本数据类型引用数据类型
数组定义格式 数据类型[] 数组名 new 数据类型[数组的长度]; int[] arr new int[5];
数组的初始化
初始化时为数组开辟连续的内存空间并为每个数组元素赋值
动态初始化 只指定长度由系统给出初始化值默认值 数据类型[] 数组名 new 数据类型[数组长度]; int[] arr new int[5]; 整数类型 byte,short,int,long 默认为0 浮点类型 float,double 默认为0.0 布尔类型 boolean 默认false 字符类型 char 默认为\u0000 \u是转义字符意为Unicode编码 char是2个字节16位二进制值即4位16进制0 在内存中开辟一块连续的空间地址值赋值给数组变量 Sop(arr)输出类型和哈希值 [I... int型一 维数组
静态初始化 给出初始化值由系统决定长度 初始化的时候仍然先进行默认初始化0然后才进行显式初始化 数据类型[] 数组名 new 数据类型[]{元素1,元素2,…}; 数据类型[] 数组名 {元素1,元素2,…};
数组的内存分配
Java中的内存分配
栈存储局部变量方法
堆存储new出来的数组或对象
方法区
本地方法区系统相关
寄存器给CPU使用 数组的内存分配
声明一个数组会在栈中生成一个数组变量变量指向堆中new出来的数组实例
当然可以在栈中声明多个数组变量指向堆中的同一个数组实例 数组的角标
数组元素具有索引角标从0开始计数访问不存在的角标时会报ArrayIndexOutOfBoundsException 数组的基本操作
//遍历
for (int i 0;i arr.length ;i ) {System.out.print(arr[i] );
}
//查找
for (int i 0;i arr.length ;i ) {if (arr[i] value) { return i;}
}
二维数组实际开发几乎不用
格式
int[][] arr new int[3][2];
int[][] arr new int[3][];
int[][] arr {{1},{2,3},{4,5,6}};
内存分配
栈中声明的二维数组变量先指向一个一维数组这个一维数组的每个元素又分别指向一个一维数组每个一维数组就是一行 二维数组基本操作
int[][] arr {{1,2,3},{4,5},{6,7,8,9}};
for (int i 0;i arr.length ;i ) {//遍历第一层的一维数组 for (int j 0;j arr[i].length ;j ) {//获取第一层数组元素指向的多个一维数组中的元素System.out.print(arr[i][j] );}System.out.println();
}
二、面向对象
2.1概述
面向对象思想概述
面向过程第一步买菜第二步洗菜第三步做菜第四步吃
面向对象找对象(对象进行第一步第二步第三步) 面向对象编程特点
可以将复杂的事情简单化
将我们从执行者变成了调用者
面向对象编程就是不断的创建对象使用对象 面向对象特征
封装(encapsulation)
继承(inheritance)
多态(polymorphism)
2.2类与对象
类java中最基本的单位是一组相关的属性和行为的集合理解为一种事物的定义
定义类其实就是定义类的成员(成员变量和成员方法)
属性 就是该事物的描述信息年龄性别即成员变量
功能 就是该事物能够做什么吃饭学习即成员方法 对象类的实例
举例类-学生对象-学生张三具体的某个学生 使用对象
创建对象类名 对象名 new 类名();
使用成员变量对象名.变量名
使用成员方法对象名.方法名(入参...) 对象的内存分配
与数组类似栈中声明引用型变量指向堆中new生成的对象可以多个变量指向同一个对象 使用对象的内存步骤
1.class字节码文件加载进内存方法区main主方法进栈
2.堆中创建对象实例new Car()进行默认初始化地址赋给栈中变量
3.调用对象设置属性使用功能
4.调用结束栈中局部变量弹栈堆中的对象不会消失而是成为垃圾交由垃圾回收机制处理
public class Student {private String name;private int age;public void study() {sop(我在学习); }
}Student zhangSan new Student();
Student liSi new Student();
Student zhangWei zhangSan;
zhangSan.study(); 2.3成员变量局部变量构造方法
2.4封装继承多态
2.5staticfinal
2.6抽象类接口
2.7权限修饰符
2.8成员内部类
三、集合框架
3.1概述
3.2List
3.3Set
3.4Map
四、异常
五、IO流
六、多线程
七、反射