JAVA前言

Java特点

  • 面向对象:使用计算机模拟现实世界,解决现实问题,贴近人类思维模式
  • 简单:相比较于C、C++、C#,不易造成内存溢出
  • 跨平台:操作系统、服务器

Java执行机制

*.java 编译成 *.class(一个或多个)

可以运行在多个平台上(例:Windows、Linux、Mac等),体现跨平台的特点

img

肯·汤普森(左)

丹尼斯·里奇(右) :C语言之父,UNIX之父

1. Java语言基础

章节重点:

1.进制转换

2.补码计算

字符类型和整型的相互转换

内容辅助快捷键:”。。。“ + Alt + /

1.1 计算机理论基础

编程:编写程序,实现功能。
编程语言:编写程序的语言。
Java,PHP,C#,GO,易等属高级语言。

编译、运行过程:

源文件由编译器编译成字节码文件,后缀.class;字节码由java虚拟机解释运行,生成.java文件

1.2 进制
1.2.1 进制的分类

进制:进位制,用来表示数字时的进位制度。
十进制:用数字0-9表示每个自然数,逢10进1位。
二进制:用数字0和1表示每个自然数,逢2进1位。
八进制:用数字0-7表示每个自然数,逢8进1位。
十六进制:用数字0-9,字母A-F表示每个自然数,逢16进1位。

在写一个数字时,需明确进制:

  • 二进制数字:以“0b”作为开头
  • 八进制数字:以“0”作为开头
  • 十六进制数字:以“0x”作为开头
  • 无以上开头时,默认为十进制数字

数据存储的单位:

把一个二进制位称作一个 比特位:bit

8bit=1byte(字节)

1024byte=1kb

1024kb=1mb

1024mb=1GB

1024GB=1TB

1024TB=1PB

1024PB=1EB

1024EB=1ZB

1024ZB=1YB

1024YB=1DB

NB BB

1.2.2 进制的转换

将不同的进制进行进制的相互转换

十进制和其他进制的相互转换**

  1. 十进制转换成其他进制

    1. 辗转相除法:用一个数字除进制,再用商除进制,一直到商为0时结束,将每一步所得余数倒置连接即为指定的进制表示。
    2. 累加法:将每一位数字,乘以(进制位数-1)次方,最后将所有的乘积累加起来。
  2. 其他进制位的相互转换

    1. 一个八进制位可以等价替换成三个二进制位

    2. 一个十六进制位可以等价转换成四个二进制位

    3. 例:0176=0b001 111 110

      ​ 0x176=0b0001 0111 0110

      ​ 0b1 100 101 010=0(1452)

      ​ 0b0011 0010 1010=0x(32A)

  3. 二进制表示时需要补齐四位并保留符号位,若符号位被占用则需扩充一个字节(8个二进制位)。

1.2.3 原反补

关于负数:对于一个二进制数字来说,最高位(又称符号位)用于表示数字符号,其中0代表正数,1代表负数。

在计算机中,由于正负数表示形式不同,所以一切计算及存储均以补码形式进行。在运算中可能出现的情况:

1.计算中可能溢出,溢出位舍去。

2.补码运算得出的结果也是补码。

3.补码求原码:对该数字再求一次补即可。(人为时可以减1后取反)

原码:由数字直接计算出的二进制形式。

反码:正数的反码与原码相同,负数的反码符号位不变,其他位按位取反。

补码:正数的补码和反码(原码)相同,负数的补码是反码加1。

1.3 数据类型

在Java中,数据类型分两种:基本数据类型 和 引用数据类型。

