变量命名
命名规范:编译器虽然不检查但是需养成程序员的基本职业素质。
- 项目:全小写
- 包:全小写
- 类:大驼峰(每个单词首字母大写)
- 变量:小驼峰(第一个单词全小写,从第二个单词的首字母大写)
int age;
String name;
String studentName;
int studentAge;
== 语法规范:强制要求 ==
- 可以使用字母、数字、下划线_、美元符号$
- 不能以数字开头
- 不能使用Java关键字和保留字
关键字:就是一个单词被Java占用了,是编码时用来构成程序结构的,有特定含义,用在特定的地方。在集成开发环境中,有高亮演示。
保留字:goto const:是C/C++的关键字,Java的底层是使用C/C++实现的
进制转换
计算机时基于数字电路的,底层时基于二进制
位:bit,最小单位
字节:byte,1 byte=8 bit(1B=8b),二进制中的基本数据单位
1 kb=1024 b
1 mb=1024 K
1 gb=1024 M
1 tb=1024 g
十进制:
十个基数:0-9
逢十进位
R进制:
R个基数
逢R进位
十进制 二进制 八进制 十六进制
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 10 8
9 1001 9
10 1010 A
15 F
16 10
十进制:
1234:(10)=4* 10^0 +3 * 10^3 +2*10^2+ 1 *10^3
二进制转成十进制:
1011:(2)=1 * 2^0 + 1 * 2^1 +0 *2^2 +1 *2^3=11:(10)
R进制转成对应的十进制:
权:按权相加
十进制转二进制:
11/2=5…1
5/2=2…1
2/2=1…0
1/2=0…1
余数反过来写 1011–(2)
十进制转R进制:
辗转相除:
八进制:
八个基数,逢8进一 0-7
十六进制:
十六个基数,逢16进一 0-9,A,B,C,D,E,F
八、十六进制的转换
11011(2)
33(8)
1B(16)
原码、反码、补码
计算机为了区分正负数,最高位,不是代表权重,而是符号位(0代表正数,1代表负数)
原码:最高位是符号位,其它位代表实际值的权
+7 00000111
-7 10000111
反码:
+7 00000111 正数的反码和原码相同
-7 11111000 负数的符号位不变,其它位按位取反(0变1,1变0)
补码:
+7 00000111 正数的原反补都相同
-7 11111001 负数补码是反码+1
计算机存储数据使用的是补码,减法运算都可以转成加法做
7-2=7+(-2)
-2的原码 10000010
-2的反码 11111101
-2的补码 11111110
00000111
+ 11111110
-------------------------
100000101
00000101(2)=5(10)
内存中一个字节存储11111101,对应的十进制的数是多少
11111101:最高位1,负数,补码
-1编程反码 11111100
变成原码 10000011
byte 1个字节 -128 127
00000000 0
01111111(2) 127(10)
11111111 补码 (负数最大)
11111110 反码
10000001 原码 -1(10)
10000000 (负数最小) -128
数据类型范围
public static void main(String[] args) {
//字面值常量
System.out.println(1);
System.out.println(1.1);
System.out.println('a');
int a=123;
System.out.println(Long.MAX_VALUE);
//整型字面值常量默认是int,给long赋值后面L,大小写都可以,建议使用大写
long b=99999999999L;
double d=1.1;
//浮点数字面值常量默认是double,后面添加F
float e=1.1F;
}
赋值运算符
= 等号右边的只给左边
变量=字面值常量;
变量=有值的另一个变量;
变量=表达式;
表达式就使用运算符连接的式子
public static void main(String[] args) {
//同时声明多个变量,只给c赋值
int a,b,c=1;
a=b=c;
System.out.println("a="+a+",b="+b+",c="+c);
int d=1,e=1,f=1;
int i,j,k;
i=j=k=1;
}
算术运算符
”+“ 加 "-"减 *乘法 /除法 %模运算(求余数)
public static void main(String[] args) {
int numA=10,numB=3;
//+能做算术加法,就是算术运算
System.out.println(1+1);
//不能做算法运算,就是字符拼接 "10"+"abcdef"
System.out.println(numA+"abcdef");
System.out.println(1+1+"aaa");
System.out.println("aaa"+1+1);
//运算符有优先级:没有必要记忆,使用()改变优先
//无论多少层都使用(),先算内层,再算外层
System.out.println((1+(5+6)*7)*3);
System.out.println(numA+"+"+numB+"="+(numA+numB));
System.out.println(numA+"-"+numB+"="+(numA-numB));
System.out.println(numA+"*"+numB+"="+(numA*numB));
System.out.println(numA+"/"+numB+"="+(numA/numB));
System.out.println(numA+"%"+numB+"="+(numA%numB));
//整数除以整数只有整数商,除不尽没有小数
System.out.println(10/3);
System.out.println(10/3.0);
System.out.println(10.0/3);
}
+= -= *= /= %=
从右往左运算
//b=b+5;
b+=5;
目:运算符在运算时,参与操作的运算数的格式
单目运算符
+正
-负
++
--
双目运算符
三目运算符
++ 自己+1
-- 自己-1
public static void main(String[] args) {
// int i=1;
// //无论在前还是在后,这条语句执行结束以后,一定会+1
// //i++;
// //++i;
// System.out.println(i);
// int j=1;
// //++在后:先用后加,输出使用的还是原来的值,输出使用结束以后再+1
// System.out.println(j++);
// System.out.println(j);
// int k=1;
// //++在前:先加后用,先对k+1,在输出使用+1以后的的值
// System.out.println(++k); //k=2
// System.out.println(k); //k=2
// int m=1;
// //m=1; s=1 m=2
// //s=1+2 m=3
// //s=1+2+3 m=4
// int s=(m++)+(m++)+(m++);
// System.out.println(s);
// System.out.println(m);
int n=1;
// n=1 r=2 n=2
//r=2+3 n=3
//r=2+3+4 n=4
int r=(++n)+(++n)+(++n);
System.out.println(r);
System.out.println(n);
}
键盘输入
//声明包:告诉系统,当前包在哪个保重
package com.woniuxy.test;
//导入包:当前类要使用其它类,告诉系统,你要用的类在哪个包中
//一定要写在:package之后,定义类之前
import java.util.Scanner;
public class MyTest08 {
public static void main(String[] args) {
//控制输出:JRE有类库,实现了编程中常用的方法
//键盘输入:要使用Scanner这个类
//1、导入包:
//2、创建Scanner类的对象
//类(数据类型) 对象(变量)
Scanner scanner=new Scanner(System.in);
System.out.println("输入年龄:");
//调用方法,将键盘输入的数据,赋值给变量
int age=scanner.nextInt();
System.out.println("age:"+age);
}
}
//方法是一个操作 加法运算
//方法参数:参与操作的数 加数、被加数
//方法返回值:方法调用结束,给调用者一个数据 计算结果,和
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("输入姓名");
String name=scanner.next();
System.out.println("输入年龄");
//输入的数据,没有赋值给变量保存
int age=scanner.nextInt();
System.out.println("输入成绩:");
double socre=scanner.nextDouble();
System.out.println("name:"+name);
System.out.println("age:"+age);
System.out.println("socre:"+socre);
}
基本数据类型——类型转换
前提:兼容数据类型才能转换,与boolean类型无关
自动类型转换(隐式转换)
目标类型大于源类型: 大空间变量(目标类型)=小空间变量(源类型)
byte short int long
float double
转换规则:
byte,short,char—int—long—float—double
byte,short,char相互之间补转换,他们参与运算首先转换为int类型
public static void main(String[] args) {
// int i=1;
// long j=i;
//整数的字面值常量是int
//long i=9999999999L;
//字面值常量是int,如果字面值常量没有超出byte的范围,可以赋值
byte b1=123;
//error
//byte b2=128;
//这个地方是变量赋值,有强制类型检查
int i=123;
//error
//byte b3=i;
}
public static void main(String[] args) {
int i=1;
float f=1.1F;
//=int+float结果float
//error
//int m=i+f;
float f2=i+f;
double d=1.1;
//=int+float+double结果double
double d2=i+f+d;
// byte b1=1;
// byte b2=2;
// byte b3=b1+b2;
int m=1;
short s1=1;
//error
//short s2=m;
short s2=5;
//error
//short s3=s1+s2;
}
强制类型转换(显式转换)
目标类型小于源类型:
目标类型(接收)=(强制转换的类型)源类型
强制类型转换可能丢失精度
public static void main(String[] args) {
byte b1=1;
byte b2=2;
byte b3=(byte)(b1+b2);
System.out.println(b3);
int i=1;
long j=1;
i=(int) j;
//精度丢失
int a=123;
double d=12.345;
//浮点数强制转换成小数,会截断小数部分
a=(int) d;
System.out.println(a);
int m=130;
byte b4=(byte) m;
System.out.println(b4);
}
字符和数字时兼容类型
public static void main(String[] args) {
//Java中的字符在内存中是两个字节
//键盘接收输入字符
Scanner scanner=new Scanner(System.in);
System.out.println("输入一个字符");
//scanner.next():接收字符串
//charAt()是String的方法,charAt(0)就是获取字符串的第一字符
char c= scanner.next().charAt(0);
System.out.println(c);
}
public static void main(String[] args) {
//字符在内存中存档,仍然是01编码。对应一个整数
//'a' 97 'A' 65 '0' 48
//ASCII编码
char c = '1';
System.out.println(c);
int i=c;
System.out.println(i);
System.out.println((int)c);
char c1='中';
System.out.println(c1);
System.out.println((int)c1);
}
public static void main(String[] args) {
// int i=97;
// char c=(char) i;
// System.out.println(c);
char c1='a';
//常量不超范围
int i=1;
c1='a'+1;
System.out.println(c1);
char c2=(char) ('a'+i);
System.out.println(c2);
char c3='中';
c3='中'+5;
System.out.println(c3);
}
练习
- 交换两个数
- 同学A的数学成绩是90分,同学B的数学成绩与A相同,输出B的成绩
- 从控制台输入同学A的三门课程成绩(数学、语文、英语),编写程序实现(语文与数学分数差;3门课的平均分)
- 根据天数(78天)计算周数和剩余天数
- 已知圆的半径radius=2.5,求其面积