因为刚开始没打算记到这里,所以截止到目前拖了两周的内容没有整理。
本篇以及上一篇作为2/17-2/27的内容。
本篇内容缺少数据类型部分(在另外一台电脑上),周一补发。
2/28-3/5内容明天补更新。
一、变量
1、关于程序中的数据?
开发软件解决现实中的问题-现实中的问题大多使用数据描述
所以软件执行过程中最主要的就是对数据的处理。
软件在处理数据之前需要能够表示数据,在java代码中,怎么去表示数据呢?
在java中有这样一个概念:字面量
10
1.23
true
false
"abc"
'a'
以上这些都是数据,在程序中都被叫做“字面量”
字面量可以分为很多种类:
整数型字面量:1 2 3 100 -20 ...
浮点型字面量:3.14 1.2 1.5 ...
布尔型字面量:true、false就这两个
字符型字面量:'a' 'b' '中' ...
字符串字面量:"abc" "a" "中国" ...
需要注意的是:字符型和字符串型都是描述了现实世界中的文字,所有的字符型都需要''括起来,所有的字符串型都需要""括起来。
字符型只能是单个字符,字符串无所谓
在语法级别上,怎么区分字符型跟字符串型?(通过单双引号)
2、到底什么是变量?
变量是内存当中存储数据的最基本的单元
在java语言中任何数据都是有数据类型的:比如
整数型是:int
浮点型是:double...
没有为什么,java规定的
布尔型:boolean
数据类型有什么用呢?
记住:不同的数据类型在内存中分配的空间大小不同
也就是说,java虚拟机到底给这个数据分配多大的空间,主要还是看这个变量的数据类型。
比如,JVM自动分配给int整数类型的空间魏4个字节。
1个字节=8个比特位
1个比特位就是一个0或者1(比特位是二进制)
即:1个int占有32个二进制位(bit位)
变量的三要素:
变量的数据类型
变量的值
变量的名称
类型决定变量的大小
起个名字是为了以后方便访问(以后在程序中访问这个数据是通过名称来访问的)
值是变量保存的数据
问题?变量名属于标识符吗?
属于,命名规范:首字母小写,后面每个单词首字母大写,遵循驼峰命名方式,见名知意。
public class VarTest01{
public static void main(String[] args){
System.out.println(100);
System.out.println(3.14);
System.out.println(true);
System.out.println(false);
System.out.println('a');
System.out.println('中');
System.out.println("abc");
System.out.println("国");
//什么是变量?
//分析:如果只有字面量,没有变量机制会有什么问题?
//内存说明:10是一个数据,在内存中占用一定的 空间
//10+20=30:在内存中找出一块空间存储10,再找一块存储20,CPU负责“+”,得出的结果30再找一块空间存储
//思考:以下的10占用一块还是三块空间?答案:虽然都是10,但占用三块
System.out.println(10);
System.out.println(10);
System.out.println(10);//只有字面量机制会重复占用内存空间
//定义/声明一个变量,起名i
int i=1000;
//以下这5次访问都是访问的同一块内存空间(使用变量后,内存得到了重复利用)
System.out.println(i);
System.out.println(i);
System.out.println(i);
System.out.println(i);
System.out.println(i);
//以下程序表示访问的是字符i及字符串i,和变量没有关系!
System.out.println('i');
System.out.println("i");
}
}
3、变量怎么声明/定义,语法格式是什么?
数据类型 变量名;
例如:
int nianLing;
public class VarTest02{
public static void main(String[] args){//这是一个程序入口,args是main方法的参数
int nianLing=45;//定义一个int类型的变量,起名nianLing,该变量用来存储人的年龄
//问题?不对变量手动赋值可以直接访问吗?
//答:不行,编译报错,可能尚未初始化变量nianLing
//java语言中:变量必须先声明再赋值才能访问。 不赋值相当于这片存储空间没有开辟出来。
//怎么赋值呢?使用运算符"=",这个运算符被称为赋值运算符
//“=”的运算特点是:等号右边先执行,执行完了再赋值给左边的变量
//变量就相当于存放数据的一个盒子,可以重新赋值
//变量可以声明的同时赋值:int nianLing=45;
System.out.println(nianLing);
//可以这样访问k变量吗?
//注意:方法体中的代码遵循自上而下的顺序依次逐行执行
//所以以下代码会编译报错:错误,找不到符号
System.out.println(nianLing);
//只有执行了这一行代码,k变量在内存中才会开辟空间。
int k=10;
//这个可以吗?
//不行,报错:已在main(String[])中定义了变量k
//重要的结论,同一个域中,变量名不能重复声明:
int k=10;
int k=20;
//但是可以重新赋值:
int k=10;
k=20;
//这样可以吗?
//也不行:编译报错:i变量重复定义了(和类型没有关系)
//重要的结论:与类型无关的变量不能重名。
//整数型
int i=10;
System.out.println(i);
//浮点型
double i=1.2;
System.out.println(i);
//一行上可以同时声明多个变量吗
//答案:可以
int a,b,c=100;//声明三个变量,都是int类型,起名a,b,c
//但是!!!注意:这里的意思是只给变量c赋值了,a,b 并没有赋值,所以如果运行会报错:
//错误:可能尚未初始化变量a
System.out.println(a);
//错误:可能尚未初始化变量a
System.out.println(b);
System.out.println(c);
//一定要先声明再赋值才能访问,代码运行遵循自上而下的顺序
}
}
4、有关变量其他
关于变量的一个分类(要求背诵)
变量根据出现的位置进行划分:
在方法体中声明的变量:局部变量
在方法体之外,在类体内声明的变量:成员变量
注意:局部变量只在方法体中有效,方法体执行结束该变量的内存就释放了
重点的依据是:声明的位置
public class VarTest03{
//这里可以定义变量吗?可以的
//成员变量
int k=100;
public static void main(String[] args){//主方法
//局部变量
int k=100;//main方法结束k内存空间释放。
}
}
5、变量的作用域
什么是作用域:变量的有限范围;
关于变量的作用域记住一句话:出了大括号就不认识了。
编程语言中有一个很重要的原则:就近原则
哪个离我近,就先访问哪一个
public class VarTest04{
int i=100;//成员变量
public static void main(String[] args){
//局部变量
int i=200;//这个i的有限范围是main方法
System.out.println(i);//这个i是哪个i?是多少?200!!
}//大括号
public static void x(){
//在这个位置可以访问i吗?
//不行,编译报错:找不到符号。
//System.out.printlin(i)是无法访问的
//可以在这里定义一个变量起名也是i吗?
//可以,这个i在x方法的有效范围内
int i=300;//这个i跟上面main方法中的i不在同一个域当中。不冲突
}
二、数据类型
数据类型的相关内容在另一台电脑上,到时候补。
三、运算符
1、接收键盘输入
输入信息到控制台是:
System.out......
那么如何接收键盘的输入呢?
两个语句:
前提:java.util.Scanner s = new java.util.Scanner(System.in)
如果是接收一个正整数:
int num = s.nextInt();
如果是接收一个字符串:
String str = s.next();
public class KeyInput{
public static void main(String[] args){
//这行代码的意思是,创建一个键盘扫描器对象
//s是变量名,可修改,其他的不能修改。
java.util.Scanner s = new java.util.Scanner(System.in);//这行代码写一次就够了
//接收用户的输入,从键盘上接收一个int类型的数据
//代码执行到这里的时候,会暂停下来
//等待用户输入,用户可以在键盘上输入一个int类型的数据,回车之后,java把这个数据赋值给i
//i变量就是用来接收键盘数据的。
int i = s.nextInt();//i是变量名,s是上面键盘扫描器对象的变量名
System.out.println("您输入的数字是:" + i);
//代码执行到这里又会暂停下来,等待键盘的输入:
String str = s.next();
System.out.println("您输入了:" + str);
}
}
接收键盘数据的第二种方法
import java.util.Scanner
以下示例:
//更有交互性
import java.util.Scanner;
public class KeyInput02{
public static void main(String[] args){
//创建一个键盘扫描器对象
Scanner s = new Scanner(System.in);
//输出一个欢迎信息
System.out.println("欢迎使用计算器");
System.out.print("请输入第一个数字:");
int num1 = s.nextInt();
System.out.print("请输入第二个数字:");
int num2 = s.nextInt();
System.out.println(num1 + "+" + num2 + "=" + (num1 + num2));
}
}
2、算数运算符
+ 求和
- 相减
* 乘积
/ 商
% 求余数(求模)
++ 自加1
-- 自减1
//这里重点掌握++、--(重点++,--同理)
public class OperatorTest01{
public static void main(String[] args){
int a = 10;
int b = 3;
System.out.println(a + b);//13
System.out.println(a - b);//7
System.out.println(a * b);//30
System.out.println(a / b);//3
System.out.println(a % b);//1
//++可以出现在变量前,也可以出现在变量后,比如i++、++i是一样的,但还有一定的区别,下面说:
//总之,运算完了变量结果自加1;
int i = 10;
i++;
System.out.println(i);//11
//那i++跟++i的区别在哪里呢?
//先看出现在变量后,即i++:
int m = 10;
int n = m++;
System.out.println(m);//11
System.out.println(n);//10
//语法:当++出现在变量后时,会先做赋值运算再+1,
//所以上面的结果是:先把m的值赋给n,再做++运算的。
//那++在前呢?
//++在前时,先+1,再赋值
int x = 20;
int y = ++x;
System.out.println(x);//21
System.out.println(y);//21
//y的值是21.
//题目:
int k = 80;
System.out.println(k++);//80
System.out.println(k);//81
int j = 90;
System.out.println(++j);//91
System.out.println(j);//91
//注意分析println的结构,其实其内部是存在一个赋值运算过程的:
//即:先:int temp = k++;
// 再:ln(temp);
//所以上面的结果是80、81、91、91
}
}
3、关系运算符
>
>=
<
<=
==
!=
一定记住一个规则:
java语言中,所有关系运算符的运算结果都是布尔类型;
不是true就是false,不可能是其他值。
在Java语言中:
=:赋值运算符
==:关系运算符,判断是否相等。
注意:关系运算符中间不能加空格!!!!
public class OperatorTest02{
public static void main(String[] args){
int a = 10;
int b = 10;
System.out.println(a > b);//false
System.out.println(a >= b);//true
System.out.println(a < b);//false
System.out.println(a <= b);//true
System.out.println(a == b);//true
System.out.println(a != b);//false
}
}
4、逻辑运算符
& 逻辑与
| 逻辑或
! 逻辑非(取反)
&& 短路与
|| 短路或
非常重要的结论:
逻辑运算符的两边必须是布尔类型且其结果还是一个布尔类型。比如:
//100 > 99 & 100 > 98;//true
//100 < 99 & 100 < 98;//false
//即 true & true ---> true
public class OperatorTest03{
public static void main(String[] args){
//对于逻辑与来说,有假为假
System.out.println(true & true);//true
System.out.println(true & false);//false
System.out.println(true & false);//false
//对于逻辑或来说,有真为真
System.out.println(true | false);//true
//...
//对于逻辑非(取反)来说
System.out.println(!false);//true,注意!出现在表达式的前面。语法:(!(a>b)),需要加括号。
//首先来理解一下短路现象什么时候会发生?
//来看两种情况:
int q = 10;
int w = 11;
System.out.println(q > w & q > w++);
System.out.println(w);
//输出结果为false、12.
//再看:
int m = 10;
int n = 11;
System.out.println(m > n && m > n++);
System.out.println(n);
//输出结果为false、11。说明&&后,n++没有执行了
//这种现象就叫做短路现象。
//问题?什么时候会发生短路或||现象?
//或:有真为真
//即左边的表达式结果为true的时候,右边的表达式不用执行,此时会短路。比如:
int q = 10;
int w = 11;
System.out.println(q < w | q > w++);
System.out.println(w);
//输出结果为true、12.
//再看:
int m = 10;
int n = 11;
System.out.println(m < n || m > n++);
System.out.println(n);
//输出结果为true、11。说明&&后,n++没有执行了
//这种现象就叫做短路现象。
}
}
5、
赋值运算符
包括:
5.1、基本赋值运算符
=
5.2、扩展赋值运算符
+=
-=
*=
/=
%=
注意:编写的时候,两个符号之间不能有空格。
5.3、很重要的语法机制:
使用扩展赋值运算符的时候,永远都不会改变计算结果的数据类型。
比如:
byte x = 1;
x += 1;
x一出生就是byte类型,所以不论数据多大,x永远都是byte类型,超过127会强转。
但是如果:
byte x = 1;
x = x + 1;
编译的时候就会报错int类型的变量不能直接赋值给byte类型,原因是:
前面说过,不同数据类型进行混合运算,谁大听谁的,所以(x + 1)是int类型,而左边的x是byte类型。
public class OperatorTest04{
public static void main(String[] args){
//赋值运算符右边优先级比较高,先执行右边的表达式,然后将表达式执行结束的结果放到
//左边的“盒子”当中(赋值),如:
int i = 20;
System.out.println(i);//
int k = 10;
k += 20;//意思就是(k变量追加20)
System.out.println(k);//以为意思是k变量追加20,所以结果为30,类似于k = k +20.
//研究: k += 20真的与k = k +20完全一样吗?
//答案,不一样。
}
}
6、条件运算符(三目运算符):
语法格式为:
布尔表达式(true/false)?表达式1:表达式2
执行原理为:
布尔表达式的结果为true时,表达式1的执行结果作为整个表达式的结果;
布尔表达式的结果为false时,表达式2的执行结果作为整个表达式的结果;
public class OperatorTest05{
public static void main(String[] args){
//100;//这样编译能通过吗?不能,报错,不是语句。
boolean sex = false;
// sex ? '男' '女'//这样行吗?不行,三目运算符是一个运算符,不是一个语句。
//怎么修改?
char c = sex ? '男':'女';//注意,运算结果的数据类型必须要与变量的类型相同!
System.out.println(c);
}
}
7、连接运算符(+):
1、+运算符在Java中有两个作用:
作用1:求和
作用2:字符串拼接
2、什么时候求和?什么时候拼接?
当 + 两边都是数字的时候,求和;
当 + 两边的任意一边是字符串类型,拼接。
3、一定要记住,字符串拼接完之后结果还是一个字符串。
public class OperatorTest06{
public static void main(String[] args){
int nianLing = 35;
System.out.println("年龄=" + nianLing);//年龄=35
int a = 100;
int b = 200;
System.out.println(a + b + "300");//"300300"
//+两边都是数字,求和;有一边字符串,拼接。
//+的运算遵循自左向右一次运算的原则。
//如何在控制台上输出"100+200=300"?
System.out.println(a + "+" + b + "=" + (a + b) );//"100+200=300"
//定义字符串型的变量:String,属于引用数据类型。
//例如:
String name = "Jack";
System.out.println("姓名:" + name);//姓名:Jack
//输出字符串“验证成功,欢迎Jack回来”。
System.out.println("验证成功,欢迎" + name + "回来");
//口诀:加一个双引号"",""中间加两个加号++,两个加号++中间加变量名。
}
}
8、下面是6篇作业内容
//第一题 判断以下程序的输出结果:
//答案:
public class work01{
public static void main(String[] args){
int x = 10;
int a = x + x++;//先计算后自增,可以理解为先a=x+x,然后x再++,--同理
System.out.println("a=" + a);//"a=20"
System.out.println("x=" + x);//"x=11"
int b = x + ++x;
System.out.println("b=" + b);//"b=23"
System.out.println("x=" + x);//"x=12"
int c = x + x--;
System.out.println("c=" + c);//"c=24"
System.out.println("x=" + x);//"x=11"
int d = x + --x;
System.out.println("d=" + d);//"d=21"
System.out.println("x=" + x);//"x=10"
}
}
//第二题 判断以下程序的输出结果:
//答案:
public class work02{
public static void main(String[] args){
int a = 15;
int b = 2;
double c = 2;
System.out.println(a + "/" + b + "=" + (a/b));//"15/2=7"
System.out.println(a + "%" + b + "=" + (a%b));//"15%2=1"
System.out.println(a + "/" + c + "=" + (a/c));//"15/2=7.5"
System.out.println(a + "%" + c + "=" + (a%c));//"15%2=1.0" ????这里为什么是1.0不是0?
}
}
//第三题 判断以下程序的输出结果:
//答案:
public class work03{
public static void main(String[] args){
boolean x,y,z;
int a = 15;
int b = 2;
x = a > b;//true;
y = a < b;//false;
z = a != b;//true;
System.out.println("x=" + x);//"x=true"
System.out.println("y=" + y);//"y=true" ?????绕进去了,为什么不是true?
//boolean的值是程序判断的!!!!!不是你自己来说是真是假的!!!这就是原因
System.out.println("z=" + z);//"z=true"
}
}
//第四题 判断以下程序的输出结果:
//答案:
public class work04{
public static void main(String[] args){
int x;
double y;
x = (int)22.5 + (int)34.7;
y = (double) x;
System.out.println("x=" + x);//"x=56"
System.out.println("y=" + y);//"y=56.0"
}
}
//第五题 判断以下程序的输出结果:
//答案:
public class work05{
public static void main(String[] args){
int i = 5;
int j = 5;
int m = 5;
int n = 5;
i++;
j = j + 1;
m--;
n = n-1;
System.out.println(i);//6
System.out.println(i++);//6
System.out.println(++i);//8 ????意思是ln与ln也要从上到下?
System.out.println(i--);//8
System.out.println();//
System.out.println(j);//6
System.out.println(j++);//6
System.out.println(j--);//7
System.out.println(--j);//5
System.out.println();//
System.out.println(m);//4
System.out.println(n);//4
}
}
//第六题 判断以下程序的输出结果:
//答案:
public class work06{
public static void main(String[] args){
int i = 0;
int j = 0;
System.out.println(i);//0
System.out.println(j);//0
i++;
++j;
System.out.println(i);//1
System.out.println(j);//1
System.out.println("--------------");
System.out.println(i++);//1
System.out.println(++j);//2
System.out.println("--------------");
System.out.println(i);//2
System.out.println(j);//2
}
}
2.27到此结束



