java基础1(原理、注释、关键字、常量、变量、数据类型转换)

java基础1(原理、注释、关键字、常量、变量、数据类型转换)

1 入门

1.1 Java语言的跨平台实现原理

平台:指的是操作系统,windows,linux,macos

跨平台: 跨越不同的操作系统,我们所编写一个程序,可以在多个操作系统上运行

JVM: Java虚拟机,是专门用来运行Java程序的

问题1:
JVM是跨平台的? 错误
不同的操作系统,JVM是不一样的

问题2:
Java程序是跨平台的? 正确
一次编写/编译 到处运行

问题3:
Java程序的跨平台是依赖于JVM的不夸平台实现的?
正确的

1.2 JDK、JRE、JVM的组成和作用

JVM:称为Java虚拟机,是专门用来运行Java程序的,但是不能独立安装

JRE:称为Java运行环境,包含JVM和核心类库

JDK:称为Java开发工具,包含JRE和开发工具

三者关系: JDK > JRE > JVM

2 HelloWorld入门程序

2.1 程序开发步骤

1.编写源程序 程序员编写的程序 .java

2.把源程序编译成字节码程序

JVM是用来运行Java程序的,但是JVM是一个二货,只认识0和1,像这种内部存储0和1的文件,称之为字节码文件/程序,扩展名是.class

如何把源程序/文件转换成/编译字节码程序/文件呢?
使用编译命令javac,使用格式:
javac 文件名.java
javac HelloWorld.java 生成字节码文件 HelloWorld.class

3.把字节码程序/文件 交给 JVM执行

源程序和字节码程序都存储在硬盘上,不会直接执行,需要把字节码程序交给JVM执行

如何把字节码程序交给JVM执行呢?
使用运行命令Java,使用格式:
java 文件名
java HelloWorld 把字节码程序HelloWorld交给JVM执行

三个步骤:编写源程序、编译源程序、运行

2.2 HelloWorld案例的编写编译运行
1.编写源程序
	创建一个HelloWorld.txt的文本文件,把扩展名修改为.java
	打开HelloWorld.java文件,输入以下内容
	public class HelloWorld {
		public static void main(String[] args) {
			System.out.println("HelloWorld");
		}
	}

2.把源程序编译成字节码程序	
	使用编译命令javac
	使用格式:
		javac 文件名.java 
		javac HelloWorld.java	把HelloWorld.java源程序/文件编译生成对应的字节码程序/文件
    注意:
		(1)保证在当前路径下,可以看到要编译的文件
		(2)保证在当前路径下,javac命令可以使用
		(3)javac命令在使用时,后面的文件必须写扩展名.java
            
 3.把字节码程序/文件 交给 JVM执行
	源程序和字节码程序都存储在硬盘上,不会直接执行,需要把字节码程序交给JVM执行
    源程序HelloWorld.java 和 字节码程序HelloWorld.class 都存储在硬盘上
	如何把字节码程序交给JVM执行呢?
	使用运行命令java,使用格式:
	java 文件名 
	java HelloWorld 把字节码程序HelloWorld交给JVM执行

3 注释、关键字、常量和进制

3.1 注释

1.1.概念: 是对程序中的内容进行解释说明的一些文字,不参与编译,也不参与运行,不会影响程序的运行效率

2.分类:
(1)单行注释: // 只能写一行内容
(2)多行注释: /* 可以写多行内容 /
(3)文档注释: /
* 可以写多行内容 */

3.例子

//这里是定义一个类,class后面的名字必须和文件名保存一致
//public class 是固定写法
public class Demo02ZhuShi {
	/*
		这里是定义一个方法,名字叫做main,
		main方法是程序的入口
		public static void 是固定写法
	*/
	public static void main(String[] args) {
		/*
			这是输出语句,会把小括号()中双引号""中的内容,
			原样输出到控制台
		*/
		System.out.println("注释");
	}
}
3.2 关键字

