Java编程语言概述
文章说明
本篇文章介绍自学【Java编程 阶段】,仅是对自己学习的记录,并没有深入分析每个模块。感谢支持!
-
计算机语言介绍:
计算机语言可以分为:三大块!
第一块:机器语言 比如:0 1
第二块:汇编语言 比如:mov ax,bx
第三块:高级语言 比如:C、C++、C#、Java、Python等… -
Java语言的前世今生
1991年 Java 是由SUM 公司的 JamesGosling 中文翻译为::詹姆斯•高斯林,Java语言之父!
Java是一款很优秀的语言,他的特长之处是:一次编译到处运行。又是个面向对象的语言,又有高度的可移植性,简洁有效。他的核心优势就是:跨平台。
Java 是一款分布式、健壮性、解释性语言。
Java的三大特性是:封装、继承、多态 -
Java技术体性平台
JavaSE :标准版,也是最核心的。
JavaEE:企业版
JavaME: 微型版
JavaCard:小程序版 -
Java的JVM(Java虚拟机运行原理)
首先在以 .java文件中,写一个段程序如:
public class Hello{
public static void main(String [] args){
System.out.println("Hello 优快云");
}
}
然后在 cmd 里编译这段程序,命令为:javac Hello.java
编译成功,就可以开始执行代码,命令为:java Hello
显示:Hello 优快云
Java底层描述:
写好的程序,交给了编译器,编译器把以.java的文件,编辑成了.class的字节码文件,并发送给Java虚拟机 JVM ,在虚拟机里,.class的字节码文件就让类加载器进行处理,类加载器就把.clss的数据读入到内存里,并创建一个字节数组,然后产生了Class对象,但是加载完成之后,Class对象并不完整,所以就不能使用,然后接着进入 连接阶段… 如图:
-
Java核心机制
Java核心机制一共有两种:
第一种:Java虚拟机(JVM)
实现了Java的跨平台的优势,每个操作系统都有对应的解释器。源程序通过编译器,编译成字节码,然后通过JVM执行,JVM 可以理解成为一个以字节码为机器的指令 CPU。JVM 机制屏蔽了底层运行平台差别,实现了“一次编译,到处运行”!第二种:垃圾收集 机制(Garbage Collection)
垃圾收集在 Java 程序运行过程中自动进行,程序员无法精确的控制和干预。 -
Java程序的执行原理
1.加载器到了内存区,2.找到了 main 方法开始执行,3.执行过程中的内存管理,
存在硬盘中的程序代码是通过编译 成的字节码,之后运行 java 。运行开始后代码被下载到内存区, 从main 方法开始执行。内存代码存放在 code segment ,静态变量和字符串常量存放在 data segment 局部变量存放在 stack,new 出来的东西存放在heap中。
注:还在理解中,并没有完成理解…
-
Java变量的声明与使用
什么是变量?
答:变量的值是千变万化的,是不固定的。变量分为:
局部变量:方法里或语句块内部定义的变量。
全局变量:方法外部、类内部定义的变量。
静态变量:是以static 关键字定义的变量。
注:类在静态变量就在,静态变量是首先声明变量。变量命名规则:除了第一个单词首字母小写,其他的单词首字母大写,把怎么做称之为:驼峰命名法!
变量三大要素:
1.数据类型 :是用来存储,字符串、整型、浮点型、布尔型、对象、等…
2.变量名: 通过变量名可以进行访问这块内存以及里面的内容。
3.值:存放具体的值是可以变换的。变量使用原则:先声明后使用!
注:常量是以 final 关键字声明的。
命名规则:所有单词大写,每个单词分割之间使用下划线 分割
如:final String NAME=“王五”; -
基本数据类型
八大基本数据类型:
byte 字节型 占 1个字节!
short 短整型 占 2个字节!
int 整形 占4个字节!
long 长整型 占8个字节!
float 单浮点型 占4个字节!
double 双浮点型 占8个字节!
boolean 只有两值(true false)
char 单字符型 占2个字节。
注:可以使用Unicode编码!
例如常见的:
数字0 :Unicode编码的值为48。
数字1 :Unicode编码的值为49。
字母A :Unicode编码的值为65。
字母B :Unicode编码的值为66。
字母a :Unicode编码的值为97。
字母b :Unicode编码的值为98。
基本数据类型转换
自动类型转换
byte、short、char 运算时,结果为 int类型。
char 运算时 牵扯到 ASCII 码!
当两个不一样的数据类型 运算,结果 往往都是 范围最大的数据类型。
强制类型转换
首先我要知道为什么要用强制类型转换呢?
我的个人理解:因为当我们定义的是范围大的数据类型,然后和小的范围数据类型 进行运算,会影响到 计算机运行的效率,又浪费内存空间,所以我们要转换下存放的范围,但是 不好的一点是 会失去精度,所以根据实际情况去转换。
例如:
double d=36.9;
int i=(int)d;
输出: 36
算术运算符
加(+) 减(-) 乘(*) 除(/) 取余(%) a++ ++a a-- --a 正号 (+) 负号(-)
int a=-10;
int b=12;
输出:b%a == 2
注:余数的负号 是由被模数 所控制!
a++
先运算 再自增 1
++a
先自增1 再运算
a–
先运算 再自减 1
–a
先自减 ,再运算
小小的随堂练习:
自增练习,自减练习
int a=13;
int b=15;
int c=a++;
输出:c 是: 13
输出:a 是: 14
c=++a;
输出:c 是:15;
输出:a 是:15;
c=b--;
输出:c 是:15;
输出:b 是:14;
c=--b;
输出:c 是:13;
输出:b 是:13;
小小的随堂小练习2
任意一个三位数 ,取每一位数!
百位 、十位、个位
int a=456;
int baiwei=a/100;
int shiwei=a/10%10;
int shiwei2=a%100/10;
int gewei=a%10;
int gewei2=a%100-(shiwe*10);
System.out.println(baiwei+","+shiwei+"/"+shiwei2+","+gewei+"/"+gewei2);
输出:4,5/5,6/6
赋值运算符
= += -= *= /= %=
赋值运算符,支持连接赋值!例如:int a=b, a=b=10; (从右 往 左 赋值)
+= -= *= /= %=
运算时不会 改变本身 数据类型。
注: sum +=10 ; 可以写成 sum=sum+10;
但是会改变本身的数据类型! 比如:short byte char ,值是 浮点型的时候。
比较运算符
注:= 和 == 分清楚
一个赋值 一个 比较的
Instanceof 检查是否是类的对象。
比较运算符结果永远都是 布尔数据类型 true false
逻辑运算符
单与 & 双与 && 单或 | 双或 || 非 ! ^ 异或
个人理解:
与 & 或者 && :返回的 false , 有一个 false 就是false ,除非都是 true 。
或 | 或者 || : 返回的 true ,有一个true 就是 true ,除非 都是 false
非! : 就是取和他相反的。
异或 ^ : 听名就知道,要两个不一样的值。如果两个都是 true 就是 false ,
如果 两个都 是false 也是 false。
如果有一个 true ,另一个 是false 则就是true 。
区别:
& 和 &&
当 用了 & 的时候:
式子左边是false 的时候,还进行运算。
当用了 && 的时候:
式子左边是false 的时候,就不进行运算咯。
区别:
| 和 ||
当用了 | 的时候:
式子左边是true 的时候,还进行运算。
当用了 || 的时候:
式子左边是true的时候,就不进行运算咯。
因为: && 返回的是 false ,只要一遇到 false 其他就不执行咯。
因为:|| 返回的是true ,只要一遇到true 其他就不执行咯。
位运算符
友情提示:位运算是直接对整数的二进制进行的运算,操作的整型的值。
<< 左移 、 >> 右移 、 >>> 无符号 右移
个人理解:
<< 左移 :
移到 1 位 就是 2的1次方! 计算的时候用 乘法,包括负数
例子:
int i=20;
输出:i<<2 得:20* 2的2次方 等于:40
>>右移:
移动1位就是 2 的 1次方! 计算的时候用 除法 包括 负数
例子:
int i=20;
输出:i>>2 得: 20/2的2次方 等于:5
面试题:
题目:如何高效的运算 出 8 * 2
2<< 3 或者 8<<1
三元运算符
格式:(条件表达式) ? 表达式1 : 表达式 2
如果 条件表达式 为 true 就执行 表达式 1
如果条件表达式为 false 就执行 表达式 2
注:表达式数据类型一致 ,可以嵌套使用!
注:能用三元运算符 就能用 if else 执行
能用 if else 未必能用 三元 运算符
如果 又能 用 if else 又能用 三元 运算符 ,那就用三元运算符 。
因为三运算符 效率高。