1024程序员节,水一期拿波徽章嘻嘻
Java语言环境的关系(JDK、JRE、JVM关系)
JDK = JRE + 开发工具集(例如Javac编译工具等)
JRE = JVM + Java SE标准类库
HelloWorld程序
class HelloChina {
public static void main(String[] args){
System.out.println("Hello World!");
}
}
使用javac HelloWorld.java
编译,使用java HelloChina
执行字节码文件
public后的类名和文件名必须一致
在一个java源文件中可以声明多个class。但是,只能最多有一个类声明为public的。
而且要求声明为public的类的类名必须与源文件名相同
程序的入口是main()方法,格式是固定的。
关键字与保留字
定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
特点:关键字中所有字母都为小写
标识符
Java对各种变量、方法和类等要素命名时使用的字符序列称为标识符
技巧:凡是自己可以起名字的地方都叫标识符
定义合法标识符规则:
由26个英文字母大小写,0-9 ,_或 $ 组成
数字不可以开头。
不可以使用关键字和保留字,但能包含关键字和保留字。
Java中严格区分大小写,长度无限制。
标识符不能包含空格。
Java中的名称命名规范
包名:多单词组成时所有字母都小写: xxxyyyzzz
类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz(驼峰式)
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
变量
class VariableTest {
public static void main(String[] args) {
//变量的定义
int myAge = 12;
//变量的使用
System.out.println(myAge);
//变量的声明
int myNumber;
//变量的赋值
myNumber = 1001;
System.out.println(myNumber);
}
}
使用变量注意:
Java中每个变量必须先声明,后使用
使用变量名来访问这块区域的数据
变量的作用域:其定义所在的一对{ }内
变量只有在其作用域内才有效
同一个作用域内,不能定义重名的变量
byte:1字节=8bit位 范围 -128~127
https://blog.csdn.net/qq_23418393/article/details/57421688
class VariableTest1 {
//byte范围:-128~127
byte b1 = 12;
byte b2 = -128;
//b2 = 128;//编译不通过
System.out.println(b1);
System.out.println(b2);
//声明long型变量,必须以"1"或"L"结尾
short s1 = 128;
int i1 = 1234;
long l1 = 3414234324L;
System.out.println(l1);
//浮点型
//表示带小数点的数值
//float表示数值的范围比long还大
double d1 = 123.3;
System.out.println(d1 + 1);
//定义float类型变量时,变量要以"f"或"F"结尾
float f1 = 12.3F;
System.out.println(f1);
//通常,定义浮点型变量时,选用double
//字符型
//定义char型变量,通常使用一对'',内部只能写一个字符
char c1 = 'a';
System.out.println(c1);
//表示方法:1、声明一个字符 2、转义字符
char c5 = '\n';//换行符
// c5 = '\t' //制表符
System.out.print("Hello"+c5);
System.out.println("world")
//布尔型:boolean
//只能取两个值之一:true、false
//常常在条件判断、循环结构中使用
boolean bb1 = true;
System.out.println(bb1);
boolean isMarried = true;
if(isMarried){
System.out.println("祝你有一个温暖的家庭");
}else{
System.out.println("找个女朋友!");
}
}
基本数据类型之间的运算规则:
前提:这里讨论的只是7种基本数据类型变量间的运算。不包含boolean类型的
1.自动类型提升:
结论:当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型
byte 、 char 、 short --> int --> long --> float --> double
特别的:当byte、char、short三种类型的变量做运算时,结果为int型
class VariableTest2 {
public static void main(String[] args){
byte b1 = 2;
int i1 = 129;
//编译不通过
//byte b2 = b1 + i1;
int i2 = b1 + i1;
long l1 = b1 + i1;
System.out.println(i2);
float f = b1 + i1;
System.out.println(f);
char c1 = 'a';
int i3 = 10;
int i4 = c1 + i3;
System.out.println(i4);
short s2 = 10;
//char c2 = c1 + s2;//编译不通过
}
}
2.强制类型转换:
自动类型提升运算的逆运算
1.需要使用强转符:()
2.注意点:强制类型转换,可能导致精度损失。
class VariableTest3 {
public static void main(String[] args){
double d1 = 12.3;
int i1 = (int)d1;//截断操作
System.out.println(i1);
//没有精度损失
long l1 = 123;
short s2 = (short)l1;
//精度损失举例2
int i2 = 128;
byte b = (byte)i2;
System.out.println(b); //-128
}
}
一些注意点:
class VariableTest4 {
public static void main(String[] args){
//编码情况:
long l = 123213;
System.out.println(l);//编译通过,因为此时的l默认为int型
//编译失败:过大的整数
//long l1 = 21332423235234123
long l1 = 21332423235234123L;
//编译失败
//float f1 = 12.3;
//2.编码情况2:
//整型常量,默认类型为int型
//浮点型常量,默认类型为double型
byte b = 12;
//byte b1 = b + 1;//编译失败
//float f1 = b + 12.3;//编译失败 高精度不能直接转换为低精度
}
}
String类型变量的使用
1.String
属于引用数据类型,翻译为:字符串
2.声明String类型变量时,使用一对""
3.String
可以和8种基本数据类型变量做运算,且运算只能是连接运算 :+
4.运算的结果仍然是String类型
class StringTest {
public static void main(String[] args) {
String s1 = "Hello World!";
System.out.println(s1);
String s2 = "a";
String s3 = "";
//char c = '';//编译不通过,至少放个空格
int number = 1001;
String numberStr = "学号:";
String info = numberStr + number;// +:连接运算
boolean b1 = true;
String info1 = info + b1;
System.out.println(info1);
//练习1
char c = 'a'; //97
int num = 10;
String str = "hello";
System.out.println(c + num + str);//107hello
System.out.println(c + str + num);//ahello10
System.out.println(c + (num + str));//a10hello
System.out.println((c + num) + str);//107hello
System.out.println(str + num + c);//hello10a
//练习2
//* *
System.out.println("* *");
System.out.println('*' + "\t" + '*');
System.out.println('*' + ('\t' + "*"));
}
}
运算符
int a1 = 10;
int b1 = ++a1;
System.out.println("a1 = " + a1 + ",b1 = " + b1);
int a2 = 10;
int b2 = a2++;
System.out.println("a2 = " + a2 + ",b2 = " + b2);
//(前)++:先自增1,然后再运算
//(后)++:先运算,后自增1
赋值运算符
+=、-=、*=、/=、%=
逻辑运算符
“&”和“&&”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。
异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。
理解:异或,追求的是“异”!
位运算符
三元运算符
凡是可以使用三元运算符的地方,都可以改写为if-else
反之,不成立。
Scanner
如何从键盘获取不同类型的变量:需要使用Scanner类
具体实现步骤:
1.导包:import java.util.Scanner;
2.**Scanner
**的实例化
3.调用Scanner类的相关方法,来获取指定类型的变量
import java.util.Scanner;
class ScannerTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
System.out.println(num);
}
}
算法
判断素数算法(优化后):
class PrimeNumberTest {
public static void main(String[] args) {
boolean isFlag = true;
//获取当前时间距离的毫秒数
long start = System.currentTimeMillis();
//优化二:对本身是质数的自然数是有效的。
for(int j = 2; j <= Math.sqrt(i); j++) {
if(i % j == 0){
isFlag = false;
break;//优化一:只对本身非素数的自然数是有效的。
}
}
if(isFlag == true){
System.out.println(i);
}
//重置isFlag
isFlag = true;
}
//获取当前时间距离的毫秒数
long end = System.currentTimeMillis();
System.out.println("所花费的时间: " + (end - start));
}
break和continue
break:结束当前循环,默认跳出包裹此关键字最近的一层循环
continue:结束当次循环
家庭记账程序软件
public class FamilyAccount {
public static void main(String[] args) {
String details = "收支\t账户金额\t收支金额\t说 明\n";
int balance = 10000;
boolean loopFlag = true;
do {
System.out.println("\n-----------------家庭收支记账软件-----------------\n");
System.out.println(" 1 收支明细");
System.out.println(" 2 登记收入");
System.out.println(" 3 登记支出");
System.out.println(" 4 退 出\n");
System.out.print(" 请选择(1-4):");
char key = Utility.readMenuSelection();
System.out.println();
switch (key) {
case '1':
System.out.println("-----------------当前收支明细记录-----------------");
System.out.println(details);
System.out.println("--------------------------------------------------");
break;
case '2':
System.out.print("本次收入金额:");
int amount1 = Utility.readNumber();
System.out.print("本次收入说明:");
String desc1 = Utility.readString();
balance += amount1;
details += "收入\t" + balance + "\t\t" +
amount1 + "\t\t" + desc1 + "\n";
System.out.println("---------------------登记完成---------------------");
break;
case '3':
System.out.print("本次支出金额:");
int amount2 = Utility.readNumber();
System.out.print("本次支出说明:");
String desc2 = Utility.readString();
balance -= amount2;
details += "支出\t" + balance + "\t\t" +
amount2 + "\t\t" + desc2 + "\n";
System.out.println("---------------------登记完成---------------------");
break;
case '4':
System.out.print("确认是否退出(Y/N):");
char yn = Utility.readConfirmSelection();
if (yn == 'Y') loopFlag = false;
break;
}
} while (loopFlag);
}
}
用到的工具类Utility.class:
import java.util.Scanner;
/**
Utility工具类:
将不同的功能封装为方法,就是可以直接通过调用方法使用它的功能,而无需考虑具体的功能实现细节。
*/
public class Utility {
private static Scanner scanner = new Scanner(System.in);
/**
用于界面菜单的选择。该方法读取键盘,如果用户键入’1’-’4’中的任意字符,则方法返回。返回值为用户键入字符。
*/
public static char readMenuSelection() {
char c;
for (; ; ) {
String str = readKeyBoard(1);
c = str.charAt(0);
if (c != '1' && c != '2' && c != '3' && c != '4') {
System.out.print("选择错误,请重新输入:");
} else break;
}
return c;
}
/**
用于收入和支出金额的输入。该方法从键盘读取一个不超过4位长度的整数,并将其作为方法的返回值。
*/
public static int readNumber() {
int n;
for (; ; ) {
String str = readKeyBoard(4);
try {
n = Integer.parseInt(str);
break;
} catch (NumberFormatException e) {
System.out.print("数字输入错误,请重新输入:");
}
}
return n;
}
/**
用于收入和支出说明的输入。该方法从键盘读取一个不超过8位长度的字符串,并将其作为方法的返回值。
*/
public static String readString() {
String str = readKeyBoard(8);
return str;
}
/**
用于确认选择的输入。该方法从键盘读取‘Y’或’N’,并将其作为方法的返回值。
*/
public static char readConfirmSelection() {
char c;
for (; ; ) {
String str = readKeyBoard(1).toUpperCase();
c = str.charAt(0);
if (c == 'Y' || c == 'N') {
break;
} else {
System.out.print("选择错误,请重新输入:");
}
}
return c;
}
private static String readKeyBoard(int limit) {
String line = "";
while (scanner.hasNext()) {
line = scanner.nextLine();
if (line.length() < 1 || line.length() > limit) {
System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:");
continue;
}
break;
}
return line;
}
}
就水这么多吧!