首页 > 编程语言 >JAVA基础1

JAVA基础1

时间:2023-02-03 19:33:05浏览次数:38  
标签:Java 字节 基础 运算符 JAVA 方法 class

  • 软件工程师:
    • 是一种职位的名称,通常是通过计算机的“某种编程语言”完成软件的开发
  • 计算机包括两部分:
    • 硬件:鼠标、键盘、显示器、主机箱内部的CPU、内存条、硬盘等
      • 注意计算机只有硬件是无法工作的,需要软件驱动硬件才能工作
    • 软件:系统软件和应用软件
      • 系统软件:直接和硬件交互的软件,例如Win7、Winxp、Win8、Win10、Linux操作系统
      • 应用软件:应用软件通常运行在系统软件中,例如qq运行在Windows操作系统上,qq就是应用软件,Win7就是系统软件
  • Windows常见DOS命令:
    • exit—退出当前DOS窗口
    • cls(clear screen)—清屏
    • dir(directory)—列出当前目录下的子文件/子目录
    • cd(change directory) 相对路径/绝对路径—改变目录
      • 绝对路径:表示该路径从某个磁盘的盘符下作为出发点的路径
      • 相对路径:表示该路径从当前所在的路径下作为出发点的路径
    • cd..—回到上级目录
    • cd/—回到根目录
    • d:/c:/f:—切换盘符
  • 计算机语言的发展:
    • 什么是计算机编程语言:
      • 提前的人为的制定好的一套交流规则,有的时候,有的语法需要死记硬背,不需要问为什么,而只要遵守这套语法规则,那么人和计算机之间就可以进行很好的沟通、交流,这就是计算机编程语言。计算机编程语言有很多语种:C语言、C++、JAVA、Python等
    • 计算机语言的发展史:
      • 第一代语言—机器语言(执行效率最高,不需要编译):主要编写二进制码。直接编写101010001这样的二进制,以打孔机为代表
      • 第二代语言—低级语言:主要以汇编语言为代表,在低级语言中已经引入了一些英语单词,例如变量赋值:mov a to b;
      • 第三代语言—高级语言:几乎和人类语言完全相同,即使没有学习过计算机编程,只要看到这段代码就知道该代码完成什么功能,例如C语言、C++、JAVA
      • 总之,编程语言的发展方向是向着人类更加容易理解的方向发展
  • JAVA语言的发展史:
    • JAVA诞生于1995年
    • 1995年之前,SUN公司(太阳微电子公司:该公司目前被Oracle(甲骨文:做数据库的)收购)为了占领智能电子消费产品(电冰箱、电饭煲、吸尘器等的内核程序)市场,派James Gosling领导团队开发了一个Oak(橡树)语言
    • 1996年,JDK1.0诞生
  • Java包括三大块:
    • JAVASE:JAVA标准版
    • JAVAEE:JAVA企业版
    • JAVAME:JAVA微型版
  • JAVA语言的特性:(开源、免费、纯面向对象、跨平台)
    • 简单性:相对而言,JAVA不支持多继承,C++支持多继承,多继承比较复杂,JAVA屏蔽了指针的概念,C++有指针,JAVA语言底层是C++实现的
    • 面向对象:JAVA是纯面向对象的,更符合人的思维模式,更容易理解
    • 可移植性:JAVA程序可以做到一次编译,到处运行,也就是说JAVA程序可以在Windows操作系统上运行,不做任何修改,同样的JAVA程序也可以放到Linux操作系统上运行,这个被称为JAVA程序的可移植性,或者叫做跨平台性(因为有JVM,JVM底层是C++编写的)
    • 多线程:
    • 健壮性:自动垃圾回收机制(GC—garbage collection)有关
    • 安全性:开放源代码,所以有漏洞大家就可以修改,更安全,也会更健壮 
  • JAVA的加载与执行:
    • JAVA程序的运行包括两个非常重要的阶段:
      • 编译阶段:
        • 编译阶段的任务是检查JAVA源程序是否符合JAVA语法
        • 符合JAVA语法则能生成正常的字节码文件
        • 不符合JAVA语法规则则无法生成字节码文件
        • 字节码文件中不是纯粹的二进制,这种文件无法在操作系统当中直接执行
        • javac   java源文件的路径
      • 运行阶段
        • java 类名
        • java.exe命令会启动java虚拟机(JVM),JVM会启动类加载器ClassLoader
        • ClassLoader会去硬盘上搜索A.class文件,找到该文件则将该字节码文件装载到JVM当中
        • JVM将A.class字节码文件解释成二进制101010100这样的数据
        • 然后操作系统执行二进制和底层硬件平台进行交互
  • Windows操作系统是如何搜索硬盘上的某个命令呢
    • 首先会从当前目录下搜素
    • 当前目录搜索不到,会从环境变量path指定的路径当中搜索某个命令
    • 如果都搜索不到,则报错
  • 环境变量path
    • 注意:path环境变量和Java语言没有关系,path环境变量是属于windows操作系统的一个知识点,path环境变量是专门给Windows操作系统指路的
  • 环境变量classpath
    • 当classpath环境变量配置为某个指定的路径之后,类加载器只去指定的路径当中加载字节码文件,所以classpath不再配置,这样类加载器会自动从当前路径下加载class字节码文件,所以,每一次执行.class程序时候,需要在DOS命令窗口中先切换到.class字节码文件所在的路径下,然后运行,当然classpath也可以这样配置,classpath=.;otherpath
  • Java源程序当中的注释:(一个好的开发习惯应该是多编写注释,这样程序的可读性增强)
    • 注释出现在JAVA源程序当中,对JAVA源代码进行结束说明
    • 注释不会被编译到.class字节码文件当中
    • 单行注释 //     多行注释/**/       javadoc注释/** * * */
    • 文档注释,这种注释是比较专业的,该注释信息会被javadoc.exe工具解析提取并生成帮助文档
  • public class和class的区别:
    • 一个Java文件中可以定义多个class
    • 一个Java源文件当中public的class不是必须的
    • 一个class会定义生成一个xxx.class字节码文件
    • 一个Java源文件当中的定义公开的类的话,只能有一个,并且该类名称必须和Java源文件保持一致
    • 每个class当中都可以编写main方法,都可以设定程序的入口
  • 标识符的命名规则:
    • 只能由字母、数字、下划线_、美元符号$组成,不能含有其他符号
    • 不能数字开头
    • 严格区分大小写
    • 关键字不能做标识符
  • 标识符的命名规范:
    • 最好见名知意
    • 遵循驼峰命名方式
      • 类名、接口名,首字母大写,后面每个单词的首字母大写
      • 变量名、方法名,首字母小写,后面每个单词首字母大写
      • 常量名,全部大写,单词之间用下划线分开
    • 理论上无长度限制,但最好不要太长
  • 字面值:字表面的值,包括:整型、浮点型、字符型、字符串型、布尔型
  • 变量:
    • 变量本质上是内存中的一块空间,这块空间有"数据类型"、"名称"、"字面值"
    • 变量是内存中存储数据的最基本的单元
    • 变量只有在赋值之后内存空间才开辟出来
    • 在同一个作用域中,变量不能重名,在不同的作用域中,变量可以重名
  • 数据类型的作用: 
    • 是指导JVM在程序运行的时候给该数据分配多大的内存空间
  • 字符编码:
    • 计算机最初只支持英文,最先出现的字符编码是:ASCII码 (采用一个字节编码)
      • 'A'—65
      • 'a'—97   'a'----(按ASCII编码)----01100001     01100001----(按ASCII解码)----'a'
      • '0'—48
        • 编码和解码采用同一套字典/对照表,不会出现乱码
        • 编码和解码采用的不是同一套字典/对照表,会出现乱码
    • 随着计算机的发展,后来出现了一种编码方式,是国际化标准组织ISO制定的,这种编码方式支持西欧语言,向上兼容ASCII码,仍然不支持中文,这种编码方式是ISO-8859-1,又被称为latin-1
    • 随着计算机向亚洲的发展,计算机开始支持中文、日文、韩文等国家的文字,其中支持简体中文的编码方式:GB2312<GBK<GB18030
    • 支持繁体中文:大五码<big5>
    • 后来出现了一种编码方式统一了全球的所有文字,容量较大,这种编码方式叫做:unicode编码,unicode编码方式有多种具体的实现:UTF-8、UTF-16、UTF-32,Java语言源代码采用的是unicode编码方式,所以“标识符”可以写中文
  • 数据类型的取值范围:
    • byte     ——1字节——  -128-127
    • short    ——2字节——  -32768-32767
    • int        ——4字节——-  2147483648-2147483647
    • char     ——2字节——   0-65535
    • boolean——1字节——   true/false
    • 注意:short和char所表示的种类总数是一样的,只不过char可以表示更大的正整数,因为char没有负数
  • 转义字符 \:转义字符出现在特殊字符之前,会将特殊字符转换成普通字符
    • \n   换行符
    • \t    制表符
    • \'    普通的单引号
    • \\    普通的反斜杠
    • \''    普通的双引号
      • 补:char a='';//Java中不允许这样编写程序,编译报错
      • 补:JDK中自带的native2ascii.exe命令,可以将文字转化成Unicode编码形式
      • 补:char a='\u0000',值是0,但是输出的是什么也没有
  • Java语言中整数型字面值的三种表示方式:
    • 十进制(最常用)
    • 八进制(以0开始)
    • 十六进制(以0x开始)
  • double的精度太低(相对来说),不适合做财务软件, 财务涉及到钱的问题,要求精度较高,所以SU在基础SE类库当中为程序员准备了精确度更高的类型,只不过这种类型是一种引用数据类型,不属于基本数据类型,它是java.math.BigDecimal
    • SE类库的字节码:D:\app\java\jre\lib\rt.jar
    • SE类库源码:D:\app\java\src.zip
  • 在Java语言当中boolean类型只有两个值,true和false,没有其他值,不像C语言当中,0和1可以表示假和真,但其实底层还是0和1
  • 关于基本数据类型之间的相互转化,转换规则:
    • 八种数据类型当中除了布尔数据类型之外,剩下的7种类型之间都可以进行相互转换
    • 小容量向大容量转换,称为自动类型转换,容量从小到大排序:
      • byte<short(char)<int<long<float<double,任何浮点类型不管占用多少个字节,都比整型容量大
    • 大容量转换成小容量,叫强制类型转换,需要加强制类型转换符,程序才能编译通过,但是在运行阶段可能会损失精度,所以要谨慎使用
    • 当整数字面值没有超过byte、short、char的取值范围,可以直接赋值给byte、short、char类型的变量
    • byte、short、char混合运算的时候,各自先转换成int类型在做运算
    • 多种数据类型混合运算,先转换成容量最大的那种类型再做运算
  • 运算符
    • 算术运算符             +、-、*、/、++、--、%(求余数,取模)
    • 关系运算符             <、<=、>、>=、==、!=
    • 布尔运算符             &&(短路与)、||、&(逻辑与)、|、!、^
          • 逻辑运算符要求两边的算子都是布尔类型,并且逻辑运算符最终的结果也是一个布尔类型
          • 短路与和逻辑与最终运算结果都是相同的,只不过存在短路现象
          • 短路或和逻辑或最终运算结果都是相同的,只不过存在短路现象
    • 位运算符(用来直接操作二进制)                 
          • &按位与(同真则真,有假则假)
          • |按位或(同假则假,有真则真)
          • ^按位异或(相同为假,不同为真)
          • ~按位非(真则假、假则真)
          • >>右移(有符号右移,正数补0,符数补1)
          • >>>右移(无符号右移,必须补0)
          • <<左移
    • 赋值类运算符          =、+=、-=、*=、/=、%=
          • 扩展类的赋值运算符不改变运算结果类型
    • 字符串连接运算符   +
    • 条件运算符              ?:
    • 其他运算符               instanceof、new
  • 控制语句(所有的控制语句都可以嵌套):
    • 控制选择结构语句:
      • if、if.....else....(if语句分支中只有一条java语句,{}可以省略不写)
      • switch(int或String)//byte、short、char也是可以的
        • switch(i){
          • case 1: case 2: case 3: case 4:
          • System.out.println("4");
        • }
        • case引号后面可以什么都不写
    • 控制循环结构语句:
      • for
      • while
      • do....while(); 
    • 改变控制语句顺序:
      • break
        • break终止的是离他最近的循环,也可以通过给for循环起名字来终止自定义的for
        • return:return所在的方法结束,但不是JVM结束
      • continue
        • continue跳过的是离他最近的循环,也可以通过给for循环起名字来跳过自定义的for
  • 接收用户键盘输入:
    • java.util.Scanner s = new java.util.Scanner(System.in);
    • s.nextInt();//用来输入整数
    • s.next();//用来输入字符串
  • 栈数据结构:
  •  方法代码片段存在哪里?方法执行的时候执行过程的内存在哪里分配?

    • 方法代码片段属于.class字节码文件的一部分,字节码文件在类加载的时候被放到方法区当中,所以JVM中的三块主要的内存空间中方法区内存最先有数据、存放了代码片段。
    • 代码片段虽然在方法区当中只有一份,但是可以被重复调用,每一次调用这个方法的时候,需要给该方法分配独立的活动场所,在栈内存中分配,方法在调用的瞬间,会给该方法分配内存空间,会在栈中发生压栈动作,方法执行结束之后,给该方法分配的内存空间全部释放,此时发生弹栈动作       
  • 方法重载(overload)
    • 什么时候考虑使用方法重载?
      • 功能相似的时候,尽可能使用方法重载
    • 什么条件满足之后构成方法重载?
      • 在同一个类中
      • 方法名相同
      • 参数列表不同:
        • 数量不同
        • 顺序不同
        • 类型不同
    • 方法重载和什么有关系?和什么没有关系?     
      • 方法重载和方法名+参数列表有关系
      • 方法重载和返回值类型无关
      • 方法重载和修饰符列表无关                                                                                                                                                                                                          

