Java SE 基础知识~流程控制
Java SE 基础知识~流程控制
- 基本知识
- java历史
- java为什么能实现跨平台:
- java程序的运行
- 安装和配置
- 为什么要配置环境变量
- Java程序
- 第一个程序
- 三种打印方式
- 数据类型与运算符
- 变量和类型
- 标识符命名规范
- 查看基本数据类型的范围
- 整型变量 int
- 长整型变量 long
- 双精度浮点型 double
- 单精度浮点型 float
- 短整型变量 short
- 字符类型 char
- 字节类型 byte
- 布尔类型
- 类型转换
- 字符串类型 String
- 变量的作用域
- 常量
- 字面常量
- final修饰的常量
- 原码,反码,补码
- 运算符
- 算术运算符
- ++、--
- 关系运算符
- 逻辑运算符--短路运算符
- 位运算符--两个表达式都要判断
- 移位运算符
- 条件运算符
- 运算符的优先级
- 逻辑控制
- 顺序结构
- 分支结构
- if语句
- 读取字符--简单使用,项目慎用
- switch 语句
- 循环结构
- while循环
- for循环
- do-while循环
- break
- continue
- return
- 输入输出
基本知识
java历史
一. 1991年sun(斯坦福大学实验室)创始人JamesGosling:高斯林 提出jdk1.1.
二.计算机功能:
1.存储数据
2.运算(算术、关系比较、逻辑、位),通过程序来运算
三.程序演变:
1.机器编程:(硬件方式跳线帽)
2.低级编程语言:汇编
3.中级编程语言
C语言(面向过程----函数与函数直接的相互调用)
Basic
Pascal
解决中级难度业务逻辑。高级复杂问题,程序规模几何级增加。
平台相关的高依赖性。(软件平台+硬件平台)
应用层app
操作系统os(windows、linux、unix、ios、Android、……)
内核kennel
硬件hardware(pc,server,ipad,fax,card……)
4.高级编程语言:
Java
C++
C#(ASP.NET)
Python(ai)
Go
……
java为什么能实现跨平台:
Write once only once,write once run anywhere
1.Java核心技术JVM(java visual machine)是java虚拟机技术。
2.保障java程序运行的一个基本环境(jre—java runtime environment)
JVM: java虚拟机,把对应的字节码文件拉取过来执行,实际上是一个软件,用c/c++写的,用软件实现了一个类似硬件的东西
JDK::java开发者工具
JRE: java运行环境 三者关系**JDK(JRE(JVM))**只要有jdk和.class文件,就能运行,即一次编译,到处运行
类比:
植物生长土壤(jvm:植物生长所有的微量元素集合)器皿(jvm)
java程序的运行
1.编译:
在windows环境中,打开命令窗口,切换到java文件的目录,使用 javac 命令,执行 javac xxx.java(源代码文件) 把.java文件编译成.class文件(字节码文件。包含了当前类中的信息,是一个二进制文件,源代码中一个类对应一个字节码文件)
2.装载字节码:
编译好的.class文件交给 JVM 执行,即使用java命令,执行java xxx(.class文件的名称,不带后缀)。java命令将会启动 JVM,并将后面的参数作为初始化类,通过 JVM 内的类加载器将字节码文件装载到内存中。
3.校验字节码:
类的加载是通过类加载器进行的,加载完后,先由字节码校验器负责检查那些无法执行的明显有破坏性的操作。除了系统类之外,其他类都要被校验。
校验器执行的一些检查:
变量要在使用前初始化
方法调用与对象引用类型之间要匹配
访问私有数据和方法的规则没有被违反
对本地变量的访问都在运行的堆栈内
运行时堆栈没有溢出
如果这些检查没有通过,类最终不会被加载完成。
4、解释字节码
JVM 把每一条要执行的字节码交给解释器,翻译成对应的机器语言,最终由操作系统执行。
JVM 解释执行字节码文件就是 JVM 操作 Java 解释器进行解释执行字节码文件的过程。
安装和配置
1.安装JDK:java开发者工具
2.配置环境变量
path:
classpath:
3.安装集成开发环境如(IDEA、eclipse等)
为什么要配置环境变量
让用户可以在任意路径下运行java_home目录下bin中的应用程序(javac,java……)
Java程序
1.程序模式:
Applet:嵌入到网页中的小应用程序;
Application:基于控制台的应用程序,有主入口函数main;
Web:基于web容器的服务程序;
Javaee:基于web容器大型企业级的应用程序。
2.程序类别:
J2se:java 2 platform standard edtion是java标准开发版
J2ee:java 2 platform enterprise edition是java企业开发版
J2me:java 2 platform mobile edtition是java移动开发版
Jcard:java card是java芯片开发
第一个程序
public class Helloword{pubilc static void main(String[] args){System.out.println("hello");}}
1.public :访问修饰限定符:任意的空间都可以访问 ** 文件名和类名相同**
2.class:关键字,用来定义一个类
3.Helloword:类名
public static void main(String[] args): java当中的main函数(方法),是程序的入口
public: 入口函数的作用域,公有的
static: 静态的,该函数会直接被调用动cpu的缓存中(register)
void: 任意类型,表示主入口函数执行完毕后,不向外界反回数据。
String[] args:形式参数:是一个数组。
System.out.println():相当于C语言的打印函数printf
三种打印方式
System.out.println("123456");//打印换行System.out.print("123456");//打印不换行System.out.printf("%d\n",123456);和c语言相同
数据类型与运算符
变量和类型
1.变量 : 是程序运行时可改变的量,开辟一块内存空间来存储数据,是存储空间的表示,是一个程序的基本组成单位。
2.类型: 不同种类的变量
变量要初始化否者会报错
标识符命名规范
1.变量的命名: 小驼峰,数字 字母 下划线 美元符号,开头不能是数字
2.包名: 小写
3.类名 : 多单词时,每个单词首字母大写
4.方法名: 第一个单词首字母小写,后面单词首字母大写
5.常量名: 所有字母大写
查看基本数据类型的范围
/*** @param args* 使用基本数据类型的包装类查看其位数和取值范围*/public static void main(String[] args) {System.out.println("*************************************");System.out.println("int整型位数:" + Integer.SIZE);System.out.println("int整型范围: " + Integer.MIN_VALUE + "~" + Integer.MAX_VALUE);System.out.println("*************************************");System.out.println("long长整型位数:" + Long.SIZE);System.out.println("long长整型范围: " + Long.MIN_VALUE + "~" + Long.MAX_VALUE);System.out.println("*************************************");System.out.println("byte字节位数:" + Byte.SIZE);System.out.println("byte字节范围: " + Byte.MIN_VALUE + "~" + Byte.MAX_VALUE);System.out.println("*************************************");System.out.println("short短整型位数:" + Short.SIZE);System.out.println("short短整型范围: " + Short.MIN_VALUE + "~" + Short.MAX_VALUE);System.out.println("*************************************");System.out.println("double双精度浮点型位数:" + Double.SIZE);System.out.println("double双精度浮点型范围: " + Double.MIN_VALUE + "~" + Double.MAX_VALUE);System.out.println("*************************************");System.out.println("float单精度浮点型数:" + Float.SIZE);System.out.println("float单精度浮点型范围: " + Float.MIN_VALUE + "~" + Float.MAX_VALUE);}
}
整型变量 int
1.大小:无论什么操作系统都是 4字节,统一为有符号型,第一位为符号位。
取值范围-2^31~ 2^31-1 。
长整型变量 long
1.大小:8字节,没有longlong类型
long num = 10L;//可加可不加L或者l 建议加
双精度浮点型 double
浮点数在计算机中的表示为:符号位+指数位+尾数位。
尾数位可能丢失,造成精度损失。
1.大小: 8字节
2.代码:
代码一:
int a = 1;int b = 2;System.out.println(a/b);// 结果 0,int 除以 int 的值仍然是 int(会直接舍弃小数部分)
代码二:
double a = 1.0;double b = 2.0;System.out.println(a/b);//输出结果 0.5
代码三:
double a = 1.1;System.out.println(a*a);//输出结果 1.2100000000000002,这是由于float,double是不精确计算的
单精度浮点型 float
1.大小:4字节
float num=12.5f;//不加F或者f,系统会默认12.5为double ,将报错。
float精确到小数后六位,由于范围小,建议使用double.
java中尽量使用double 精度高。
短整型变量 short
1.大小:2字节,范围较小,不建议使用
short num=10;
char类型的本质是数字代表字符
字符类型 char
1.大小:2字节
char ch='a';System.out.println(ch);char t ='呵';System.out.println(t);//char能存储一个汉字,一个汉字在Unicode中占两个字节大小System.out.println("char位数:" + Character.SIZE);System.out.println("Character.MIN_VALUE = " + (int)Character.MIN_VALUE);System.out.println("Character.MAX_VALUE = " + (int)Character.MAX_VALUE);
char类型的本质是数字代表字符,输出的是Unicode对应的字符。
所以char类型能进行运算。
C语言中char为1个字节
字节类型 byte
1.大小:1字节
byte value = 0;
布尔类型
1.大小:无规定。1 个字节、4 个字节都是有可能的。是运算效率和存储空间之间的博弈,两者都非常的重要。
boolean a=ture;
值只能是true 和false 不能和其他类型相互转换
类型转换
1.自动转换: 低精度向高精度可以自动转换
byte–short–long–int–float–double
char和int等整型数据之间能相互转换
int num1 = 'a';System.out.println(num1);
在编译的时候才知道变量内存储的值
代码一:
int a=10;long b=a;System.out.println(b);//int 到long,是低字节到高字节运行正常long m=10;int n=m;//long 到int,是高字节字节到低字节报错
说明了在编译的时候才知道变量内存储的值
2.强制类型转换:
long m=100l;int n=(int)m;
强制类型 ,有一定的风险
boolean类型不能强制转换
cpu在运行小于4个字节的类型时,为了提升效率会提升为int类型。
byte a=1;byte b=2;byte c=a+b;System.out.println(c);//报错byte c=1+2;//不报错,1,2是字面常量相当于c=3;
cpu在运行小于4个字节的类型时,会提升为int类型,为了提升效率
字符串类型 String
String str = " hello";System.out.println(str);//注意问题System.out.println("hello"+"world");//+是拼接System.out.println("hello"+10+20);//其他数据类型和字符串拼接,结果就是一个字符串hello1020System.out.println(10+20+"hello");//30helloSystem.out.println(10+""+20+"hello");//""是空字符串1020helloSystem.out.println("a="+10+",b="+20);//a=10,b=20
一.基本数据类型和String类型的转换
1.基本数据类型和String类型转换:
+“”(加双引号)
Integer.toString(num)
String.valueOf(num)
2.String类型转换为基本数据类型:调用基本类型的parse()方法。如:
public static void main(String[] args) {//1.用+""拼接 基本数据类型转Stringint num1=10;long num2=11l;short num3=12;byte num4=13;double num5=14.0;float num6=15.0f;String str="hello";System.out.println(num1+"");System.out.println(num2+"");System.out.println(num3+"");System.out.println(num4+"");System.out.println(num5+"");System.out.println(num6+"");//2.Integer.toString(num),String.valueOf(num)int a = 10;String ret = String.valueOf(a);//valueOf方法String ret1 = Integer.toString(a);//Integer.toString//String装换为基本数据类型,包装类的parse方法String str = "123.5";int d1 = Integer.parseInt(str);long d2 = Long.parseLong(str);short d3 = Short.parseShort(str);byte d4 = Byte.parseByte(str);double d5 = Double.parseDouble(str);float d6 = Float.parseFloat(str);
}
二.字符串的比较equal()方法:
1.比较地址 :
str1 和str2 是同一个地址,只是地址的表示不同
//1.比较地址String str1 = "hello";String str2 = "hello";System.out.println(str1==str2);//结果为true
2.比较内容是否相同: equals()方法
String str1 = "hello";String str2 = new String("hello");System.out.println(str2.equals(str1)); //结果为true
变量的作用域
局部变量:必须赋值
全局变量:不需要赋值,有初始值
public class Test5 {static int a;//全局变量:不需要赋值,有初始值public static void main(String[] args) {System.out.println(a+5);//结果为5int b;//局部变量System.out.println(b+5);//报错}
}
{int a =10;//在一个代码块内是一个局部变量System.out.println(a);}System.out.println(a);//在代码块外没有a变量,编译报错找不到变量名
常量
字面常量
10 :int 字面值常量(十进制)
010 :int 字面值常量(八进制) 由数字 0 开头. 010 也就是十进制的 8
0x10 :int 字面值常量(十六进制) 由数字 0x 开头. 0x10 也就是十进制的 16
10L :long 字面值常量. 也可以写作 10l (小写的L)
1.0 :double 字面值常量. 也可以写作 1.0d 或者 1.0D
1.5e2 : double 字面值常量. 科学计数法表示. 相当于 1.5 * 10^2
1.0f :float 字面值常量, 也可以写作 1.0F
true :boolen 字面值常量, 同样的还有 false
‘a’ :char 字面值常量, 单引号中只能有一个字符
“abc” :String 字面值常量, 双引号中可以有多个字符
final修饰的常量
只能赋值一次
final int a = 10;a =20;//报错,无法为最终变量a分配值。
和C语言中的const类似
原码,反码,补码
1.计算机中数以补码形式存储,第一位为符号位,1表示负,0表示正
2.正数的原码、补码、反码相同
如3的3码均为0000 0011
3.负数的原码第一位为1,其他与正数相同
如-3的原码为1000 0011
4.负数的反码:符号位不变,其他位按位取反
如-3的反码为1111 1100
5.负数的补码:其反码加1
-如3的补码:1111 1100+1为1111 1101
已知负数的补码,求负数:
补码-1=反码,反码按位取反
已知负数,求负数的补码
负数原码除了符号位,按位取反
运算符
算术运算符
四则运算:+、-、*、/、%(取余)
代码一:0不能作为除数
int a=1;int b=0;System.out.println(a/b);//
报错.ArithmeticException: / by zero
代码二:取余
本质:a%b =a-a/b*b;
System.out.println(10%3);// 1 3个3+1得10System.out.println(-10%3);//-1 3个-3+(-1)得-10System.out.println(10%-3);//1 -3个-3+1得-10System.out.println(-10%-3);//-1 -3个3+(-1)得-10
代码三:复合运算符会自动类型转换
short a=10;a=a+10;//报错10 是int类型a+=10;//不报错,会自动类型转换
++、–
//独立时是一样的
i++;
++i;
//不独立时
a=++i;//先加加,再赋值
b=i++;//先赋值,再加加
关系运算符
== != < > <= >=
使用关系运算符,其结果是boolean类型
逻辑运算符–短路运算符
&& || !
短路求值
表达式1&&表达式2:表达式1 为假就不会执行表达式2了
表达式1||表达式2:表达式1为真就不会进行表达式2了
System.out.println(10 > 20 && 10 / 0 == 0);//结果位false//0 不能做除数,但是10 > 20为假就不会执行10 / 0 == 0,所以结果为false。
位运算符–两个表达式都要判断
- & (按位与):
- | (按位或):
- ~(按位取反):
- ^(按位异或):相同为0,相异为1
移位运算符
- <<(左移)0000 1011(11)<<1,结果000 10110 (22)左移一位相当于乘2
(右移)补符号位 0000 1011 (11)>>1,结果00000 101(5)右移一位相当于除以二
- 无符号右移>>>(不管符号为1,0只补0)
条件运算符
表达式1 ? 表达式2 : 表达式3
表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值;
表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值;
运算符的优先级
不用记忆
逻辑控制
顺序结构
一步一步往下顺序执行
分支结构
if语句
int n=10;if (n%2==0) {//黄色是警告,n%10=0,系统认为没必要比较System.out.println("偶数");}else {System.out.println("奇数");}
读取字符–简单使用,项目慎用
先读字符串,再读数值
Scanner scanner= new Scanner(System.in);//读取一个字符串String str=scanner.nextLine();//读取一个整型数int n=scanner.nextInt();//读取一个整型数scanner.close();//有没有都无所谓
String str1=scanner.next();//一个字符串,遇到空格就会读取结束
判断是否是闰年
//能被4整除但不能被100整除或者能被400整除的年份int year=2000;if(year%4==0&&year%100!=0||year%400==0){System.out.println(year+"是闰年");}else{System.out.println(year+"不是闰年");}
switch 语句
switch(整数|枚举|字符|字符串){case 内容1 : {内容满足时执行语句;[break;]}case 内容2 : {内容满足时执行语句;[break;]}...default:{内容都不满足时执行语句;[break;]}}
面试题:不能做switch参数的类型
long,float,double,boolean
循环结构
while循环
//求1到5的阶乘的和int i=1;int sum=0;while (i<=5){int j=1;int ret=1;while(j<=i){ret=ret*j;j++;}sum=sum+ret;i++;}System.out.println(sum);
for循环
代码一:
//死循环for(;;){ }int i=1;for(;i==1;){//只要中间变量为真就执行 }
代码二:
int sum = 0;int a = 1;for(int i = 1; i <= 5; i++){a = a * i;sum = sum + a;}System.out.println("1~5的阶乘之和为:" + sum);
do-while循环
do{
循环语句;
}while(循环条件);//分号不能省略
//求1~10的和int i=1;int sum=0;do {sum=sum+i;//循环体至少会执行一次i++;}while (i<=10);System.out.println(sum);}
循环不加大括号只会执行下面一句,不会执行循环体
break
结束的最近循环,可以在switch中
continue
跳过该次循环,执行下一次循环,仍然在循环中。
int i=1;while (i<=10){if (i%3==0){i++;continue;System.out.println(i);//报错,continue后的代码不执行了}}}
return
表示跳出方法,跳出main 那么程序结束
goto是一个保留字:随时可能启用
输入输出
1.获取字符串的第一个字符
String s = "demo";char firstCharacter = s.charAt(0);//字符串转字符String s = "好";char firstCharacter = s.charAt(0);
Java SE 基础知识~流程控制相关推荐
- Java SE 基础知识
Java SE 基础知识 1 2 @(Notes)[J2SE, Notes] VICTORY LOVES PREPARATION. 特别说明: 该文档在马克飞象查阅最佳: 本部分知识还在迭代中,欢迎补 ...
- Java SE 基础知识体系梳理
## Java SE 基础知识体系梳理 ----------day01------------- (1)计算机的体系结构 (2)Java语言的概述 (3)开发环境的搭建和使用 1.计算机的体系结构(常 ...
- JAVA SE基础知识总结
JAVA基础篇 1_JAVA语言概述 1.1 JAVA的总体概述 1.2 JAVA语言概述 1.2.1 基础常识 1.2.2 计算机语言的发展迭代史 1.2.3 Java语言版本迭代概述 1.2.4 ...
- Java复习总结(二)Java SE基础知识
Java SE面试题 目录 Java SE基础 基本语法 数据类型 关键字 面向对象 集合 集合类概述 Collection接口 进阶 线程 锁 JDK 反射 JVM GC io操作和NIO,AIO ...
- Java SE 基础知识(一)
一.基础知识 1. Java SE : Java Standard Edition Java ME : Java Micro Edition Java EE : Java Enterprise Edi ...
- Java SE基础知识(二)--整数的运算符
Java SE 是什么,包括哪些内容(二)? 本文内容参考自Java8标准 一.代码运行机制相关的内容: 1.Java中的类型分类("你编程时能使用的类型全部在这里了"): ⑴.J ...
- Java SE 基础知识汇总
目录 一.Java概述 1.1 Java语言背景 1.2 Java语言的三个版本 1.3 Java语言的跨平台原理 1.4 JRE和JDK 1.5 DOS命令 二.Java环境搭建 2.1 环境变量的 ...
- python:基础知识—流程控制—函数与模块—数据结构—类与GUI和Turtle—异常处理与文件,概括全书(上万字最详细版)
这里是一张夜景,给大家放松一下. !!无锡南长街 文章目录 模块一:基础知识 1.python语言 2.常见数字类型 3.字符串 4.数字类型转换 5.标识符命名 6.常见关键字 7.运算符与表达式 ...
- JAVA语法基础之流程控制
在进行程序设计的时候,我们会经常进行逻辑判断,根据不同的结果做不同的事,或者重复做某件事,我们对类似这样的工作称为流程控制.在Java中,流程控制分为两大类:选择和循环.下面就依次来介绍这两类. 一. ...
- java 03_Java基础03—流程控制
流程控制 参考资料:<Java从入门到精通>/明日科技编著. 4版. 北京:清华大学出版社,2016 一.复合语句 Java的复合语句由"{"开始,"}&qu ...
最新文章
- 98年建模a题论文_2019年第九届APMCM亚太地区大学生数学建模竞赛 A 题(中英版)...
- 记一次OOM问题排查过程
- python分离文件名和路径_python 分离文件名和路径以及分离文件名和后缀的方法...
- http协议以及防盗链技术
- xlsx怎么设置行高列宽_7米面宽的3栋别墅,两款复式进深达到18米,第一款主体只要16万...
- 获取程序进程并杀死该进程集
- LAMP_PHP配置
- matlAB gui 变成c,matlab改变GUI和figure左上角图标的方法,并生成exe文件
- 20.6. TeXstudio(LaTeX 编辑器)
- 强大的USB协议分析工具
- 51单片机c语言音乐盒设计,基于51单片机的音乐盒课程设计开题报告精品
- Luogu_P4556 雨天的尾巴【题解】树上差分 线段树合并
- 【2022年】安装vm虚拟机unbuntu 服务器版
- solr使用 备忘录 草稿
- 万洲金业:投资现货黄金的收益与风险如何平衡?
- Web 中的“选区”和“光标”需求实现
- guava实现MD5加密
- 怎么批量提取多个 Excel 文档中的图片
- 关于单边账的解释及解决(收单行业)
- 【ctf学习】RSA共模攻击
热门文章
- spring cloud 全家桶 简单介绍
- 无线路由器的dhcp服务器如何设置,无线路由器怎么设置dhcp服务器
- HDU 6208 The Dominator of Strings [AC自动机]
- Anaconda创建Pytorch虚拟环境(排坑详细)
- 手机连接笔记本开启的WiFi一直显示正在获取IP中
- 固态硬盘是什么接口_笔记本固态硬盘的接口有哪些?来学习下笔记本SSD小知识...
- Python OOP 项目实践:烤地瓜,搬家具
- EBU5502 Database Coursework Specifications
- 90后小伙自己开发APP年赚10亿,自己开发APP需要什么工具
- 优化计算机组策略,7种优化技巧优化Windows 10系统 提高电脑性能