基本数据类型分为以下几种:

  • 整型:整数类型。用来描述程序中的整数,包括正数,负数,0。

    ​ 特殊:1.若需要一个long型的变量,可以给一个整型字面量后面加一个L。

    ​ 2.浮点型的字面量默认的推导类型是double,若需要给float赋值,需要在字面量后添加一个F。

    ​ 3.字符型是用单引号括起来的一个字符,单引号中的内容长度只能是1。

  • 字节型 byte:*占内存1byte。[-2 [^7] ,2[^7]-1]

    布尔型 boolean:用来描述程序中的非真即假,非假即真的数据,占1byte。

  • 短整型 short:占内存2byte。[-2[15],2[15]-1]

  • 整型 int:占内存4byte。[-2[31],2[31]-1]

  • 长整型 long:占内存8byte。[-2[63],2[63]-1]

  • 浮点型:小数类型(无取值范围)。用来描述程序中的小数,包括正数,负数。

    • 单精度浮点型 float:4byte。
    • 双精度浮点型 double:8byte。

    在计算机中,小数以科学计数法形式记录。

判断数据类型:

需判断的对象 instanceof 判断的数据类型

注意事项:

byte、short、char参与运算的结果是int类型

字符型可以和整型等价交换

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LdODe86E-1587710468217)(C:\Users\陈永豪\Desktop\1.png)]

