Java基础入门
服务器端语言——没有快捷方式。——运行环境
以后书写的java代码——需要依赖jdk进行运行
Java介绍
java语言:
服务器端语言——
php python .net…
语言简单分类——
**二进制语言:**计算机最底下:硬件:识别的都是二进制语言。
01010101 01010101 0000001 0001100 – 8个字节分别代表什么含义 ,多个二进制组合又代表什么???????
**汇编语言:**大量的十六进制。 0xaf 0xaf 0xaf 0xaf 0xaf 0xaf —jdk的底层的指令很多都是16进制。
高级语言:
JS java php python .net——面向对象
C:面向过程——是和硬件交互最方便的一种——嵌入式都是用的C
Java语言:就是所谓的高级语言。
高级语言:其实在运行的时候都需要转换成底层指令——一般都是汇编和二进制。
——都需要:中间件——jdk是一个运行环境——就是负责编译解释你的java代码
C语言:嵌入式:内嵌在硬件中:机器人 …
高级语言:Java——手机APP 微信小程序的后台 部分手机端软件 各种应用系统 游戏…
java的发展史:
1996年1月,Sun公司发布了Java的第一个开发工具包 *(JDK 1.0)*
2009年,甲骨文公司宣布收购Sun
**2014年,甲骨文公司发布了Java8正式版**
2017 年 9 月 22 日,Java 9正式发布,带来了很多新特性,其中最主要的变化是已经实现的模块化系统。
…
甲骨文:把java——甲骨文原本是搞得是数据库:oracle——
java语言的应用非常的广泛——
运行环境和开发环境
开发环境:写代码的——文本编辑器。java语言的文件:.java文件,也是一个文本文件,所以写代码直接用文本编辑器即可。
txt edplus …,但是写出来的代码不能运行,需要先用jdk进行编译,然后使用jre进行运行。
运行环境:jvm虚拟机——java的运行平台——安装jdk中安装出来的那个jre。
但是java语言.java文件不能直接进行运行,不要通过jdk先进行编译才可以运行。(Jdk)
jdk是一个开发环境+运行环境——内置了一个jre。
编译:
js:文本编辑器进行书写,然后浏览器运行即可——边解释边运行:解释的过程就是将你的高级语言进行底层指令的解析。
Java:编译型语言。
源文件(.java .js)不能直接解释成底层指令进行执行。
需要一个编译工具来将源文件编译成一个中间型的文件(字节码文件)——jdk
然后对字节码文件进行解释运行。——jvm虚拟机:jre
idea:集成环境:集成了开发环境+运行环境。
JDK的安装和环境变量的配置(重点)
ClassPath:编译的时候如果需要依赖其他类去哪找 默认是当前.
为了命令提示符下的:java javac命令可用 bin文件是可执行文件
Java的常用命令(重点)
java:运行
javac:编译
javadoc:导出文件——API
javap:反编译…s
编写、编译和运行第一个Java应用程序(重点)
创建文件:后缀:.java——源文件—MyClass01.java
//public 固定的? class 固定的? 类名:需要和文件名保持一致
public class MyClass01{
//public static void main(String[] args)--main方法的固定声明格式
public static void main(String[] args){
//向控制台输出——类似:console.log()---java语句结尾必须书写;
System.out.print("HelloWorld!!!!!!!!!!!!!!!!!!");
}
}
源文件:
1.public类的类名需要和文件名保持一致
2.如果一个类想运行必须有main方法:main方法是程序的入口。
3.main:语法是固定:public static void main
4.java中向控制台:System.out.print();
5.Java严格区分大小写。
6.每一个语句都必须有;结尾。
7.Java是一次编译多次运行。源代码改变后必须重新编译在运行——如果不编译直接运行,那么还是之前的字节码,新盖的内容没有生效
Java的运行机制:
首先需要将源文件编译成.class字节码文件—>通过java运行命令,调用的jvm虚拟机对字节码文件进行解释运行,然后出结果。
现在已经是class文件:直接运行就OK,编译一次就行。–Java一次编译多次运行。
java程序:一般都是第一次启动慢
Java的特性:
简单性;面向对象;分布式;编译型语言;稳健性;可移植性;高性能;多线程;
跨平台、开源、垃圾回收
**稳健性:**C# c语言:垃圾回收需要手动控制。——控制不好内存就溢
Java自动垃圾回收——自己底层有一套算法:在查那个对象没人用,自动回收。
跨平台:.class文件—在不同平台:安卓 window liunx 提供了的jvm虚拟机环境——对class解释是一致。——.net不能跨平台,只能在window下使用。
使用Idea来书写Java
1):首先先创建功能
右击run的过程:集成环境:会先编译,然后运行——javac+java
Java变量
/*
* Java的前几章:和js基本没有区别——
* js:核心语法 BOM DOM--核心语法:其实所有语言都差不多
* Java中学习java的核心语法——
* 其实各个语言的基本都差不多。jsjava都是高级语言,所以都不差不多
*
* 1.变量 2.分支 3.循环 4.数组...........
* */
3.1 变量的概念
变量的含义其实来源的就是数学。
变量在程序中起到?
建设我有x元,买了一个包子2 买了一个豆浆 此时2
建设x=9
x=8;
3.2 变量的声明
//java变量的声明
/*
*JS:var x=1;
* var name="zahgnsan"
* var status=true;
" * var x,y,z;"
* --弱变量--变量名的权利非常小,自己不当家,别人给我赋值赋值什么,就是什么类型。
* --js使用var定义的变量其实都是全局,有效范围佷乱。--这个咱没用
* function a(){
* var info="a"
* }
* console.log(info);
*/
/**
* 不是弱变量:
* 变量声明先指定数据类型,int age;那么他就只能存储数字。
* Java变量的有效范围:仅在所在的{}内,离开就不能用了
*/
Java可以先声明后赋值也可以声明同时做赋值:必须初始化赋值才可以使用,否则语法错误——编译器就报错。
int age=1;//声明同时做赋值
"int a=1,b=2,c=3;//一次声明多个"
String name;//先声明 后赋值
name="赋值";
String info;
//System.out.println(info);如果变量没有初始化,没有赋值不可以使用,会直接编译异常
/**
* 变量命名的规范:——硬性要求,如果不符合直接报错
* 1.以字母 _ $开头,后边可以跟着字母 数字 _ $
* 2.不能使用关键字
* 3.变量不能有空格
*/
int a1;/*int 1a;*/ int myName; /*int my name;*/ /*int int;*/
/**
* 常规要求:
* 1.变量名一般按照驼峰命名来走:首字母小写第二个单词开始首字母大写 myName
* 2.类名一般按照大驼峰命名:首字母大写第二个单词开始首字母也大些 MyName
* 3.常量命名:统一大写
* 4.知名知名
*/
3.3 标识符的定义规则
类名:大驼峰
变量名:小驼峰
包名:全部小写
常量名:全部大写
3.4 数据类型分类
//第一类:基本数据类型——都是小写
/*存储数字:整型和浮点型*/
// byte short int long
//double float
/*存储字符:字符型:char*/
/*布尔型:boolean:true或者false*/
3.4.1 八大基本数据类型
byte short int long–这四个都是整型。长度不一样。
byte:1个字节:0000001—有多少排列组合的可能:256有可能–
float double
char
boolean
public static void main(String[] args) {
//第一类:基本数据类型——都是小写
/*存储数字:整型和浮点型*/
// byte short int long--:数字有关系
int a=1;
byte byte01=1;
//byte byte02=300;
short s01=1;
//short s02=40000;
long l1=1;
//如果直接写数字:这个数字就是所谓的数字常量——java中但凡看到这种数字常量,会直接将其作为int来识别。
//现在内容超出了20亿的范畴,想用长征性:l
long l2=10000000000l;//这个长度没有超出long的范畴。
//double float
//浮点型常量值:系统默认识别成了都double——加f才可以作为float数字
float f1=100.1f;//100很小的--4字节
double d1=100.1;
/*存储字符:字符型:char*/
char c='\n';//java中字符型用'' 字符串用“” ''引起来的都是单一字符
char c1='a';
/*布尔型:boolean:true或者false*/
boolean state=true;
//引用数据类型:——首字母都是大写
String name="ddddd";
}
3.4.2 引用数据类型:
//引用数据类型:——首字母都是大写
String name="";
3.5 数据类型转换
小赋值给大可以直接赋值
大给小强转:目标类型 bb=(目标类型) 之前
整形常量值只要不能超出范围可以直接赋值给byte 和short
混合运算的时候按照大的走,但是byte和short混合运算,结果为int
char可以和整形转换但是boolean不可以
如果从long:大水缸往小的水杯中:int导入内容:如果long的水多,值大,那么多余的部分会溢出 丢失 如果值不大,内容少可以直接放入。
——大的给小的是有风险的。所以程序不许与直接走——强转。
如果从int放入到long中:小水杯的水导入到水缸里,绝对不会有任何问题。
——小的给大的直接给
//类型转换:两个变量数据类型不一致的时候可以不可以进行一个转换的问题:
//1.小的给大的可以直接给:水杯往水缸导入
//2.大的给小的必须强转——强转是有风险的:水缸往水杯导:不一定没问题
byte b=1;
int c=b;//b是byte类型 cint类型:int4 byte1
long l1=c;
int c1= (int) l1;//l1long类型: c1是int类型 强转:(目标类型)原始内容
System.out.println(c1);
long l2=10000000011l;
byte b2= (byte) l2;//如果超长会溢出——内容丢失
System.out.println(b2);
//
float f= (float) 100.1;//double :8 flolt:4不可以
float f2= 100.1f;
//如果整型常量默认按照int处理,如果超长没办法直接赋值给long
//但是这个数字可以直接赋值给byte 或者 short--只要不超长可以直接给byte和short
byte bb=1;
short cc=2;
float fff= bb+f;//混合运算按照大的走
int ccc=cc+bb;//如果是byte和short的运算:结果得用int
3.6 运算符
3.6.1 赋值运算符
= ± -= *= /=
//赋值运算符:= += *= -=
int a=1;
a+=1;//a=a+1;
3.6.2 算数运算符
*+ - * / % ++ –
public static void main(String[] args) {
//操作符号:
//算数运算符 + - * / %求余 ++ -- 自增 自减
int a=1+1;
int b=5%2;//余数就是1
//强调:/--两个整数相除是整除
int a1=5/2;//结果是2
System.out.println("5/2---"+a1);
//避免整除:除数或者被除数变成浮点型
double a2=5*1.0/2;//结果是2.5
System.out.println("5*1.0/2---"+a2);
double a3=5/2*1.0;//结果是2.0--执行前边的除执行后边*
System.out.println("5/2*1.0---"+a3);
double a4=5/(2*1.0);//结果是2.5
System.out.println("5/(2*1.0)---"+a4);
//++
int j=1;
/* j++;//j=j+1;
System.out.println(j);*/
//混合运算的时候是有区别的
int z=j++;//z=j;j=j+1; 执行赋值 在执行自增
System.out.println("z:"+z);
System.out.println("j:"+j);
j=1;
z=++j;//j=j+1;z=j;先自增在赋值
System.out.println("z:"+z);
System.out.println("j:"+j);
//--
int i=1;
i--;//i=i-1;
System.out.println(i);
}
3.6.3 关系运算符
<、>、<=、>=、==、!=
//关系运算符: > < != == :判断中的等于是==
System.out.println(1>2);
System.out.println(1==2);
int zsScore=99;
int lisiScore=50;
System.out.println(zsScore>lisiScore);
3.6.4 逻辑运算符
&& || !
与:并且
||:或者
!:非,求反
//与:并且,必须所有条件都符合才算true 但凡有一个不符合结果就是false
// 什么时候能进班? 政府可以开学 身体健康 必须都符合才可以进吧,否则不可以。
String kai="可以";
String shenti="健康";
System.out.println("---------------");
boolean result=kai=="可以"&&shenti=="健康";
System.out.println(result);
result=kai=="可以"&&shenti=="发烧";
System.out.println(result);
result=kai=="不可以"&&shenti=="健康";
System.out.println(result);
System.out.println("---------------");
//||或者 ——所有结果都是false那么结果false 如果有一个true,结果就为true
// 进班:政府说开学 或者 学校说开学
String kai1="可以";
String kai2="可以";
boolean result01=kai1=="可以"||kai2=="可以";
System.out.println(result01);
result01=kai1=="可以"||kai2=="不可以";
System.out.println(result01);
result01=kai1=="不可以"||kai2=="不可以";
System.out.println(result01);
System.out.println("---------------");
//&& ||是可以短路的
//&&可以短路 &:并且
/*System.out.println(2/0==1); 2/0不可执行,只要一执行就会出异常*/
boolean info= 1==2 && 2/0==1 ;//在&&的连接条件中:如果前边第一个是false 第二个根本就不执行
System.out.println(info);
/*info= 1==2 & 2/0==1 ;//在&不会短路
System.out.println(info);*/
/*info= 1==1 && 2/0==1 ;//如果第一个是true,第二个会执行
System.out.println(info);*/
System.out.println("---------------");
//||可以 短路 |不能
boolean info1= 1==1 || 2/0==1 ; //||来说,如果两个里边有一个为ture结果就是true--第一个为true第二个就不会执行
System.out.println(info1);
/*info1= 1==1 | 2/0==1 ; //||来说,如果两个里边有一个为ture结果就是true--第一个为true第二个就不会执行
System.out.println(info1);*/
/* info1= 1==2 || 2/0==1 ; //第一个为false 第二个才会执行
System.out.println(info1);*/
3.7 运算符的优先级
注意:分析一个表达式,从左往右看,先运算优先级高的,在运算优先级低的,如果同级,需要按照结合方向。