Java编程入门
jie
2020-10-10
JVM调优 JVM解析程序时需要得到CLASSPATH支持 关系: JVM → CLASSPATH定义路径 → 加载字节码文件 文档注释里还有很多选项, 一般通过开发工具帮助实现 一般用有意义的单词 程序支持数据转换处理, 但不是必须的情况不建议转换 明确循环次数情况下优先选择for循环 不知道循环次数,但知道循环结束条件情况下优先使用while循环 Java编程入门 1.Java语言简介 2.搭建Java开发环境 JDK简介 Java Development Kit, Java开发工具包 JDK版本更新 JDK下载 JDK安装与配置 安装JDK 环境变量配置 配置JDK路径: JAVA_HOME 配置PATH路径: %JAVA_HOME%\bin 配置CLASSPATH路径: .;%JAVA_HOME%\lib 3.初识Java开发 Java编程起步 public class Hello { public static void main(String args[]) { System.out.println("public") ; } } 类的定义 可以定义多个class public class 类名称 {} class 类名称 {} 类名称首字母必须大写 主方法是程序执行的起点, 且必须定义在类中 JShell工具 CLASSPATH环境属性介绍 作用:可以在不同目录中加载 执行*.class文件 SET CLASSPATH = D:\Code\Java SET CLASSPATH=. CLASSPATH 和 PATH区别(面试题) PATH 是操作系统提供的路径配置, 定义所有可执行程序的路径 CLASSPATH 是JRE提供,定义Java程序解析时加载路径 4.Java基本概念 注释 本质: 程序编译时发现有注释内容将不对此部分进行编译 单行注释: // 多行注释: /* ....*/ 文档注释: /** ...*/ 标识符与关键字 在不同的结构一定要有不同的说明,结构的说明是有命名要求的 由字母, 数字, _ , $组成, 不能用数字开头 对一些关键字的简短说明 JDK1.4时有assert(断言)关键字, 用于异常处理上 JDK1.5时有enum(枚举)关键字, 用于枚举定义上 未使用到的关键字: goto, const 一些特殊含义的单词, 严格来讲不算是关键字: true, false, null 5.Java数据类型划分 Java数据类型简介 基本数据类型 整数型 整型: byte, short, int, long 浮点型: float, double 引用数据类型 6.Java运算符 7.Java程序逻辑控制 8.方法的定义及使用 I.Java发展简介 II.Java语言特点 Sun公司开发的一套编程语言,但前身不是Java 网景公司推出HotJava浏览器 1995-5-23正式推出Java编程语言 1996年可以下载使用JDK1.0开发包 1997年传到中国 Java标准开发(J2SE,JAVA SE),:提供底层的支持,实现了桌面程序开发(单机程序) SUN(Stanford University NetWork,斯坦福大学网络) 最早标志性作品:小型机 电子商务是IBM提出来的 后来被Oracle收购,但在Oracle收购前产品线上技术基础是Java SUN没有通过Java赚到钱,真正赚到钱的是IBM和后来版权欺诈的Oracle Java嵌入式开发(J2ME, JAVA ME):SUN公司最早想做嵌入式开发,但后来被Nokia 折腾够了,后来被Android替代了 Java企业开发(J2EE,JAVA EE):主要进行企业平台搭建,现在主要的开发是互联网平台 1.是一个行业内通用的技术实现标准 2.是一门面向对象编程语言 3.提供有方便的内存回收机制 4.避免了复杂的指针问题,使用简单的引用代替指针,引用难理解 5.Java是为数不多的支持多线程编程语言,多线程难理解,正确额多线程处理是提升性能 的核心所在 7.Java语言足够简单 6.Java具有良好的可移植性 JVM(Java虚拟机):一个由软件硬件模拟处理的计算机,不同系统有不同版本的JVM, 从而实现可移植性 Java应用程序运行机制 计算机高级编程语言类型:编译型,解析型 Java是两种语言的结合 编译命令:javac.exe 解析命令:java.exe Java程序组成 用来解析的计算机就是Java虚拟机 Java源文件 字节码文件 机器码指令 由JVM执行肯定比会直接在操作系统上直接执行要慢 字节码class是通用的执行文件 Oracle官网 1995.05.23, JDK1.0开发包发布,96年正式提供下载 1998-12-04, JDK.2, Java更名为Java2 2005-05-23, JDK1.5, 这一版本决定了Java后续十年的技术核心 2014年, JDK1.8, 支持Lambda变大时, 可以使用函数编程 2017年, JDK1.9, 提升了稳定性 2018年, JDK1.10, 属于JDK1.9的稳定版, JDK1.11 2019年, JDK1.12, jDK1.13 2020年3月, JDK.14 Hello World程序 编译会生成多个*.class, 文件名是类名称, 但还是开发中一个*.java很少会定义多个 class, 一个public class就够了 公共类:类目称必须与文件名一致 主方法所在的类统一称主类, 都采用public class定义 public static void main(String args[]) {} 或:public static void main(String []args) {} 一个编写代码交互性工具,可直接运行核心代码,而不用编写结构,但实用性不高 从D:\Code\Java 加载类 默认当前目录加载 使用开发工具时, 单行注释会方便些, 对于一些重要的类, 方法一般使用文档注释 布尔型: boolean(1个字节) 字符型: char 默认值: 0 默认值: 0.0 默认值: false 默认值: 'u0000' 数组, 接口, 类 默认值: 0 数据类型的选择参考 描述数字首选int, double 进行数据传输或文字编码转换用byte(二进制处理操作) 处理中文最方便的是char(可选概念) 描述内存或文件大小, 描述主键列(自动增长)可以用long 数据类型可表示范围 int: 32位, -2,147,483,648~2,147,483,647 float: 32位, -3.4E38~3.4E38 double: 64位, -1.7E308~1.7E308 char: 16位, 0~65536 byte: 8位(一个字节), -128~127 long: 64位, -9,223,372,036,854,775,808(-2^63) ~9,223,372,036,854,775,807(2^63 -1) short: 16位, -32768~32767 整形数据类型 浮点型数据 字符型 布尔型 String字符串 数字在进行处理时如果超过范围会循环,即数据溢出,int型 最大值+1=最小值(循环) 解决数据溢出 1.操作时预估数据范围,范围不够就使用更大范围 2.默认整数常量都是int型, 后面加"L"可以转换为long, 或在前面用"(long)" 强制类型转换 范围大的类型转小的类型 byte Java对byte进行了处理, 如果int常量范围没超过byte, 会自动转为byte, 但是对于变 量, 还需要强制类型转换 byte num =20 小数默认都是double 定义float = 10.2, 需要使用强制类型转换 float = 10.2F; float = (float)10.2; 计算时要注意选择的数据类型, 决定小数点的问题 任何编程语言中,char 都可以与 int 相互转换 编码范围 'A'(65)~'Z'(90) 'a'(97)~'z'(122) 0(48)~9(57) Java中的char类型可以保存中文数据 注意:Java中不存在在用0表示false, 1表示true 要求使用双引号""描述 使用"+"进行字符串连接处理 str = "Hello"; str += "!!!"; 自动类型转换 数据范围大的数据类型与范围小的数据类型计算时, 小自动转成大的 计算中如果有String字符串, 则所有类型无条件变为String, 此时"+"为字符型拼接 转义字符 TAB(\t) " (\") ' (\') 换行 (\n) \ (\\) 运算符简介 数学运算符 关系运算符 逻辑运算符 位运算 运算符里()优先级最高 不建议编写很复杂的运算, 简单易懂为主 简化运算占用内存会较少: 如"+=" "x++", 先计算在自增 "++y", 先自增再计算 "="表赋值, "=="才是关系运算 三目(赋值)运算符 关系运算 ? 关系满足时内容 : 关系不满足时内容 例: int max = x > y ? x : y; 指的是可以直接进行二进制数据的计算处理 与(&), 或(|), 异或(^), 反码(~) 移位运算 int x = 2; x << 2(结果x = 8) && 运算: 如果前面条件返回false, 后面结果不再执行,结果为 false || 运算: 前面条件返回 true, 后面不再执行 If分支结构 Switch开关语句 while循环 for循环 循环控制 循环嵌套 使用的关键字: if, else if(布尔表达式){ 条件满足时执行; }else if(布尔表达式){ 条件满足时执行; }else{ 条件不满足时执行;} 执行多逻辑判断可以不写上else, 但好的习惯是写上else switch(数据){ case 数值 : { 数值满足时执行 ; [break ;] } case 数值 : { 数值满足时执行 ; [break ;] } [default: 所有判断数值不满足时执行 ; [break ;] ] } case后面如果没有break, 会继续执行后续代码,直到执行完毕遇见break while循环 do ... while循环 while(布尔表达式){ 条件满足执行 ; 修改循环条件 ; } do{ 条件满足执行 ; 修改循环条件 ; }while(布尔表达式); for(定义循环的初始化数值 ; 循环判断 ;修改循环数据){ 循环语句的执行 ; } 两个控制语言语句: break, continue break: 跳出循环 continue : 当前语句后续代码不再执行,直接执行后续判断 在一个循环语句里嵌套另一个循环 循环嵌套越多, 时间复杂度越高 在程序中可能需要重复执行的一些代码. 有些书把方法(method)叫函数(funtion) 方法重载 方法的递归调用 子主题 方法在主类中定义, 并且由主方法直接调用 方法的定义 public static 返回值类型 方法名称([参数类型 变量,....]) { // 该方法要执行的代码 [return [返回值] ;] } 没有返回值可以用void定义 如果返回值类型时void, 也可以用return结束调用 java中定义方法时一般不用太长, 对项目进行适当的拆分 同一个方法名称根据调用时传递的不同参数个数或类型实现不同的方法体调用,从而 实现方法重载的定义 例: 方法的重载与方法的返回值类型没有任何关系, 它只跟参数有关. 掌握一个基本的开 发原则 : 只要是方法重载建议其返回值类型相同 例如System.out.println()可以接收 不同数据类型, 就是一个方法重载 指的是一个方法自己调用自己的情况 一定要设置递归调用结束的条件 每一次调用一定要修改传递的参数条件 例: 累加 递归操作实际开发中很少出现递归情况, 处理不当会导致栈溢出 例 : 阶乘 JDK目录 bin目录, .exe可执行文件 lib目录, .jar类库文件 jre: java运行时环境目录 两个%表示引用"JAVA_HOME"的路径 常用DOS命令 dir(directory) 列出当前目录文件 md(make) cd(change) 创建目录 rd(remove) 删除目录 进入指定目录 del exit cls(clear screen) 删除文件 推出DOC命令行 清屏 cd.. 返回上一级目录 cd\ 返回到根目录 其他 JRE(Java Runtime Environment) JVM+lib(一些系统类库) 不能与关键字重名 命名要求 命名规范 类名: 首字母大写 变量名: 首字母小写, 后面单词首字母大写 方法名: 与变量名命名规则相同, 驼峰命名 常量名: 所有字母大写, 单词间_隔开 关键字 : 有53个, 51个在用 命名要用单词, 见名知意, 不可用拼音 ! 非 >>> 无符号右移, 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移 动得到的空位以零填充。 赋值运算符 "=", "+=", "-=", "/=", "%=" <<= 左移位赋值运算符 >> = 右移位赋值运算符 &= 按位与赋值运算符 ^ = 按位异或赋值操作符 | = 按位或赋值操作符 instanceof 运算符 该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类 型) String name = "James"; boolean result = name instanceof String; 正整数的补码是其二进制表示,与原码相同 负整数补码 : 反码是原码取反, 补码是反码加1(带符号位二进制) << 左移 << 右移 有符号 判断数据可以是String, char, int 方法的参数传递 形参 : 方法声明时的参数 实参: 方法调用时实际传给形参的参数值 Java中的值传递 : 用实际传递的参数值的副本(复制品)传入方法内, 参数本身不受影