1.3.1 常见转换符
转义字符意义ASCII码值(十进制)
\a响铃(BEL)007
\b退格(BS) ,将当前位置移到前一列008
\f换页(FF),将当前位置移到下页开头012
\n换行(LF) ,将当前位置移到下一行开头010
\r回车(CR) ,将当前位置移到本行开头013
\t水平制表(跳到下一个TAB位置)009
\v垂直制表(VT)011
\代表一个反斜线字符092
代表一个单引号(撇号)字符039
"代表一个双引号字符034
\0空字符(NULL)000
\ddd1到3位八进制数所代表的任意字符三位八进制
\xhh1到2位十六进制所代表的任意字符二位十六进制
转 换 符说 明示 例
%s字符串类型“mingrisoft”
%c字符类型‘m’
%b布尔类型true
%d整数类型(十进制)99
%x整数类型(十六进制)FF
%o整数类型(八进制)77
%f浮点类型99.99
%a十六进制浮点类型FF.35AE
%e指数类型9.38e+5
%g通用浮点类型(f和e类型中较短的)
%h散列码
%%百分比类型
%n换行符
%tx日期与时间类型(x代表不同的日期与时间转换符

注:% 与 数据类型字符之间可以添加正整数n,意为占用n位长度,不够n位则往前补0。

% 与 数据类型字符之间可以添加 .正整数n,意为小数点后保留n位,不够则补齐。

1.4 标识符

由若干字符组成的有序序列,用来描述程序中的一个数据。

1.4.1 标识符的命名规则(强制服从)

1.只能由字母、数字、下划线和$符号组成。

2.不能以数字作为开头。

3.不能是系统关键字或者保留字。

关键字:其实也是一个标识符,遵循以上要求,但已被系统占用并赋予特殊含义,此时该标识符不能被用户使用。

保留字:类似关键字,也是一个标识符,遵循以上要求,已被系统占用但未赋予特殊含义。

4.标识符区分大小写

1.4.2 标识符的命名规范(基于可读性考虑)

1.望文知意

2.遵循驼峰命名法:

  1. 大驼峰:

    组成一个标识符的所有单词首字母均大写。建立类时,类属于标识符,遵循大驼峰命名法。

  2. 小驼峰(默认写法):

    首个单词除外,从第二个单词开始,每个单词的首字母大写。

    《阿里巴巴Java开发规范手册》

1.5 变量、常量
1.5.1 变量

在程序运行中,可以发生改变的数据,新值覆盖旧值。例:身高,体重

​ 语法1:数据类型 标识符,例:int a;

​ 语法2:数据类型 标识符=初始值;局部变量在使用前必须赋值,例:int a =10;

若需声明多个相同类型的变量:

​ 语法:数据类型 标识符1,标识符2,标识符3。。。例:int a1,a2=10,a3,a4;

1.5.1.1 局部变量

定义在某一局部代码段中的变量。局部变量有作用域。

​ 作用域:某一个变量可以被访问的范围称为该变量的作用域。

  1. 确定某变量的作用域:从变量声明开始到变量所在代码段结束。
  2. 两个相同名字的局部变量的作用域不允许有重叠。
1.5.1.2 全局变量

定义在类 class 中,与方法平级的变量

1.5.2 常量 final

在程序运行中,不可以发生改变的数据,在Java中允许对常量先声明后赋值。例:出生年月

​ 语法1:final 数据类型 标识符 ;例:final int a ;

​ 语法2:final 数据类型 标识符 = 初始值;例:final int a = 10;

1.5.3 静态static

类的成员变量有两种:一种是被 static 关键字修饰的变量,叫类变量或静态变量,一种是没有被 static 修饰的,叫做实例变量

在语法定义上的区别:静态变量前要加 static 关键字,而实例变量前则不加。

在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。

静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象

静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

java 虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区

被类的所有实例共享,静态变量可以通过类名直接访问。

静态变量的生命周期取决于类的生命周期,当类被加载的时候,静态变量被创建并分配内存空间,当类被卸载时,静态变量被摧毁,并释放所占有的内存。

类的每一个实例都有相应的实例变量,每创建一个类的实例,java 虚拟机为实例变量分配一次内存,实例变量位于堆区中

1.6 JDK的安装与配置

相关名词:

JDK:Java Development Kit (Java开发框架,Java开发中用到的所有工具的合集)。

JRE:Java Runtime Envronment(Java运行环境,为Java程序的运行提供了必要的条件)。

JVM:Java Virtual Mechine(Java虚拟机,Java程序是运行在虚拟机中的)。

JDK包含JRE,JRE包含JVM。

1.安装JDK。

2.环境变量的配置。

​ 1.为什么要配置环境变量

​ 为了在任意位置均可访问JDK中指定的程序

​ 2.需要在任意位置访问的指令

​ 1.javac:编译程序,将一个Java程序编译为字节码文件。(后缀名 .class)

​ 2.Java:将这个编译后的字节码文件加载到Java中,执行。(后缀名 .java)

​ 3.如何配置环境变量

​ 1.我的电脑->右键属性->高级系统设置->环境变量->Path

​ 2.验证环境变量是否配置好

​ 1.打开心得DOS窗口,输入javac,如提示内容不是“不是内部或外部命令”,说明配置成功。

1.7 Eclipse的使用

workspace:工作空间,一个workspace中可以包含多个Java项目。

Package explorer:包管理器,管理当前工作空间中所有的项目及项目中的文件 。

包:我们将Java文件,直接存放在某一包中,包相当于一个文件夹。包名在系统中会根据其命名中“.”拆分成嵌套式子文件夹。

src文件夹:存储代码编译区域输入的文件。

bin文件夹:存储Java文件相应的二进制位的字节码文件。

1.8 第一个Java程序

在一个有包含关系的代码段中,被包含内容与上级代码段保持一个缩进距离。

1.8.1 注释

写给程序员看,对某一代码段的描述,注释内容不会被编译

  • 单行注释://这个就是单行注释
  • 多行注释:/* 这是一个多行注释。。。 */
  • 文档注释:/** 常用来注释类或者方法 **/
1.8.2 类 class

一个Java文件中可以存在多个类。每一个类都会编译生成一个.class字节码文件。但只有和文件名相同的类才可以设public访问权限。

1.8.3 主函数

快捷方式: 输入main之后按"alt+/"组合键

程序由此执行,程序的入口,@param args

public static void main(String[] args){

}

注:一个.Java文件中仅有一个类(包含主函数)可以设置public权限。

1.8.4 在控制台输入内容

1.导入包:

import java.util.*;

2.创建IO流:

Scanner scanner = new Scanner(System.in);

3.读取控制台上的一行内容并对line赋值:

String line =scanner.nextLine()	//输出并赋值一个字符串;
			//scanner.next()从控制台读取单词,遇到空格或换行停止读取;
			//scanner.nextInt()输入后转整型并赋值;
			//scanner.nextFloat()输入后转浮点型并赋值;
			//scanner.nextDouble()输入后转浮点型并赋值;
			//scanner.nextBoolean()输入后转布尔型并赋值;

注意:没有scanner.nextChar()。

4.输出line:

System.out.println(line);
1.9 数据类型转换

可以在方法前加上@SuppressWarnings(“unchecked”)注解,意为取消未检查类型的警告。

一个变量一旦声明完成,在内存上开辟的空间大小是不允许改变的。也就是说一个变量的类型不能发生改变。这里的数据类型转换指声明一个新类型的变量并赋予原变量的数值。

  • 自动类型转换(又叫做隐式转换):

    ​ 由取值范围小的类型,转型为范围大的数据类型。

    ​ 不存在精度丢失问题。

    ​ 不需要任何额外操作,直接赋值即可。

    例:short a =100;

    ​ int s =a;

  • 强制类型转换(又叫做显式转换):

    ​ 由取值范围大的类型,转型为范围小的数据类型。

    ​ 可能存在精度丢失问题(去掉高位直至满足位数限制,视为最高位为符号位的反码,求其原码)。

    ​ 需要进行额外操作。

    例:byte b=(byte)a;

注意:byte,short,char类型的变量在运算的时候会自动转型位int类型。

  • 字符类型可以和整型数据相互转换:方法同自动类型转换
1.10 字符型

关键字:char

每个字符在存储时均对应一个数字。在字符集中有定义。

常见字符集:ASCII、GB2312、Unicode(万国码)、UTF-8(肯.汤普森发明)

A—Z = 65—90,a—z=97—122

转义字符 \:

​ 作用:1.让特殊功能字符转换成普通字符。例:’ \ ’ '表示字符 ’ 。

​ 2.可以配合某一些普通字符,使其具有特殊功能,例:\n:换行 \r:回车 \t:制表符TAB

注意:

1.输出“\”时需要转义“\”,即“\ \”。

2.转义字符适用于字符串中。

1.11 字符串

定义:由若干字符组成的有序序列。其内容由双引号” “扩起。

关键字:String

1.12 运算符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VdtSVdAa-1587710468222)(5.png)]