1.概念: 是指在程序中,Java已经定义好的单词,具有特殊含义。关键字不能用作变量名、方法名、类名、包名和参数。

2.总览

访问控制privateprotectedpublic
类 方法和变量修饰符abstractclassextendsfinalimplementsinterfacenativenewstatic
strictfpsynchronizedtransientvolatile
程序控制breakcontinuereturndowhileifelseforinstanceof
switchcasedefault
错误处理trycatchthrowthrows
包相关importpackage
基本类型booleanbytechardoublefloatintlongshortnull
truefalse
变量引用superthisvoid
保留字gotoconst

另外,Java还有3个保留字:true、false、null。它们不是关键字,而是文字。包含Java定义的值。和关键字一样,它们也不可以作为标识符使用。

关键字含义
abstract表明类或者成员方法具有抽象属性
assert用来进行程序调试
boolean基本数据类型之一,布尔类型
break提前跳出一个块
byte基本数据类型之一,字节类型
case用在switch语句之中,表示其中的一个分支
catch用在异常处理中,用来捕捉异常
char基本数据类型之一,字符类型
class
const保留关键字,没有具体含义
continue回到一个块的开始处
default默认,例如,用在switch语句中,表明一个默认的分支
do用在do-while循环结构中
double基本数据类型之一,双精度浮点数类型
else用在条件语句中,表明当条件不成立时的分支
enum枚举
extends表明一个类型是另一个类型的子类型,这里常见的类型有类和接口
final用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变
finally用于处理异常情况,用来声明一个基本肯定会被执行到的语句块
float基本数据类型之一,单精度浮点数类型
for一种循环结构的引导词
goto保留关键字,没有具体含义
if条件语句的引导词
implements表明一个类实现了给定的接口
import表明要访问指定的类或包
instanceof用来测试一个对象是否是指定类型的实例对象
int基本数据类型之一,整数类型
interface接口
long基本数据类型之一,长整数类型
native用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
new用来创建新实例对象
package
private一种访问控制方式:私用模式
protected一种访问控制方式:保护模式
public一种访问控制方式:共用模式
return从成员方法中返回数据
short基本数据类型之一,短整数类型
static表明具有静态属性
strictfp用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范
super表明当前对象的父类型的引用或者父类型的构造方法
switch分支语句结构的引导词
synchronized表明一段代码需要同步执行
this指向当前实例对象的引用
throw抛出一个异常
throws声明在当前定义的成员方法中所有需要抛出的异常
transient声明不用序列化的成员域
try尝试一个可能抛出异常的程序块
void声明当前成员方法没有返回值
volatile表明两个或者多个变量必须同步地发生变化
while用在循环结构中
3.3 常量
3.3.1常量的概念和分类

数学中:
y = x + 8;//数字8是一个整数常数,其值不可以发生改变
b = a + 8.8;//数字8.8是一个小数常数,其值不可以发生改变

数学中的常数对应到java中叫做常量
数学中的常数是有分类的,对应到java中的常量,也有分类,而且java中常量的分类是非常丰富的

1.概念: 在程序执行的过程中,其值不会发生改变的量
2.分类:

(1)整数常量: 100,-200

(2)小数常量: 8.8,-8.8
(3)字符常量:
java中规定,字符常量必须使用单引号引起来,
而且单引号中必须只能有一个(不能没有,也不能有两个及以上)字符

举例:ACE
			A:	'a'						正确的
            B:	''  	''中没有东西		 错误的	不能没有字符
            C:	' '     ''有一个空格		 正确的
            D:	'ab'					错误的		不能有两个字符
            E:	'好'					    正确的
            F:	'女子'				   错误的		不能有两个字符

(4)字符串常量:
java中规定,字符串常量必须使用双引号引起来,
而且双引号中可以有多个(0个,1个,2个,3个…)字符

