这里写自定义目录标题
第一讲
你好! 这是Java教学的第一课,之前写过几篇二进制的前戏,掌握二进制对之后的学习理解会有更好的帮助。
从这开始,我们进入Java教学: 现如今我们工作生活的方方面面都离不开手机、电脑,像里面各式各样的软件我们是非常熟悉的,比如玩游戏的扫雷、蜘蛛纸牌、写文档用的Word、购物的某宝等等,那么这些软件是怎么做出来的呢?其实就是用的计算机语言编程写出来的,那,什么是计算机语言?其实就是计算机能读懂的语言,正像我们现实生活中有各种人的语言,比如汉语、英语、德语等等,计算机语言也有很多种,那我们这来学习的就是Java
JDK (Java的运行环境)
我们知道植物要生长,需要有一定的生长环境,水、阳光、空气…那么我们Java需要运行,也需要一个环境,那么这个环境,需要我们先安装-----Jdk(严格说来,Jre才是Java的运行环境,而Jdk是包含了Jre的开发工具包,我们作为开发人员,不仅要有运行环境,还要有开发工具包,那么我们直接安装Jdk是最合适的,这里简单介绍,如有兴趣深入了解Jre和Jdk的,可以百度一下 Jdk和Jre的区别)
点击跳转至安装Jdk百度经验
朋友们根据这篇百度经验就可以安装好Jdk了,我这假设大家都很顺利的非常聪明的安装完成了
我目前计算机上的Jdk版本是 “1.8.0_131” 你可以不用跟我的一样,甚至可以是1.7版本的(不能1.6)
执行过程
1、编译: javac 文件名.java
2、运行: java 文件名
如何开发一个java程序
1.新建一个文本文档,把后缀名改为.java
2.使用普通的记事本打开,编写源程序
3.按住shift在当前目录空白处右键,点击在此处打开命令窗口
4.使用javac编译你的源文件—会自动生成一个.class的字节码文件
5.使用java 运行你生成的字节码文件(.class文件),java 文件名(请勿加后缀)
Hello World尝试一下
万事开头难,然后中间难,最后结尾难,我们来先写个Hello World尝试下开发我们第一个Java程序吧
根据上面所说的12345点
public class A{
public static void main(String[] args){
System.out.println("Hello MM");
}
}
请注意几点
1.文件名必须与代码中的 public class 后面的一致,我写的是A,如果你文件名是B,请把第一行改成public class B{
2.public static void main(String[] args){ } 这句话表明是程序的入口,程序运行的时候会将这个大括号内的代码至上而下的一行一行执行
3.System.out.println()表明 输出打印,会把括号内的内容输出打印出来
4.请看清dos命令所在路径,一定要路径对,按住shift右键 点击在此次打开dos命令打开的肯定是对的,通过cmd进入的请自己进入到对应的路径
5.通过javac 命令后,可以发现自动生成了一个.class文件,再通过java命令运行的,实际是这个class文件, 通过java 命令运行的,请千万不要加.class后缀
Java的跨平台性
20世纪90年代,硬件领域出现了单片式计算机系统,这种价格低廉的系统一出现就立即引起了自动控制领域人员的注意,因为使用它可以大幅度提升消费类电子产品(如电视机顶盒、面包烤箱、移动电话等)的智能化程度。Sun公司为了抢占市场先机,在1991年成立了一个称为Green的项目小组,帕特里克、詹姆斯·高斯林、麦克·舍林丹和其他几个工程师一起组成的工作小组在加利福尼亚州门洛帕克市沙丘路的一个小工作室里面研究开发新技术,专攻计算机在家电产品上的嵌入式应用。
由于C++所具有的优势,该项目组的研究人员首先考虑采用C++来编写程序。但对于硬件资源极其匮乏的单片式系统来说,C++程序过于复杂和庞大。另外由于消费电子产品所采用的嵌入式处理器芯片的种类繁杂,如何让编写的程序跨平台运行也是个难题。为了解决困难,他们首先着眼于语言的开发,假设了一种结构简单、符合嵌入式应用需要的硬件平台体系结构并为其制定了相应的规范,其中就定义了这种硬件平台的二进制机器码指令系统(即后来成为“字节码”的指令系统),以待语言开发成功后,能有半导体芯片生产商开发和生产这种硬件平台。对于新语言的设计,Sun公司研发人员并没有开发一种全新的语言,而是根据嵌入式软件的要求,对C++进行了改造,去除了留在C++的一些不太实用及影响安全的成分,并结合嵌入式系统的实时性要求,开发了一种称为Oak的面向对象语言。
1999年4月27日,HotSpot虚拟机发布。HotSpot虚拟机发布时是作为JDK 1.2的附加程序提供的,后来它成为了JDK 1.3及之后所有版本的Sun JDK的默认虚拟机.
虚拟机所起到的作用是将软件和硬件分离.做软件设计的不需要懂硬件.只需要针对虚拟机写好软件该实现的功能就可以.Java为了实现这一点针对不同的平台.提供不同的虚拟机.如果使用Window平台那么就是引用Window下的虚拟机.如果Mac就使用Mac的虚拟机.
所以Java的跨平台性是指可以跨操作系统.其根本原因是Java虚拟机(Java Virtual Machine,简称JVM)不跨平台.
所谓的JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。比如电脑中有cpu有内存等在虚拟机中都会模拟出来.
Java解释型语言
这里要介绍两个概念分别是
-
编译型语言
-
解释型语言
简而言之: 如果编译好就可以被平台执行,那么就是编译型语言
如果编译后还需要解释才能被平台执行,那么就是解释型语言
Java的两大核心机制
1.java虚拟机 jvm(java虚拟机) 的不可跨平台特性实现了 java的可跨平台特性
2.垃圾回收器 gc
垃圾回收器主要做两件事情
2.1帮你自动回收掉你没有用的内存空间
2.2帮你挪动你正在使用的有用的内存空间
注释
上面写了个HelloWorld,但是有些时候,我们想写些不想被程序执行的,只有我自己能看懂的比如小笔记(心情好,写篇小说)在代码里,那么我们就需要用到注释了,注释注释有以下三种:
// 单行注释
/** */ 文档注释
/ * */ 多行注释
/**
文档注释
*/
public class Demo2{
public static void main(String[] args){
System.out.println("你好");
System.out.println("你好");
// 这个表示单行注释,写在注释里的内容,不会被执行
/*
多行注释,
在整个这个多行注释内的内容都不会被执行
*/
//命名规范:
//1.文件名的规范:
//必须以大写的字母开头,每一个单词的首字母都必须大写
// myfirstjava
// MyFirstJava
}
}
变量
- 什么是变量
- 在程序执行的过程中,在某个范围内其值可以发生改变的量
- 变量的定义格式
- 数据类型 变量名 = 变量值;
- 为什么要定义变量
- 用来不断的存放同一类型的常量,并可以重复使用
数据类型
- 数据类型
- 源生数据类型(基本数据类型)
- 整数型
- byte
- short
- int
- long
- 浮点型
- float
- double
- 字符型
- char
- 布尔类型
- boolean
- 整数型
- 源生数据类型(基本数据类型)
public class Demo3{
public static void main(String[] args){
//每一句代码只写一行,每一句代码都必须以;结尾
//设 x = 999
//但是这种方式,如何在咱们java语言中表示呢?
//数据类型 x = 某某某;
//8种基本的数据类型
//整形: byte short int long
//大小(字节): 1字节 2字节 4字节 8字节
//浮点型:float double
//大小(字节): 4 8
//字符型: char
//大小(字节): 2字节
//布尔型: boolean (逻辑类型)
/*int x = 999;
System.out.println(x);
System.out.println(x);
System.out.println(x);*/
//----------------------------------
//byte是一个字节,取值范围是-128~~127
/*byte b = 127;
System.out.println(b);*/
//2个字节,-2^15 ~~2^15-1
/*short s = 111;
System.out.println(s);*/
/*int i = 999;
System.out.println(i);*/
//8个字节
/*long l = 99999;
System.out.println(l);*/
//int是4个字节,取值范围是-2的31次方 ~~2的31次方-1
/*long l = 99999999999L;
System.out.println(l);*/
//所有的数字的整数都是默认是int类型
//所有的数字的小数点都是默认是double类型的
/*float f = 9.9f;
System.out.println(f);*/
/*double d = 99.9;
System.out.println(d);*/
//字符型(特殊的整数类型)
/*char c = 98;
System.out.println(c);*/
//boolean类型中只有两个值 true false
boolean b = true;
System.out.println(b);
//输出,显示,打印是一回事
//P1:
//现在有999,把该值赋值给int类型的变量i
//赋值好以后,输出i,再把i赋值给long类型的变量l
//并打印l
//P2:现有 99.99把其赋值给浮点类型的变量
//并打印出来
}
}
在java中,= 的意思是把 = 号右边的值赋值给等号左边的变量
为什么有数据类型
-
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间
-
基本数据类型分类(4类8种) (Java是有符号语言。所谓的符号可以简单理解就是正负)
- 整数型 整数型默认是int类型。
- byte 占一个字节 -128到127 一个字节8位
- short 占两个字 -215~215-1 短整型
- int 占四个字节 -231~231-1
- long 占八个字节 -263~263-1
- 浮点型(小数) 。
- float 占四个字节
- double 占八个字节
- 字符型 使用单引号来保存 ‘’ “”
- char 占两个字节
- 布尔型
- boolean
- boolean理论上是占八分之一个字节,因为一个开关就可以决定是true和false了,但是java中boolean类型没有明确指定他的大小
- boolean
- 整数型 整数型默认是int类型。
-
之后来讲 作用域问题*
* 同一个区域不能使用相同的变量名- 初始化值问题
- 局部变量在使用之前必须赋值 (先记住。)
- 一条语句可以定义几个变量
- int a,b,c…;
- 初始化值问题
public class Demo4{
public static void main(String [] args){
//强制类型转换和自动转换
//int i = 99;
//byte b = (byte)i;//把大的赋值给小的,必须强制类型转换
//现在要把int类型变量i 强制 转换成 byte类型的
//那么 (byte)i
//System.out.println(b);
//byte 1个字节
//short 2个字节
//int 4个字节
//long 8个字节
//只是整形的时候,
//byte < short (char) < int <long< float < double
//浮点类型:
//float 4个字节
//double 8个字节
/*float f = 9.9f;
short s = f;
System.out.println(s);*/
/*short s = 9;
float f = s;
System.out.println(f);*/
/*long l = 99;
float f = l;
System.out.println(f);*/
//演示:char 类型 跟short类型比较
/*short s = 99;
char c = s;
System.out.println(c);*/
/*char c = 98;
short s = c;
System.out.println(s);*/
/*char c = 99;
int i = c;
System.out.println(i);*/
//byte < short (char) < int <long< float < double
//P3: double d = 9.9;
//请把d的值赋值给一个int类型的变量
//double d =9.9;
//int i = (int)d;
//System.out.println(i);
//P4:
// long l = 9;
// 把l赋值给float类型的变量f
//整数数字默认是int类型
// short s = 9;
//在整形直接赋值的时候,你直接写数字,编译器会进行默认的转换
//小数点数字默认是double类型
//float f = 9.9f;
/*float f2 = 99;
System.out.println(f2);*/
/*byte b = (byte)129;
System.out.println(b);*/
//----------------------
/*byte b1 = 9;
byte b2 = 9+3;
byte b3 = (byte)(b1+b2);
System.out.println(b3);*/
}
}
运算符
- 运算符
- 算术运算符
- 赋值运算符
- 比较(关系或条件)运算符
- 逻辑运算符
- 三目(元)运算符 (下篇讲)
- 位运算符 (不讲)
算术运算符的基本用法(掌握)
-
什么是运算符
- 就是对常量和变量进行操作的符号。我们也会把这些符号两边的数叫做操作数。
-
算数运算符有哪些(对应数学中所用的加减乘除和取余数。)
- +,-,*,/,%,++,–
-
注意事项:
- a:+号在java中有两种作用,做加法运算,字符串的连接符
- b:整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点数类型
- c:/获取的是除法,得到的是商,%获取的是除法,得到的是余数
public class Demo5{
public static void main(String[] args){
//小知识:不加ln不换行
//\t 表明的是一个制表符
//\表示的转义符
/*System.out.print("你好啊,美女\t\n");
System.out.println("How are you ");
System.out.println();
System.out.println("Thank you,Yes,I'm fine ");
System.out.println("\"哈哈哈\"");*/
//我现在想打印 "哈哈哈"
//+号
//2个作用:
//1.用来加法运算
//2.用来连接字符串 ""
int i = 99;
int j = 1;
System.out.println("和的值为:"+(i+j));
}
}
public class Demo6{
public static void main(String[] args){
/*
现在有int i = 167;
请得到i的个位上的数,
十位上的数,百位上的数,
提醒,使用%和/
*/
int i = 369;
int g = i%10; //得到了个位
int s = i/10%10; //得到了十位
int b = i/100%10;//得到百位
System.out.println("个位是:"+g);
System.out.println("十位是:"+s);
System.out.println("百位是:"+b);
}
}
算术运算符++和–的用法(掌握)
- ++,–运算符的作用
- 自加(++)自减(–)运算
- ++:自加。对原有的数据进行+1
- –:自减。对原有的数据进行-1
- 案例演示
- a:单独使用:
- 放在操作数的前面和后面效果一样。(这种用法是我们比较常见的)
- b:参与运算使用:
- 放在操作数的前面,先自增或者自减计算,然后再取其值运算。
- 放在操作数的后面,先取其值运算,再自增或者自减。
- a:单独使用:
public class Demo7{
public static void main(String[] args){
/*int i = 9;
++i;
System.out.println(i);*/
//++在后,先取值,再自增
//++在前,先自增,再取值
/*int i = 9;
int j = 3+ ++i;
System.out.println("j的值为:"+j);//13
System.out.println("i的值为:"+i);//10*/
/*int i =1;
int j = i++ + ++i + --i + i--;
// 1 + 3 + 2 + 2 ;i=1
int k = i-- + i++ + i++ + i++;
// 1 + 0 + 1 + 2 ;i=3
System.out.println("i的值为:"+i);
System.out.println("j的值为:"+j);
System.out.println("k的值为:"+k);*/
//i=3,j=8,k=3
//i=3,j=8,k=4 相同
//i = 3,j = 5
//i =3 ,j =4,
//i = 3, j = 3; 相同
//
int i = 2;
i = i++ + i-- + --i + i++;
// 2 + 3 + 1 + 1
System.out.println(i);
}
}
赋值运算符的基本用法(掌握)
- 赋值运算符有哪些
-
基本的赋值运算符:=
- 把=右边的数据赋值给左边。
-
扩展的赋值运算符:+=,-=,*=,/=,%=
-
关系运算符的基本用法及其注意事项(掌握)
- 关系运算符有哪些(比较运算符,条件运算符)
- ==,!=,>,>=,<,<=
- 注意事项:
-
无论你的操作是简单还是复杂,结果是boolean类型(boolean的值只有两个,一个是true另一个是false,也就是对和错)。
-
“==“不能写成”=”。
-
public class Demo8{
public static void main(String[] args){
/*int i = 9;
i += 3; //i = i +3;
System.out.println("i的值为:"+i);*/
/*byte b = 3;
//b = b +5;
b += 5;
System.out.println(b);*/
//关系运算符
// == 表示等于的意思
//System.out.println((3+5) != 8);
//8 != 8 != 是表示不等于的意思
int i = 10;
int j = 18;
System.out.println(i <= j);
}
}
逻辑运算符的基本用法(掌握)
-
逻辑运算符有哪些
- &,|,^,!
- &&,||
-
案例演示
-
逻辑运算符的基本用法
-
注意事项:
- 逻辑运算符一般用于连接boolean类型的表达式或者值。
- 表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子。
- 算术表达式:a + b
- 比较表达式:a == b(条件表达式)
-
结论:
-
&逻辑与:有false则false。
-
|逻辑或:有true则true。
逻辑运算符&&和&的区别(掌握)
public class Demo9{
public static void main(String[] args){
/*
&,|,^,!
&&,||
*/
//& 并且 并且的两边都得是对的,得到的结果才是对的
//| 或者 或者的两边只要有一个是对的,得到的结果就是对的
//System.out.println(5>8 | 3>2);
//& | 不会发生短路
//&& || 会发生短路
//因为 并且 得两边都得是对的
//左边这个表达式一运算 发现得到结果是错的
//那么&&就短路不再运行后面的了,自动得到一个错的结果
//System.out.println(5>8 && 3>1);
// || 短路
//因为 或者 两边 只要有一个是对的
//左边的表达式一运算,发现得到的结果是对的
//那么|| 就短路不再运行当前||右边的了,自动得到一个true的结果
//System.out.println(8>1 || 3>1);
// ^ 异或 了解
//只有两边是不一样的boolean类型值,才能得到true
//两边是一样的boolean类型的值,得到的是false
//System.out.println(5>3 ^ 3==2);
// !
//boolean b = false;
//System.out.println(!b);
}
}
作业
1.现有 byte b = 99;
short s = 11;
要把他们加起来的结果 再赋值给变量s
2.以下类名标识符的命名规范正确的是
A. abc
B. 1abc
C. _abc
D. %abc
E. Hello
3.实现一个数字加密器,
int i = 123456;
把 i 进行加密
加密规则是:
加密结果 = (整数*10+5)/2 + 3.14159,加密结果仍为一整数
-
byte b1=3,b2=4,b; b=b1+b2; b=3+7; 哪句是编译失败的呢?为什么呢?
-
byte by = 130;
有没有问题?有问题如何解决?结果是多少呢?
第三题:
byte b = 10;
b++; 不会出错的
b = b + 1;
哪句是编译失败的呢?为什么呢?
6.现有会员卡号 86372 计算该卡号各位数之和
7.计算并写出计算过程
int i=2;
int j = ++i + i++ + i-- + i++;
j=13; i=4
int k = i++ + --i + i++ + i++;
k = 17 ;i =6;
计算最后i j k 的值