1.12.1 算术运算符

算术运算可以对任意类型的数字进行运算,包括整型和浮点型。

规则:

​ 整型&整型->整型,浮点型&任意类型->浮点型。

​ 若需浮点型转整型:完全舍去小数部分。

​ %:求余(求模):取余数。

​ ++/–:自增/自减,可放在变量前后,放变量前:先操作后取值;放变量后:先取值后运算。

+	-	*	/	%	++	--

数字类型+数字类型—>数字类型

字符类型+任意类型—>字符类型,此时+代表拼接运算符,此时该任意类型转为字符类型,例:

String str = 1+2+3+"hello"+3+2+1;
System.out.println(str);	//结果为 6hello321

注:组合原算法在运算过程中会自动进行类型转换

1.12.2 赋值运算符

赋值运算是有结果的,其结果是赋值完成后变量的值。

=	+=	-=	*=	/=	%=
1.12.3 关系运算符
>	<	>=	<=	==	!=
1.12.4 逻辑运算符
&(与)	|(或)	!(非)	^(异或)	&&(短路与,若前部分足以判断,则后面内容不执行)	||(短路或)

注意:一个数字与任一数字异或两次,一定得到自己。

1.12.5 位运算符

参与运算的一定是整型数字

规则:

​ 将参与运算的数字求出补码,对补码的每一位进行类似逻辑运算的操作,再求出原码。其中1相当于true,0相当于false。

&	|	^	~(按位取反,包括符号位)	<<(位左移运算)	>>(位右移运算,最高位补符号位,结果遵循向下取整原则)	>>>(无符号右移运算,最高位补0)

位移运算符:将一个数字的补码按指定方向位移若干位。

例:10<<2指的是0000 1010->0010 1000,即变成40;10>>2指的是0000 1010->0000 0010,即变成2;

​ -10>>2指的是1111 0110->1111 1101->1000 0011,即变成-3。

1.12.6 三目运算符
Boolean ? value1 : value2

规则:若Boolean值为true,取值value1,否则取值value2。

1.12.7 运算符的优先级

整体来说:一元>二元>三元

算术运算: / % > + —*

逻辑运算:! > & > |

= 的优先级最低,()的优先级最高。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值