网站查询信息如何自己免费制作网站
Java语言的跨平台实现原理
JVM:Java虚拟机,是专门用来运行java程序的(JVM(Java Virtual Machine ):Java虚拟机,简称JVM,是运行所有Java程序的假想计算机,是Java程序的运行环境,是Java 最具吸引力的特性之一。我们编写的Java代码,都运行在 JVM 之上。)
跨平台:我们编写一个程序,可以在不同的操作系统上运行一次编译(写),到处运行
说几个问题?
1.Java程序是跨平台的?正确的Java程序只需要编写一次,就可以在不同的操作系统上运行
2.JVM是跨平台的?错误的JVM是不跨平台的,java针对不同的操作系统,提供了不同的JVM
3.Java程序的跨平台,是通过JVM的不跨平台实现的正确的
JDK_JRE_JVM的组成和作用
JVM:Java虚拟机,是专门用来运行java程序的,但是不能独立安装。
JRE:Java运行环境,包含JVM和核心类库(Java已经写好的功能) --普通用户,只需要运行程序
JDK:Java开发工具,包含JRE和开发工具(比如: javac命令,java命令) --程序开发人员
三者关系: JDK > JRE > JVM
环境变量JAVA_HOME的配置
配置环境变量的目的/作用: 让某些命令可以在任意路径下直接运行(java程序: javac命令,java命令)比如jdk的安装路径: C:\develop\Java\jdk1.8.0_162配置环境变量的步骤:1.创建名称为JAVA_HOME的环境变量,值是 C:\develop\Java\jdk1.8.0_1622.把名称为JAVA_HOME的环境变量添加到系统环境变量path中 path:%JAVA_HOME%\bin;...
Java程序开发的三个步骤
HelloWorld案例的编写编译运行
步骤:
1.创建HelloWorld.txt文本文件,把扩展名修改给.java,最终文件名称HelloWorld.java
2.用记事本软件打开HelloWorld.java文件,编写如下内容public class HelloWorld {public static void main(String[] args){System.out.println("HelloWorld");}}
3.使用javac命令进行编译格式: javac 文件名.javajavac HelloWorld.java注意:(1)保证该javac命令在当前路径下可以执行(2)保证在当前路径下可以看到被编译的.java文件(3)编译javac命令,后面要跟文件的扩展名.java4.使用java命令执行格式: java 文件名java HelloWorld注意:(1)保证该java命令在当前路径下可以执行(2)保证在当前路径下可以看到被执行的.class文件(3)执行java命令,后面不要跟文件的扩展名.class
注释
1.注释概念:是用来解释说明程序的,是给程序员看的,不参与编译和运行,不影响程序的执行效率。
2.注释分类:(1)单行注释: // 只能写一行内容(2)多行注释: /* 可以写多行内容 */(3)文档注释: /** 可以写多行内容 */
常量
1.常量的概念: 在程序的执行过程中,值不可以发生改变的量
2.常量的分类:(1)整数常量: 100,-200(2)小数常量: 6.6,-8.8(3)字符常量: java中规定,字符常量必须使用单引号''引起来,而且单引号''中只能有一个字符(不能没有字符,也不能有2个及以上的字符)举例:A: 'a' 正确的B: '' 错误的,''中不能没有字符C: 'ab' 错误的,''中不能有2个及以上的字符D: '好' 正确的,一个汉字代表一个字符 E: '女子' 错误的,''中不能有2个及以上的字符(汉字)(4)字符串常量:java中规定,字符串常量必须使用双引号""引起来,而且双引号""中可以写多个字符(0个,1个,2个...)举例:A: "a" 正确的B: "" 正确的C: "ab" 正确的D: "好" 正确的 E: "女子" 正确的(5)布尔常量:只有两个取值true: 理解为成立的,对的,正确的,肯定的,成功false: 理解为不成立的,错的,错误的的,否定的,失败(6)空常量: null 【了解】 不能直接打印null值
变量
变量的注意事项
定义long类型的变量时,需要在整数的后面加L(大小写均可,建议大写)。
定义float类型的变量时,需要在小数的后面加F(大小写均可,建议大写)。
标识符
命名规则: 硬性要求(1)标识符可以包含 英文字母26个(区分大小写) 、 0-9数字 、 $(美元符号) 和 _(下划线) 。(2)标识符不能以数字开头。(3)标识符不能是关键字。
命名规范: 软性建议(1)类名规范:首字母大写,后面每个单词首字母大写(大驼峰式)。(2)方法名规范: 首字母小写,后面每个单词首字母大写(小驼峰式)。(3)变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。
自动类型转换
Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。
1.自动类型转换概念:取值范围小的数据或者变量可以直接赋值给取值范围大的变量(小萝卜可以直接放入大坑中) 2.特点: (1)是自动完成的,不需要代码的特殊处理(2)只要byte/short/char类型的数据参加运算,会自动转换为int类型(3)转换规则: byte、short、char-->int-->long-->float-->double举例:
有一个byte类型(1个字节)的数字5: 00000101
自动类型转换成short类型(2个字节): 前边(左边)补充1个字节的0,数字的大小没有发生改变,还是500000000 00000101自动类型转换成int类型(4个字节): 前边(左边)补充3个字节的0,数字的大小没有发生改变,还是5 00000000 00000000 00000000 00000101自动类型转换成long类型(8个字节): 前边(左边)补充7个字节的0,数字的大小没有发生改变,还是500000000 00000000 00000000 00000000 00000000 00000000 00000000 00000101总结: 所谓的自动类型转换,其实就是根据需求在数字前面补充若干字节的0,但是数字大小没有影响(打肿脸充胖子)
强制类型转换
1.强制类型转换概念:取值范围大的数据或者变量不能直接赋值给取值范围小的变量,必须进行强制类型转换(大萝卜不能直接放入小坑当中)2.格式:转后类型 变量名称 = (转后类型)转前数据或者变量;3.问题: 会丢失数据或者损失精度举例:
有一个long类型(8个字节)的数字5: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000101强制类型转换成int类型(4个字节): 砍掉左侧4个字节的数字,都是0,对数字没有影响,还是500000000 00000000 00000000 00000101强制类型转换成short类型(2个字节): 砍掉左侧6个字节的数字,都是0,对数字没有影响,还是500000000 00000101 强制类型转换成byte类型(1个字节): 砍掉左侧7个字节的数字,都是0,对数字没有影响,还是500000101总结: 所谓的强制类型转换,其实就是根据需求砍掉左侧若干字节的数据,如果被砍掉的都是0,对数字没有影响,被砍掉的内容只要包含1,就会影响原数字的大小(缺点: 可能会损失精度)6000000000L:000000000 000000000 000000000 000000001 01100101 10100000 10111100 00000000强制转换成int类型: 砍掉左侧的4个字节,包含了一个数字1(有个2的32次方)01100101 10100000 10111100 00000000: 1705032704 = 6000000000L - 2^32 = 6000000000L - 4294967296 = 1705032704
逻辑运算符的短路效果
短路的逻辑运算符:(1)&&: 左侧为false,右侧不进行计算(2)||: 左侧为true,右侧不进行计算
switch
注意:(1)break关键字是用来结束switch语句的,遇到break,直接跳出switch语句,执行后续代码(2)default的作用: 如果所有的case中的常量值和switch后面的表达式的结果都不相同,执行default后面的代码(3)如果default放在最后面,那么它break可以省略(4)如果每个case后面有break,而且default后面也有break,那么case和default顺序可以任意调整(5)switch后面()中表达式的数据类型只能是以下类型: ------------------------重要---------基本类型: byte/short/char/int 引用类型: String和枚举(6)case后面只能写常量,不能写变量,而且多个case中的常量值是不可以重复的 ------------------------重要---------
java中的内存分配
数组内存图
方法格式
修饰符 返回值类型 泛型 方法名称(参数列表){功能代码;return ;}
方法重载
参数列表不同有哪些情况可以构成重载?1.数量不同2.类型不同3.多个类型,顺序不同方法重载与哪些因素无关?1.与参数的名称无关2.与返回值类型无关3.与修饰符无关方法重载只和方法名和参数有关,与方法的关键字和返回值无关。
面向对象思想
面向对象思想总结: 1.面向过程:当要实现一个功能时,需要亲力亲为,处理每个细节 2.面向对象:当要实现一个功能时,不关心具体的实现步骤,只关心结果,找一个具有该功能的类,帮我们做事 3.面向对象的思想(1)面向对象是基于面向过程的编程思想(2)面向过程:强调的是每一个功能的步骤 (3)面向对象:强调的是对象,然后由对象去调用功能 4.特点(1)是一种更符合我们思考习惯的思想(2)可以将复杂的事情简单化(3)角色发生了转换,将我们从执行者变成了指挥者
面向对象思想举例:
洗衣服:面向过程:把衣服脱下来-->找一个盆-->放点洗衣粉-->加点水-->浸泡10分钟-->揉一揉-->清洗衣服-->拧干--
>晾起来面向对象:把衣服脱下来-->打开全自动洗衣机-->扔衣服-->按钮-->晾起来
吃烤鸭:面向过程:是现有鸭还是现有蛋(还是先买只鸭蛋)-->小鸭子-->养大-->学技术-->买机器-->做烤鸭(前几次都不能)-->开吃面向对象(面向全聚德烤鸭店) : 到全聚德烤鸭店-->点餐-->交钱-->服务员上餐-->开吃
类与对象的关系
什么是类?类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
现实中,描述一类事物:属性:就是该事物的状态信息。行为:就是该事物能够做什么。什么是对象?对象:是一类事物的具体体现。对象是类的一个实例(对象并不是找个女朋友),必然具备该类事物的属性和行为。类与对象的关系类:类是对现实生活中一类具有共同属性和行为的事物的抽象类是对一类事物的描述,是抽象的。对象:是能够看得到摸的着的真实存在的实体对象是一类事物的实例,是具体的。简单理解:类是对事物的一种描述,对象则为具体存在的事物类是对象的模板,对象是类的实体。
对象的成员变量有默认初始化值
(1)基本类型整数(byte/short/int/long) 0小数(float/double) 0.0字符(char) 空白字符布尔(boolean) false(2)引用类型 null
对象的内存图
String简介
"abc" 等效于 char[] data={ 'a' , 'b' , 'c' }jdk8及以前: String内部使用的就是字符数组jdk9及以后: String内部使用的就是字节数组例如: String str = "abc"; 相当于: char data[] = {'a', 'b', 'c'}; String str = new String(data); // String底层是靠字符数组实现的。
StringBuilder简介
字符串缓冲区可以支持可变的字符串
java.lang.StringBuilder类:就是一个字符串缓冲区,内部的字符串内容是可以改变的
特点:内部字符串内容可以改变
底层是字符数组:默认初始化容量长度为16的字符数组(随着内容的添加,会变成更大的数组,内容也可以改变)注意:当向StringBuilder对象中添加内容时,其实就是向它内部的数组中添加内容1.添加内容后,数组没有使用完毕;留着可以下次继续添加2.如果添加内容后,发现数组剩余空间不够使用了StringBuilder内部会实现数组的自动扩容3.首先创建长度为原数组长度2倍+2的新数组4.把原数组中的内容拷贝到新数组中5.新数组中剩余空间,可以继续添加元素
扩容方式:默认长度:16第一扩容 16*2+2 34第二扩容 34*2+2 70第三扩容 70*2+2 142