标签:Java,字节,基础,运算符,JAVA,方法,class
From: https://www.cnblogs.com/wei-xin-yuan/p/17080194.html

相关文章

  • Java集合 Map 集合 与 操作集合的工具类: Collections 的详细说明
    Java集合Map集合与操作集合的工具类:Collections的详细说明每博一文案别把人生,输给心情师父说:心情不是人生的全部,却能左右人生的全部。你有没有体会到,当你心......
  • Java如何向主函数main中传入参数
    方法一:命令行java-jarWhite-1.0-SNAPSHOT.jar123方法二:javacGreenLeaf.javajavaGreenLeaf123方法三:IDEA->Run->EditConfigurations->Configuration->......
  • Java Collection接口下的“ List 集合” 与 “ Set 集合 ”
    JavaCollection接口下的“List集合”与“Set集合”每博一文案一个人最好的底牌,就这两个字:靠谱,是最高级的聪明。师父说:人生一回,道义一场,你对人对事的态度,藏......
  • 软件测试|Python基础之面向对象(二)
    面向对象的编程思想面向对象是一种编程思想,用这种思想为指导设计的程序,把数据和对数据的操作封装在一起组成类,通过类来创建对象,通过对象之间的交互来实现程序的功能。面向对......
  • 软件测试|Python基础之面向对象(三)
    Python面向对象之动态静态方法动静态方法在类中定义的函数有多种特性直接在类中定义函数再类中直接定义函数,默认绑定给对象,类调用时有几个参数就要传几个参数,对象调用时该......
  • 软件测试|Python基础之面向对象(四)
    Python面向对象之继承与派生继承python三大特征封装、继承、多态三者中继承最为核心,实际应用多,感受较为直观封装和多态略微抽象继承的概念继承的含义:在现实生活中,继承表......
  • 软件测试|Python基础之模块导入和使用
    Python模块导入和使用模块1、简介本质:模块是指内部具有一定功能(代码)的py文件2、模块的表现形式1、py文件(py文件也可以称之为是模块文件)2、含有多个py文件的文件夹(按照模块功......
  • java命令javac命令jar命令使用
    java命令、javac命令、jar命令使用 java命令基础知识#创建项目目录mkdir-pmyproject/srcmkdir-pmyproject/targetcdmyproject#创建项目文件vimsrc/App.......
  • 学习java第七天
    变量变量是什么:就是可以变化的量java是一种强类型的语言,每个变量都必须声明其类型。java变量是程序中最基本的存储单位,其要素包括变量名,变量类型和作用域不建议在一行......
  • jenkins中ssh远程无法执行javac命令
    最近发现有个项目修改后在jenkins发布不生效,查找原因,根据输出的日志发现javac命令不存在,但是登录上服务器发现手动输入执行javac 相关命令是没问题的,于是在jenkins中添加......