当前位置: 首页 > news >正文

背诵--1

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_162
    2.把名称为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 文件名.java
        javac HelloWorld.java
    注意:
		(1)保证该javac命令在当前路径下可以执行
        (2)保证在当前路径下可以看到被编译的.java文件
        (3)编译javac命令,后面要跟文件的扩展名.java
            
4.使用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,数字的大小没有发生改变,还是5
    00000000 00000101
    
自动类型转换成int类型(4个字节): 	前边(左边)补充3个字节的0,数字的大小没有发生改变,还是5  
    00000000 00000000 00000000 00000101
    
自动类型转换成long类型(8个字节): 	前边(左边)补充7个字节的0,数字的大小没有发生改变,还是5
    00000000 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,对数字没有影响,还是5
    00000000 00000000 00000000 00000101
        
强制类型转换成short类型(2个字节): 砍掉左侧6个字节的数字,都是0,对数字没有影响,还是5
    00000000 00000101     

强制类型转换成byte类型(1个字节): 砍掉左侧7个字节的数字,都是0,对数字没有影响,还是5
	00000101
    
总结: 所谓的强制类型转换,其实就是根据需求砍掉左侧若干字节的数据,如果被砍掉的都是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,那么casedefault顺序可以任意调整
    (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

在这里插入图片描述

相关文章:

  • 【NLP】7. 自然语言处理 (NLP) 的关键要素
  • 零基础上手Python数据分析 (2):Python核心语法快速入门
  • golang从入门到做牛马:第二十篇-Go语言接口:行为的“契约”
  • 深入探究 HTML 框架:多页面同窗口显示的奥秘
  • 【红黑树】—— 我与C++的不解之缘(二十五)
  • 软件环境安装-通过Docker安装Elasticsearch和Kibana【保姆级教程、内含图解】
  • SpringBoot配置文件
  • 【Docker compose】Neo4j 数据备份与恢复
  • 插入排序c++
  • 【BP神经网络】实战
  • PHP语言的区块链扩展性
  • 大模型后训练+微调
  • MAC地址IP地址如何转换?
  • LuaJIT 学习(5)—— string.buffer 库
  • 梧桐:开发者的命令行效率应用
  • 打开的idea项目maven不生效
  • C++20 的 `std::remove_cvref`:简化类型处理的利器
  • Python扑克牌小游戏
  • Redis哨兵:从看门狗到导盲犬的进化史
  • C#中运算符重载‌你会用吗?
  • 技术派|更强的带刀侍卫:从054B型战舰谈谈世界护卫舰发展
  • 普京提议无条件重启俄乌谈判,外交部:我们支持一切致力于和平的努力
  • 巴基斯坦全国航班仍持续延误或取消
  • 多地再发网约车从业及投资风险提示:避免盲目花费大笔资金“购车”入行
  • 范志毅跨界归来做青训,探索中国足球人才培养新模式
  • 纪录片《中国》原班人马打造,《船山先生》美学再升级