举例:ABCDEF
			A:	"a"
            B:	""
            C:	" "
            D:	"hello"
            E: 	"好"
            F:  "女子"

(5)布尔常量: 只有两个值,外面没有单引号或者双引号
true: 表示对的,正确的,成立的,肯定的
false: 表示不对的,错正确的,不成立的,否定的
(6)空常量:
null 不能直接打印空常量null

3.4 进制

进制的概念:逢几进一,就是几进制
进制的分类:
十进制: 逢十进一,每位上的数字0-9
二进制: 逢二进一,每位上的数字0-1
八进制: 逢八进一,每位上的数字0-7
十六进制: 逢十六进一,每位上的数字0-9,10(A/a),11(B/b),12(C/c),13(D/d),14(E/e),15(F/f)

4 变量

4.1 变量的概念和分类

1.变量概念: 在程序的执行过程中,其值可以在一定范围内发生改变的量
2.分类(四类八种):
(1)整数
byte 占1个字节 取值范围 -128到127
short 占2个字节 取值范围 正负3万多
int 占4个字节 取值范围 正负21亿 整数常量默认是int类型
long 占8个字节 取值范围 大概19位数字 表示long类型的数据时,建议右键添加字母L/l

(2)小数
float 占4个字节 表示float类型的数据时,建议右键添加字母F/f
虽然float占4个字节,但是由于内部采用科学计数法,取值范围远远大于占用8个字节的long类型
double 占8个字节 小数常量默认是double类型

(3)字符:
char 占2个字节 取值范围0到65535

(4)布尔:
boolean 占1个字节 取值只有true,false

4.2 变量定义格式图解分析

变量的理解
1.变量的本质就是内存中的一块空间,空间的大小由数据类型决定
2.要想找到变量的内存空间,必须给这块空间起个名字,叫做变量名称
3.变量对应的内存空间中必须有数据才可以使用,向变量内存空间中,存储数据的过程叫做初始化/赋值

变量定义格式一(挖一个坑,同时种一个萝卜):
	数据类型 变量名称 = 数据值;//挖一个坑,同时种一个萝卜

变量定义格式二(先挖一个坑,然后种一个萝卜):
	数据类型 变量名称;//先挖一个坑
	变量名称 = 数据值;//然后种一个萝卜

变量定义格式三(挖多个坑,同时向每个坑中种一个萝卜):
	数据类型 变量名称1 = 数据值1,变量名称2 = 数据值2 ... ;

变量定义格式四(先挖多个坑,然后向每个坑中种一个萝卜):
	数据类型 变量名称1 ,变量名称2 ... ;//先挖多个坑
	变量名称1 = 数据值1;//然后向每个坑中种一个萝卜
	变量名称2 = 数据值2;

5 标识符

标识符:
1.概念: 程序中起名字的地方(类名,方法名称,变量名)
2.命名规则: 硬 性 要 求
标识符可以包含 英文字母26个(区分大小写) 、 0-9数字 、 $(美元符号) 和 _(下划线) 。
标识符不能以数字开头。
标识符不能是关键字。

3.命名规范: 软 性 建 议
类名规范:首字母大写,后面每个单词首字母大写(大驼峰式)。
Demo01BianLiang
Demo02BianLiang
Demo03BianLiangNotice
Demo04BiaoShiFu

方法名规范: 首字母小写,后面每个单词首字母大写(小驼峰式)。
	getMin(...){...}
	getMax(...){...}
		
变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。
	num
	value
	maxValue

6 数据类型转换

6.1 自动类型转换

1.自动类型转换概念:
取值范围小的数据或者变量,可以直接赋值给取值范围大的变量

2.特点:
(1)自动完成的,不需要代码的特殊处理
(2)byte/short/char类型数据,只要参加运算会自动转换为int类型
(3)byte、short、char–>int–>long–>float–>double

