# Java 的开发历史 #
java 最初的时候是由sun(Sun Microsyst NetWok 中文名称是斯坦福大学校园网)公司开展oak 项目衍生出来的技术。
1995年,sun公司推出Java 技术,于1996 年推出java1.0版本,1997年在中国登陆
在sun公司的低潮期,最想收购java的是IBM 公司,但是却最终被Orcale公司进行收购。
在当时通过Java 赚到钱的只有 ibm ,直到现在为止Oracle 只是通过Java 的版权争执获取到一部分的利益。
# Java 的版本 #
Java 分为三个版本:
java se : 原先的时候是 J2SE ,后来被更名为java se ,原先是想要做系统应用的,是最底层的内容
Java me : 原先的时候是 J2ME.后来被更名为 Java me 。
原先是想要做手机系统的,因为 Nokia 的衰落而衰落
Java ee : 原先的时候是 J2EE ,后来被更名为 Java ee,
原先的时候是想要做企业平台的搭建,现在主要开发互联网平台
# java 主要特点 #
- 半开源 : java 程序更加透明,更加容易让人接受
- 面向对象 :让大家更加容易理解和开发
- 可移植性 : 让大家可以进行多平台的开发
- 多线程 :让大家可以同时处理多个任务,但是也带来了高并发等等问题
- 高效的网络处理能力
- 高效的垃圾回收机制 : java 程序去除指针反而使用引用的方式进行替代,让大家可以不用去实时的进行对象的回收(带来的弊端是需要进行优化)
# Java 语言的分类 #
java 语言既不属于编译型语言,也不属于解释型语言。因为java 文件会在刚开始的时候通过编译器编译成为一个.class文件(编译过程),然后再通过jvm 直接运行.class文件(解释过程,就像c语言打包后成为.exe可执行文件进行使用)
其他意见
先看下定义:编译型语言:把做好的源程序全部编译成二进制代码的可运行程序,然后,可直接运行这个程序。解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!Java它首先由编译器编译成.class(字节码)文件,然后在通过JVM从.class文件中读一行解释执行一行,所以它是解释型的语言,也正是由于java对于多种不同的操作系统有不同的JVM,所以实现了真正意义上的跨平台。
有些答案对JAVA的理解还停留在上古时代或者教科书里。其实,现在用编译型、解释型来分类编程语言已经有点力不从心了。JAVA的第一道工序是javac编译,当然目标文件是BYTECODE。后续可能有三种处理方式:1. 运行时,BYTECODE由JVM逐条解释执行,2. 运行时,部分代码可能由JIT翻译为目标机器指令(以method为翻译单位,还会保存起来,第二次执行就不用翻译了)直接执行;3. RTSJ。继JAVAC之后执行AOT二次编译,生成静态的目标平台代码(典型的就是IBM WEBSHPERE REAL TIME)。有的时候,可能是以上三种方式同时在使用。至少,1和2是同时使用的,3需要程序员手工指定。所以讨论语言得更细化一点了,强类型的、弱类型的,静态的、动态的,GC-based的、手工管理内存的,有没有VM...
# java 开发基础 #
在java 开发中的最小单位是类,而类中的最小执行单元是方法
在一个java 文件有两种类(内部类和匿名内部类暂且不说)
- public class (公共类): 一个java 文件中只可以有一个
- class (普通类): 一个Java文件中可以有多个
java 中都是通过在main(主方法)开始运行,而主方法所在的类被称为主类
# java 开发之 CLASSPATH 的配置 #
CLASSPATH 是jvm进行编译的时候调用的环境,默认是在当前生成.class 文件,但是在某些 java 工具会修改CLASSPATH,所以大家可以在windows 的环境设置进行设置修改,格式是 CLASSPATH 就是.(点),如果在cmd 窗口中进行修改那么可以设置为
SET CLASSPATH = "位置"
如果设置为默认环境可以使用
SET CLASSPATH = .进行设置
# java 开发之注释 #
java 之中有三种注释的方法:
单行注释 : //
多行注释 : /* */
文档注释 : /** */
在开发中一般使用单行注释,如果有多行代码出错,或者其他情况使用多行注释,如果是重要的类或者是方法可以使用文档注释进行注释
ps :如果使用文档注释可以使用 javadoc.exe 生成一个 doc 开发文档
# java 标识符和关键字 #
java 中对于方法,类等进行命名的格式被称为使用标识符,对于标识符需要以下几点要求
- 标识符可以使用数字,字母,_与$ 进行使用
- 标识符中不可以使用数字进行开头
- 因为在Java中使用内部类编译生成后会出现$符号,所以如果在代码中使用应该进行避免(开发中一般不会使用)
- 标识符不可以和关键字(包括保留字),true,false,null(Java中预定义的字面常量)相同
# java 语言的数据类型 #
java 语言分为两个大类
- 基础数据类型
- 分为4类 8 种
- 整数型
- byte
- shrt
- int
- long
- 浮点型
- float
- double
- 布尔型
- boolean
- 字符型
- char
- 引用数据类型
- 分为三种
- 枚举
- 数组
- 对象
基本数据的默认使用
整数型默认使用 int
浮点型默认使用 double
ps : double 比 float 的取值范围更加多
基本数据类型的默认数据
整数型
- 默认为0
浮点型
- 默认为0.0
布尔型
- 默认为 false
字符型
- 默认为 /u0000
基本数据类型的取值范围
byte
-128~127,占用1个字节(-2的7次方到2的7次方-1)
short
-32768~32767,占用2个字节(-2的15次方到2的15次方-1)
int
-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1)
long
(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)
float
3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方)占用4个字节
double
双进度浮点数使用42存储,有效位数16位,最大值是 10^16 ~ 10^17
boolean
这个类型只有两个值,true和false(真和非真),有人说可以占1/8个字节
char
# 数据溢出 #
在java 中,当一个值超过当前数据的大小的时候就会发生数据溢出(也就是数据回转,比如int 的Intager.MAX_VALUE + 1 后就会出现int 的最小值)
解决的方法:
对于数据进行更大类型的转换
# 数据类型转型的分类 #
自动转换
强制转换
# 字符型数据 #
在java 中 字符型数据使用char 来表示,在char 中可以定义单个字符,字符包括以下几种
- 数字(0-9)
- 小写字母(a-z)
- 大写字母 (A-Z)
-
在char 数据类型中都可以转换为int 数据的类型,其中取值范围是
- '0' (48) - '9' (57)
- 'a' (97) - 'z' (122)
- 'A' (65) - 'Z' (90)
# 布尔数据类型 #
在java 中布尔类型使用Boolean 来进行表示,用来做逻辑的运行,只有 true false 值
# 字符串 #
字符串不是一种基本数据类型,但是子实际开发中各种语言都会提供字符串的相应描述,而在java中使用 String 来进行表示
可以使用 + 号进行字符串的连接(最常用)
在String 类型中有各种方法进行方法,可以去开发文档中进行查看
ps : 在各种数据类型进行加法计算的时候,碰巧有String 数据对其进行连接操作,如果没有指定操作顺序(也就是在计算操作的时候加上一个()括号),那么就会优先进行字符串的连接操作
在各种数据类型进行其他计算(加法除外)的时候,碰巧有String 数据对其进行连接操作,如果没有指定操作顺序(也就是在计算操作的时候加上一个()括号),那么就会报错
# 转义字符 #
如果某些操作需要使用符号或者换行 ,空格 , tab制表符等操作,那么需要进行转义字符对其进行转义,否则的话得到的结果会和自己想要的结果不同
# 运算符 #
算术运算符( + - * / % ++ -- )
++ 或 -- 的使用规则 :
如果 ++ (或者 --) 在前,先进行自加然后再进行计算获得值,如果在后,先进行计算再进行 ++ (--)自增或自减
赋值运算符( += -= /= *= %= = <<= >>= &= ^= |= )
关系运算符( > < >= <= == != )
条件运算符 (三目(赋值)运算法)
关系运算 ? 满足: 不满足
ps : 三目运算可以嵌套使用 (不建议使用,可读性会变差)
逻辑运算符 ( && | | ! )
位运算符 ( & | ! ^ 〜 << >> >>> )
instanceof 运算符 : 是否包含
# java 的逻辑控制 #
if 结构
针对关系表达式进行判断
类型
if (布尔表达式){
满足时候执行
}
if (布尔表达式){
满足时候执行
}else{
不满足时候执行
}
if (布尔表达式 A){
A 满足时候执行
}else if(布尔表达式 B){
B 满足时候执行
} else{
A B 不满足时候执行
}
switch 开关语句
在siwch 语句只可以使用 int char 枚举(jdk 1.5之后) String(字符串 jdk 1.7之后)
switch(数据){
case 数据1 :
满足数据1
break;
case 数据2 :
满足数据2
break;
defult :
不满足数据1 和数据2
}
面试题目:
break retrun continue 的区别:
循环结构
for 循环
面试题:
for 循环中初始化值和for循环之外定义
增强for 循环
while 循环
do while 结构
while 结构
循环控制语句 : break retrun continue
# 访问权限 #
public private protected 默认
# 方法的定义与执行 #
访问权限 返回值 方法名称(参数类型 参数){
//如果有返回值,要有return
}
# 方法的重载 #
重载的方法和返回值类型没有关系只是和方法的参数有关系
# 方法的递归调用 #
方法自己调用自己(删除文件夹需要删除文件,这个就是递归调用)
如果使用递归调用容易造成内存溢出(栈溢出)
# 方法的可变参数 #
# 方法的重写 #
# java 的堆栈 #
网友评论