关键词:
文章目录
Java概述与环境搭建
Java历史
sun(Stanford University Network),1995年推出Java面向对象的程序设计语言
2014年由Oracle发布Java8.0(较为主流)
Java之父:詹姆斯·高斯林
oracle甲骨文公司,oracle数据库、MySQL数据库都是旗下产品
Java语言特点
- 面向对象(贴近人类思维模式)
- 简单(相对于c、c++、c#,不易造成内存溢出,减少代码量,代码可读性强)
- 跨平台(windows、linux(读:里讷克斯/'linэks/)、macos、unix)
Java的jvm,能够帮助Java程序可以支持不同的平台
Java执行机制
Java程序编译后生成.class字节码文件,通过jvm在不同平台上给予不同的解释,可以满足很多地方同时运行
-
编译执行:c、c++
编译的结果直接交给cpu运行,效率极高,不能跨平台
-
解释执行:Java、c#、PHP、python
编译结果需要通过解释器解释之后再交给cpu执行,效率较低
Java通过JIT技术达到类和c++相近的效率
JVM
Java Virtual Machine
使用软件在不同的操作系统中,模拟相同的环境
JRE
Java Runtime Environment
包含jvm和解释器,完整的Java运行环境
JDK
Java Development Kit
包含jre,类库,开发工具包(编译器+调试工具)
安装jdk
下载jdk8
安装路径尽量不要选择c盘,安装路径一定不要有中文
jdk文件
-
bin目录
binary二进制目录
都是二进制可以执行文件,包含.exe文件
java.exe,javac.exe,javap.exe,javadoc.exe
-
db
jdk自带小型数据库(用处不大)
-
include
系统接口目录
-
jre
java运行环境,java runtime environment
-
lib
资源库目录,存在一些.jar文件,jar包
-
src.zip
java的完整源代码
环境变量配置
-
win+e打开资源管理器
我的电脑-属性-高级系统设置-高级-环境变量
用户变量只针对当前用户,系统变量是全部
-
设置变量
系统变量修改:
新建:
变量名:JAVA_HOME
变量值:D:\\Program Files\\Java\\jdk1.8.0_211新建:
变量名:CLASS_PATH
变量值:.;%JAVA_HOME%\\lib;%JAVA_HOME%\\lib\\tools.jar修改:
变量名:path
添加内容:
;%JAVA_HOME%\\bin;%JAVA_HOME%\\jre\\bin;注意:标点符号为英文半角
-
切换jdk版本
Java无法做到python,同时拥有两个版本,环境只能有一套
切换时直接更改环境变量设置,也就是JAVA_HOME
设置环境变量时这么做也是方便修改
本机java位置:
8:E:\\Program\\Java
14:C:\\Program Files\\Java\\jdk-14.0.2
-
安装完毕后,测试
java --version
即为设置成功
乱码问题解决
安装完毕后,发现输入命令会有乱码,可能有电脑编码问题有关,之前flask运行不起来,更改了电脑的编码
解决方法:
设置一个系统环境变量
JAVA_TOOL_OPTIONS
-Dfile.encoding=UTF-8
退出cmd,重新进入
问题解决
dos命令
- rd删除目录
- del直接删除文件
- echo输出
- cls清理屏幕
- exit退出
基本规范
Java一切皆是对象
简单Java代码
FirstJava.java
class FirstJava
public static void main(String[] args)
System.out.println("welcome to java world!!!");
保存文件名与类名相同
注意大小写及拼写问题
编译运行
javac 源文件名.java
编译之后会生成一个FirstJava.class文件
.class字节码文件,二进制文件,需要借助jvm执行解释
默认编译成功不会有输出,和linux一样没有错误就是正确,因为更改了字符所以有一行字符的提示
执行
注释
单行注释
// 单行注释
多行注释
/* 多行注释 */
文档注释
/** 文档注释 */
语法规则
- 可以有字母,数字,_,$组成,不能以数字开头
- 不能与关键字,保留字重名
参考AJCG阿里巴巴Java开发规约
标识符
类名,方法名,变量名
AJCG规范
-
标识符可以使用的字符范围,英文字母(A-Z,a-Z)数字(0-9)唯一可以使用的标点符号_
-
标识符要求必须英文字母开头
-
标识符严格区分大小写
-
标识符没有严格的长度限制,但是会根据实际需求来限制标识符的长度
-
标识符需要做到见名知意,动宾结构,如getStudentAge
-
使用驼峰命名法和下划线命名法
小驼峰【适用于变量名、方法名】:多个单词构成标识符时,第一个单词首字母小写,之后的单词首字母大写
大驼峰【适用于类名、接口名】:标识符所有的单词首字母大写
下划线:所有字母都是大写的情况下,为了区分单词的间隔,使用下划线命名法,如JAVA_HOME
-
已经被Java使用的关键字和保留字不得用于自定义标识符使用(也就是在编译器中变色的的不能用)
变量类型
Java是强类型语言,变量的类型必须与数据的类型一致
注意:变量未定义不能使用,未赋值不能使用(只能先赋值)
声明方式
三种声明方式
-
先声明,在赋值
数据结构 变量名;
变量名 = 值;
-
声明并赋值(推荐)
数据结构 变量名 = 值;
-
多个同类型变量的声明与赋值(不推荐)
数据类型 变量1,变量2 = 值1,变量3,变量4 = 值2;
基本数据类型
Java有2种类型,8种基本数据类型
整型
小数、浮点数
布尔类型
字符类型
问题:数据类型不兼容
- float
/*浮点型变量*/
/*float floatNumber = 3.14; 会报错*/
double doubleNumber = 0.618;
/*浮点型数据展示*/
System.out.println(floatNumber);
System.out.println(doubleNumber);
计算机为了保证数据的精度,同时为了数据后期的延展性,默认为double类型,double占用的内存空间是8字节,而float是4个字节
解决方法:在float小数后面加上大写F
float floatNumber = 3.14F;
- long
long类型的数据需要在常量后加上一个大写的L,明确告知计算机这里使用的是一个long类型的数据
赋值案例
class VariableTest
public static void main(String[] args)
/*整形数据*/
byte byteNumber = 10;
short shortNumber = 20;
int intNumber = 20;
long longNumber = 40L;
/*整形数据展示*/
System.out.println(byteNumber);
System.out.println(shortNumber);
System.out.println(intNumber);
System.out.println(longNumber);
/*浮点型变量*/
/*float floatNumber = 3.14; 会报错*/
float floatNumber = 3.14F;
double doubleNumber = 0.618;
/*浮点型数据展示*/
System.out.println(floatNumber);
System.out.println(doubleNumber);
/*
字符型变量
字符常量:单引号包含的单个字符元素'a'
*/
char ch1 = 'A';
char ch2 = '中';
System.out.println(ch1);
System.out.println(ch2);
/*布尔类型*/
boolean ret1 = true;
boolean ret2 = false;
System.out.println(ret1);
System.out.println(ret2);
/*
int num;
System.out.println(num);
会报错,java在没有赋值的情况下,不能使用
*/
字符型常量
字符常量:单引号包含的单个字符元素 如:‘a’
使用要求:
有且只允许使用字符本身,如’a’,‘A’,不建议使用’97’,‘65’
优势:
- 阅读型好
- 保证数据类型一致化
- 减少了没有必要的歧义
转义字符
\\ 反斜杠
将带有特定含义字符转换为无意义字符,或者将无意义字符,转换成带有一定含义字符
只能转义后边的一个字符
\\'
\\"
\\n 换行
\\t tab
\\\\ 一个反斜杠
\\\\\\\\ 两个反斜杠
class Demo3
public static void main(String[] args)
char ch = '\\'';
System.out.println(ch);
System.out.println("test\\ttest");
System.out.println("test\\ntest");
System.out.println("test\\ntest");
System.out.println("test\\\\test");
字符串
羊肉和羊肉串的关系
字符串特定标记
" "英文双引号包含的所有内容都是字符串本身,并且是一个常量,不可以修改
String
类型转换
自动类型转换:
- 小变大
- 两种类型相互兼容
- 目标类型大于源类型
如:
short s = 123;
int i = s;
强制类型转换:
- 大变小
- 两种类型相互兼容
- 目标类型小于源类型
如:
short s = 123;
byte b = (byte) s;
不推荐使用:会导致数据精度的丢失
强制类型转换在面向对象开发中,可以用来操作对象
运算符
算数运算符
+ - * / % ()
+= -= *= /= %=
- 从左到右计算
- 先乘除后加减
- 右括号先处理括号里面的内容
- 除数不能为0
关系运算符
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于
结果是:true,false
逻辑运算符
&& 与,同真为真,有假即假
|| 或,有真即真,同假为假
! 非,取反
自增自减运算符
++ 自增
-- 自减
class Demo4
public static void main(String[] args)
int num = 10;
System.out.println("num++ : " + num++);
System.out.println("num : " + num);
System.out.println("++num : " + ++num);
System.out.println("num : " + num);
++在变量之后(num++),首先执行变量所在行语句,再执行自增加1操作
++在变量之前,首先执行变量自增加1操作,再执行变量所在语句
注意:
- 自增自减运算符有且只能操作变量
- 自增自减运算符独立存在,就是对变量操作,减少歧义
短路(断路)原则
class Demo4
public static void main(String[] args)
int num = 10;
boolean ret = 10 > 15 && num++ >= 10;
System.out.println(ret);
System.out.println(num);
int num1 = 10;
boolean ret1 = 10 > 5 || ++num1 > 5;
System.out.println(ret1);
System.out.println(num1);
逻辑与断路:当第一个条件为false,整个表达式结果为false,不在判断之后的条件
逻辑或短路:当第一个条件为true时,整个表达式结果为true,不在判断之后的条件
输入
控制台获取输入
-
导包
import java.util.Scanner
-
获取Scanner的变量,扫描器的一个变量
Scanner sc = new Scanner(System.in)
-
使用Scanner其中的方法
获取int类型数据 sc.next.Int()
获取double类型数据 sc.nextDouble()
获取String类型字符串数据 sc.next();sc.nextLine()
获取一个char类型字符数据 sc.next().charAt(0),sc.nextLine().charAt(0)
import java.util.Scanner;
class Demo4
public static void main(String[] args)
int num = 0;
Scanner sc = new Scanner(System.in);
System.out.println("please input a integer");
num = sc.nextInt();
System.out.println("num:" + num);
import java.util.Scanner;
class Demo4
public static void main(String[] args)
Scanner sc = new Scanner(System.in);
char ch = '\\0';
System.out.println("please input a char");
ch = sc.nextLine().charAt(0);
System.out.print("ch:" + ch);
多个字符也只能接受一个字符
选择结构和分支结构
if分支
if ( /*判断条件*/ )
// 执行体
if ( /*判断条件*/ )
// 执行体
else
// 执行体
if ( /*判断条件*/ )
// 执行体
else if ( /*判断条件*/ )
// 执行体
else
// 执行体
分数范围判断案例
import java.util.Scanner;
class Demo4
public static void main (String[] args)
float score = 0.0F;
System.out.println("请输入分数值:");
Scanner sc = new Scanner(System.in);
score = sc.nextFloat();
if (score < 0 || score > 100)
System.out.println("范围不正确");
System.exit(0);
else if (score >= 90)
System.out.println("优秀");
else if (score >= 80)
System.out.println("良好");
else if (score >= 70)
System.out.println("中等");
else if (score >= 60)
System.out.println("及格");
else
System.out.println("不及格");
switch
switch (变量|表达式)
case 值1:
逻辑代码1;
break;
case 值2:
逻辑代码2;
break;
case 值n:
逻辑代码n;
break;
default:
为满足时的逻辑代码;
break;
switch语句可判断的变量类型有byte,short,int,char,String(jdk7+)
注意:break必须要加,标签值(case后边的值)不能重复
条件运算符/三目运算符
条件判断?true:false
局部变量
存在与代码块中的变量
class Demo5
public static void main (String[] args)
int num = 10;
if (num > 5)
int num2 = 10;
System.out.println(num);
System.out.println(num2);
编译报错,num2不会存在
num2是一个局部变量,自能在if大括号(作用域)内使用
注意:
- 局部变量有且只能在当前所处的代码块中使用,超出当前代码块范围无效
- 在作用域范围以内,任何的地方可以直接使用对应的变量
- 在一个变量的作用域范围以内,不能重定义同名变量,会报错
- 局部变量未赋值不能使用
循环结构
while循环
while (/*循环条件*/)
// 循环体
do-while
do
执行循环语句
while (条件表达式);
for
for (初始条件; 循环检测条件; 循环后更新计数器)
// 执行语句
如:
for (int i=1; i<=100; i++)
sum = sum + i;
break/continue
break
会跳出当前循环,也就是整个循环都不会执行了
continue
则是提前结束本次循环,直接继续执行下次循环
函数/方法
public static void main(String[] args)
// 方法体
// public static后续内容补充
// void表示没有返回值
// main表示方法名
// (String[] args)形参列表
public static ReturnType MethodName (Arguments)
Method Body
无参数无返回值方法
class Demo5
public static void main (String[] args)
bbq();
bbq();
bbq();
public static void bbq ()
System.out.println("BBQ Method");
有参数无返回值方法
单个参数
需求:展示一个int类型数据
class Demo6
public static void main(String[] args)
// 带有参数的方法一定要提供对应的数据类型,实际参数
printIntNum(10);
/**
* 文档注释格式
* 打印一个int类型数据
*
* @param num 要求用户传入一个int类型数据
*/
public static void printIntNum(int num)
System.out.println("num:" + num);
调用时注意事项:
- 带有参数的方法一定要提供对应的数据类型,实际参数
- 调用带有参数的方法,给与实际参数是,数据类型应该一致
多个参数
形式参数列表:两个int类型数据
class Demo6
public static void main(String[] args)
// 带有参数的方法一定要提供对应的数据类型,实际参数
printIntNum(10);
printSumOfTwoNum(10, 5);
/**
* 文档注释格式
* 打印一个int类型数据
*
* @param num 要求用户传入一个int类型数据
*/
public static void printIntNum(int num)
System.out.println("num:" + num);
/**
* 打印两个参数之和
* @param num1
* @param num2
*/
public static void printSumOfTwoNum(int num1,int num2)
System.out.println("sum:" + (num1+num2));
- 形参与实参个数与数据类型必须一致
无参数有返回值方法
class Demo6
尚硅谷java基础笔记——2.java基本语法(上)·变量和运算符
2.1关键字和保留字2.1.1关键字定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)特点:关键字中所有字母都为小写2.1.2保留字定义:现有Java版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要... 查看详情
java基础语法
TableofContents1.变量与运算符1.1关键字和保留字1.1.1关键字(keyword)的定义和特点:1.1.2保留字(reservedword):1.2标识符1.2.2定义合法标识符规则:1.2.3Java中的名称命名规范:1.3变量1.3.1基本数据类型1.3.2基本数据类型变量间的转换1.3.3基本数据... 查看详情
2.java学习_基础知识(标识符常量变量运算符)
标识符定义在程序中我们自定义的一些名称在编程的过程中,经常需要在程序中定义一些符号来标记一些名称,如包名、类名、方法名、参数名、变量名,这些符号被称为标识符。 组成元素英文大小写字母数字0~9下划线_和美元... 查看详情
go-golang学习总结笔记
...调试代码规范变量和常量数据类型基本数据类型派生类型运算符流程控制分支和循环函数(引用类型)面向对象编程错误和异常包go命令数据结构和算法链表栈和队列查找排序提高函数式编程生成器与迭代器标准库输入输... 查看详情
java基础02数据类型运算符分支结构
内容: (1)数据类型 (2)运算符 (3)分支结构 1.数据类型 java语言中的基本数据类型:byte、short、int、long、float、double、boolean、char。 1.1布尔类型 在java语言中描述真假信息的类型有:boolean。 该类型变... 查看详情
零基础快速学java韩顺平笔记整理(持续更新)
...f09;、与String类型的转换5【零基础快速学Java】韩顺平p62-80运算符:算数、关系、逻辑、赋值、三元和优先级6【零基础快速学Java】韩顺平p82-86标识符的命名规则和规范、关键字、保留字、键盘输入7【零基础快速学Java】韩顺平... 查看详情
java学习回顾总结(代码片段)
...加:(目标类型)强制类型转换会丢失精度。4.表达式及运算符1.算术运算符+、-、*、/、%、++、--注意++在变量前,先对变量做自增操作,然后参与其他操作。++在变量后,变量先参与其他运算,然后做自增操作。--规则同++。2.赋... 查看详情
python100天学习笔记day24js基本语法(代码片段)
...值简单数据类型和复杂数据类型变量的命名规则表达式和运算符赋值运算符算术运算符比较运算符逻辑运算符分支结构if...else...switch...cas...default...循环结构for循环while循环do...while循环数组创建数组操作数组中的元素函数声明函... 查看详情
lua学习笔记(代码片段)
...类型二:function6、基本数据类型三:table7、基本运算符(一)8、基本运算符(二)9、流程控制-判断10、流程控制循环(一)->while和repeat11、 查看详情
lua学习笔记(代码片段)
...类型二:function6、基本数据类型三:table7、基本运算符(一)8、基本运算符(二)9、流程控制-判断10、流程控制循环(一)->while和repeat11、 查看详情
韩顺平循序渐进学java零基础
...String转基本类型细节本章作业1本章作业2本章小结第04章运算符算术运算符介绍算术运算符使用算术运算符练习1算术运算符练习2算术运算符练习3算术运算符练习4关系运算符介绍关系运算符使用逻辑运算符介绍短路与逻辑与短路... 查看详情
javascript学习笔记
...数据类型简单数据类型复杂数据类型类型转换3.运算算术运算符递增递减运算符比较运算符逻辑运算符赋值运算符运算符优先级4.流程控制分支结构if语句三元表达式switch语句循环结构for循环while循环do...while循环continue关键字break... 查看详情
day03java基础学习笔记
三元运算符1.格式:(条件表达式)?表达式1:表达式2;2.运算规则:先对条件表达式求值,得出一个逻辑值,如果至为true,则执行表达式1;如果值为false,则执行表达式2。443.典型用法:Stringstr=(5<3)?"5大于3":"5大于3";... 查看详情
go语言学习笔记—基础—基本语法—常量与变量—常量变量的声明:常量的初始化定义(代码片段)
常量是一个简单值的标识符,在程序运行时,不会被修改。常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。常量的初始化定义特点常量的值在编译时就已确定,可以用于数... 查看详情
学习java的杂乱笔记
1.局部变量:定义在方法中的变量,定义在方法中的参数的变量,定义在for循环中变量,都是局部变量,在栈内存中开辟一个空间,数据使用完毕,自动释放。2.何定义一个函数?(不需要死记,只需了解) 1.既然函数是一个独... 查看详情
学习笔记第十五章javascript基础
...了解JavaScript基础知识熟悉常量和变量能够使用表达式和运算符正确使用语句能够掌握数据类型和转换的基本方法正确使用函数、对象、数组等核心知识和技法能够编写简单的脚本,解决网页中常见特效和互动效果15.1 JavaScript... 查看详情
java学习笔记(代码片段)
...字注释关键字2、数据类型3、类型转换4、变量、常量5、运算符6、包机制、JavaDocJavaDocJava流程控制1、用户交换Scanner2、顺序结构3、选择结构4、循环结构5、break&continue6、练习Java方法1、何谓方法2、方法的定义及调用3、方法重... 查看详情
shell脚本保姆级教程(代码片段)
文章目录前言一.Shell基础1.查看2.安装3.使用4.Bash基本特性Bash解释器具有许多方便的快捷键查看历史命令命令别名标准输入输出的重定向管道二.helloworld三.变量1.自定义变量定义变量取消变量变量规范2.环境变量3.位置变量4.预定义... 查看详情