举例:
有一个byte类型(1个字节)的数字5: 00000101
byte类型自动类型转换成short类型(2个字节):
在数字的左侧补充1个字节的0,由于补充的都是0,所以数字的大小不变,还是5
00000000 00000101

byte类型自动类型转换成int类型(4个字节):
在数字的左侧补充3个字节的0,由于补充的都是0,所以数字的大小不变,还是5
00000000 00000000 00000000 00000101

byte类型自动类型转换成long类型(8个字节):
在数字的左侧补充7个字节的0,由于补充的都是0,所以数字的大小不变,还是5
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000101

6.2 强制类型转换

1.强制类型转换概念:
取值范围大的数据或者变量,不能够直接赋值给取值范围小的变量,
要想赋值,必须进行强制类型转换

2.格式:
转后类型 变量名称 = (转后类型)转前数据/转前变量;

3.**强制类型转换问题:**可能会损失精度

举例:
有一个long类型(8个字节)的数字5:
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000101

long类型强制类型转换成int类型(4个字节):
砍掉左侧的四个字节内容,由于砍掉的内容都是0,不会影响原有数据的大小
00000000 00000000 00000000 00000101

long类型强制类型转换成short类型(2个字节):
砍掉左侧的六个字节内容,由于砍掉的内容都是0,不会影响原有数据的大小
00000000 00000101

long类型强制类型转换成byte类型(1个字节):
砍掉左侧的七个字节内容,由于砍掉的内容都是0,不会影响原有数据的大小
00000101

/*
	强制类型转换
	问题: 可能会损失精度
*/
	public class Demo09Convert {
	public static void main(String[] args){
		/*
			右侧1.5是double类型占8个字节(大萝卜),
			左侧的变量int类型占4个字节(小坑)
			问题:
				大萝卜不能直接放入小坑中
			解决方案: 强制类型转换
		*/
		//int i = 1.5;
		//小数强制类型转换成整数: 直接砍掉小数部分,所以会损失精度
		int j = (int)1.5;
		
		System.out.println(j);//
	}
}
6.3 ASCII码表

计算机是一个二货,只能存储0和1,所以存储到计算机中的所有内容都会转换成0和1进行存储
所以我们在计算机中存储的字符也不例外,也需要把字符转换成0和1进行存储
问题: 如何把字符转换成0和1呢?
解决方案:
使用ASCII编码表: 存储字符和数字对应关系的一张表格

存储字符时:需要查找ASC码表,找到字符对应的数字,将数字转换为二进制数存放到计算机中
‘a’ —> 97 —> 1100001 小写字母对应的int数字是连续的
‘A’ —> 65 —> 1000001 大写字母对应的int数字是连续的
‘0’ —> 48 —> 110000 数字字符对应的int数字是连续的

使用字符时:将对应的二进制数转换为十进制 找到ASC表中对应的字符 显示出来
1100001 —> 97 —> ‘a’
1000001 —> 65 —> ‘A’
110000 —> 48 —> ‘0’

6.4 int类型和char类型的运算原理
public class Demo10Char {
	public static void main(String[] args){
		//定义char类型的变量ch,初始值'A'
		char ch = 'A';
		System.out.println(ch);//'A'
		/*
			byte/short/char类型数据,只要参加运算会自动转换为int类型
			char类型数据和int类型数据一起运算
			会把char类型的数据自动类型转换为int类型
			问题:
				如何把char类型的'A'转换成int类型呢?
			答案:
				查看ASCII码表: 'A' --> 65
			char + int ==> int + int ==> 65 + 1 ==>66
		*/
		System.out.println(ch+1);//66
		/*
			byte/short/char类型数据,只要参加运算会自动转换为int类型
			把ch+1的结果数据66强制类型转换成char类型
			问题:
				如何把int转换为对应的char类型呢?
			答案:
				查看ASCII码表: 	66 --> 'B'
				
		*/
		System.out.println((char)(ch+1));//'B'
		
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值