在一条计算机上由软件或硬件模拟的计算机或硬件模拟的计算机. JVM 读取并处理经编译后的平台无关的字节码 class 文件
java 编译器针对 java 虚拟机产生的 class 文件, 因此是独立于平台的
java 解释器负责将 java 虚拟机的代码在特定的平台上运行
类的定义 1 2 3 4 5 public class HelloWorld { public static void mian (String[] args) { System.out.println("HelloWorld" ); } }
[public] class 类名称 {}
对于类的定义有两种形式:
public class 定义: 内名称必须和文件名称一致, 在一个 java 文件里只能有一个 public 修饰的类
class 定义: 类名称可以和文件名不一致, 但是生成的是 class 定义的名称, 在一个 java 程序之中可以同时存在多个 class 的定义, 编译之后会分为不同 class 文件.
主方法 主方法表示的是一个程序的起点, 要放在一个类中, 主方法定义格式如下:public static void main(String[] args){}
系统输出 可以直接在屏幕上显示输出信息 输出不加换行: System.out.print(输出内容);
输出加换行 :System.out.println(输出内容);
classPath 配置 如果要要想执行某一个 java 程序, 那么一定要进入到程序所在的路径下才可以. 如果要想执行这个文件夹中的所有 class 文件, 则需要进入到此目录项执行, 那么如果现在希望在不同的目录下执行呢? 会提示用户找不到这个类., 这时候就需要配置 classpath
SET CLASSPATH=*.class文件所在路径
比如: classpath 配置到 d:\testjava
目录之中SET CLASSPATH=D:\testjava
结论 : 当使用 java 命令执行一个类的时候, 会首先通过 classpath 找到指定的路径, 而后在此路径下加载所需要的 class 文件 但是, 如果这样到处指定 classpath 太乱也太麻烦, 所以最好的做法还是从当前路径下加载 class 文件, 那么这个额时候往往将 classpath 设置为 “.”
面试题 : 请解释 classpath 和 path 的区别
path: 是操作系统的环境属性, 指的是可以执行命令的程序路径
classpath: 是所有 class 文件的执行路径, java 命令执行的时候将利用此路径加载所需要的 class 文件
标识符和关键字
标识符 : 由字母, 数字,_
,$ 组成, 其中不能以数字开头, 而且不能是 java 的保留字
定义变量 (标识符) 或方法时 : 第一个单词的首字母小写, 之后每个单词的首字母大写. –> String studentName ;
定义类的时候 : 第一个单词的首字母大写, 之后每个单词的首字母大写 –> class TestDemo {}
关键字 常用的几种类型:
int:
取得最大值:Integer.MAX_VALUE;
取得最小值:Integer.MIN_VALUE;
最大值 + 1 = 最小值 最小值 - 1 = 最大值 (数据溢出)
double
byte
在为 byte 赋值的时候, 如果给出的数值范围在 byte 范围内, 则自动将 int 类型变为 byte 类型, 这种操作只是在直接赋值的情况下
1 2 3 4 5 6 class Test { public static void main (String[] args) { byte = 20 ; System.out.println(b); } }
boolean : true 和 false
布尔型主要表示一种逻辑判断, 布尔是一个人命, 他发明了逻辑运算 (AND,NOT,OR)
long
char
在各个语言中, char 和 int 可以相互转换, 在 c 语言中转换的编码是 ASCII 码, 范围:
大写字母范围: 65-90
小写字母范围: 97-122
java 在定义字符的时候所使用的不是 ASCII 编码, 而是 UNICODE 编码, 这是一种使用十六进制定义的编码, 可以表示任何文字, 其中包含了中文
掌握类型之间的转换:
自动转型 (从小到大):byte–>short–>int–>long–>float–>double
强制转型 (从大到小):double–>float–>long–>int–>short–>byte
初见 String String 本事不属于 java 基本数据类型, 因为它属于一个类 (应用型数据), 但是这个类型使用起来可以像基本类型一样方便, 而且使用也很多
字符串的定义 :
String str = "aabbccdd";
字符串数组:
String[] str = {"aa","bb","cc"};
字符串连接:
String str = "Hello"; str = str + " World";
s += 1.0 和 s = s + 1.0 的区别
s += 1.0 隐含了强制转换,, 如果 s 是 int 类型, 则这句不会报错, 自动把结果强制转换为 int 类型的
而 s = s + 1.0 则没有强制转换, 如果 s 同样是 int 类型的变量, 则结果是 double 类型, 大类型转换为小类型会发生精度丢失, 如果我们没有显示强制转换, 编译器就会报错
程序逻辑
顺序结构
选择结构
(多) 条件判断: if , if…else, if..else if …else ;
(多) 数值判断: switch ….case ;
循环结构
for 循环, 知道循环次数的时候用, 用可以不用知道, 直接满足条件的时候用 break 跳出循环
while 循环 , 知道条件不满足的时候跳出循环
do…while 循环, 先循环一次, 然后判断循环条件是否满足
foreach 循环: 一种 for 循环的简单写法, 一般用来循环遍历数组.
1 2 3 4 5 6 7 8 9 10 11 class MultiplicationTable { public static void main (String[] args) { for (int i = 1 ; i <= 9 ; i ++){ for (int j = 1 ; j <= i ; j ++){ System.out.print(j+"*" +i+"=" +j*i+" " ); } System.out.println(" " ); } } }
打印一个三角
1 2 3 4 5 6 7 8 9 10 int i,j,k; for (i = 1 ; i <= 7 ; i++){ for (j = 1 ;j < 7 - i+1 ;j++) System.out.print(" " ); for (k = 1 ;k <= i*2 -1 ;k++) System.out.print("*" ); System.out.println(); }
练习
输入成绩, 判断等级
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 import javax.swing.JOptionPane;import java.util.regex.Matcher; class Demo { public static void main (String[] args) { while (true ){ String s = JOptionPane.showInputDialog(null ,"请输入成绩" ); if (s.matches("^[0-9]{1,3}$" )){ int num = Integer.parseInt(s); if (num >= 90 ) JOptionPane.showMessageDialog(null ,"等级:A" ); else if (num >= 80 ) JOptionPane.showMessageDialog(null ,"等级:B" ); else if (num >= 70 ) JOptionPane.showMessageDialog(null ,"等级:C" ); else if (num >= 60 ) JOptionPane.showMessageDialog(null ,"等级:D" ); else if (num <= 59 ) JOptionPane.showMessageDialog(null ,"不及格" ); } else if (s.equals("quit" )){ return ; } else JOptionPane.showMessageDialog(null ,"输入错误,请重新输入" ); } } }
判断一个数是不是水仙花数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import javax.swing.JOptionPane;class Demo4 { public static void main (String[] args) { while (true ){ String s = JOptionPane.showInputDialog(null ,"请输入三位数" ); int num = Integer.parseInt(s); int a = num / 100 ; int b = num % 10 ; int c = (num / 10 )% 10 ; if (a*a*a + b*b*b + c*c*c == num){ JOptionPane.showMessageDialog(null ,"是水仙花书数" ); return ; } else JOptionPane.showMessageDialog(null ,"不是水仙花数" ); } } }
求 100-999 之间的水仙花数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 class Demo5 { public static void main (String[] args) { int a ; int b ; int c ; for (int i = 100 ; i <=999 ; i++){ a = i / 100 ; b = i % 10 ; c = (i / 10 )% 10 ; if (a*a*a + b*b*b +c*c*c == i) System.out.println(i); } } }
运算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 import javax.swing.JOptionPane;public class Test2 { public static void main (String[] args) { String s1 = JOptionPane.showInputDialog(null ,"请输入第一个数字" ); String aa = JOptionPane.showInputDialog(null ,"请输入运算符号" ); String s2 = JOptionPane.showInputDialog(null ,"请输入第二个数字" ); int x = Integer.parseInt(s1); int y = Integer.parseInt(s2); switch (aa) { case "+" : { JOptionPane.showMessageDialog(null ,x+"+" +y+"=" +(x+y)); break ; } case "-" :{ JOptionPane.showMessageDialog(null ,x+"-" +y+"=" +(x-y)); break ; } case "*" :{ JOptionPane.showMessageDialog(null ,x+"*" +y+"=" +(x*y)); break ; } case "/" :{ JOptionPane.showMessageDialog(null ,x+"/" +y+"=" +(x/y)); break ; } } } }
JOptionPane 类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 import javax.swing.JOptionPane;class JOptionPaneTest { public static void main (String[] args) { JOptionPane.showMessageDialog(null , "alert" , "alert" , JOptionPane.ERROR_MESSAGE); JOptionPane.showInternalMessageDialog(frame, "information" , "information" , JOptionPane.INFORMATION_MESSAGE); JOptionPane.showConfirmDialog(null , "choose one" , "choose one" , JOptionPane.YES_NO_OPTION); JOptionPane.showInternalConfirmDialog(frame, "please choose one" , "information" , JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE); Object[] options = { "OK" , "CANCEL" }; JOptionPane.showOptionDialog(null , "Click OK to continue" , "Warning" , JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null , options, options[0 ]); String inputValue = JOptionPane.showInputDialog("Please input a value" ); Object[] possibleValues = { "First" , "Second" , "Third" }; Object selectedValue = JOptionPane.showInputDialog(null , "Choose one" , "Input" , JOptionPane.INFORMATION_MESSAGE, null , possibleValues, possibleValues[0 ]); } }
2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 import javax.swing.JOptionPane;class xunhuanTest { public static void main (String[] args) { } }
异或
1 2 3 4 5 6 7 8 9 10 11 class Demo2 { public static void main (String[] args) { int a = 5 ; int b = 8 ; a = a^b; b = b^a; a = a^b; System.out.println("a = " +a+" b = " +b); } }
输出 3-100 之间的素数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class Test4 { public static void main (String[] args) { for (int i = 3 ; i <= 100 ; i++){ boolean on_off = true ; for (int j = 2 ; j < i ; j++){ if (i % j == 0 ){ on_off = false ; break ; } } if (on_off){ System.out.println(i); } } } }
求 2 个数的最大公约数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import javax.swing.JOptionPane;class Test3 { public static void main (String[] args) { int a = Integer.parseInt(JOptionPane.showInputDialog("第一个数" )); int b = Integer.parseInt(JOptionPane.showInputDialog("第二个数" )); int a1 = 0 ; for (int i = 1 ; i <= a && i <= b; i++){ if (a % i == 0 && b % i == 0 ){ a1 = i ; } } System.out.println(a1); } }
数组的定义及初始化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import javax.swing.JOptionPane ;class Test1 { public static void main (String[] args) { int [] a = new int [10 ]; for (int i = 0 ; i <= 9 ; i++) a[i] = i+1 ; for (int j = 0 ; j <= 9 ; j++) System.out.println(a[j]); int [] a1 = new int [4 ]; for (int i = 0 ; i < a1.length ; i++){ a1[i] = Integer.parseInt(JOptionPane.showInputDialog("请输入第" +(i+1 )+"个数" )); } for (int i = 0 ;i < a1.length; i++){ System.out.println(a1[i]); } } }
字符串数组的定义及赋值
1 2 3 4 5 6 7 8 9 10 11 12 import javax.swing.JOptionPane;class Test2 { public static void main (String[] args) { String[] name = new String [3 ]; for (int i = 0 ; i < name.length; i++){ name[i] = JOptionPane.showInputDialog("请输入姓名" ); } for (int i = 0 ; i < name.length ; i++) System.out.println(name[i]); } }
求数组中最大值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 class Test3 { public static void main (String[] args) { int [] a = {4 ,58 ,34 ,50 ,21 ,42 }; int count = 0 ; int max = a[0 ]; for (int i = 1 ; i < a.length - 1 ; i ++){ if (max < a[i]){ max = a[i]; count = i; } } System.out.println("最大的数是: " + max+"最大数的下标:" +count); } }
查找字符串数组中的特定值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import javax.swing.JOptionPane;class Test4 { public static void main (String[] args) { String[] str = {"张三" ,"李四" ,"王六加二" ,"赵六" ,"田七" }; String s = JOptionPane.showInputDialog("找谁?" ); int count = -1 ; for (int i = 0 ; i < str.length ; i ++){ if (s.equals(str[i])){ count = i; JOptionPane.showMessageDialog(null ,"找到了" +"位置在:" +(count+1 )); break ; } } if (count == -1 ) JOptionPane.showMessageDialog(null ,"未找到" ); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 import javax.swing.JOptionPane;class Test5 { public static void main (String[] args) { String[] nameArray = new String [4 ]; int [] moneyArray = new int [4 ]; for (int i = 0 ; i < nameArray.length ; i ++){ nameArray[i] = JOptionPane.showInputDialog("请输入第" +(i+1 )+"个人的名字" ); moneyArray[i] = Integer.parseInt(JOptionPane.showInputDialog("请输入第" +(i+1 )+"个人的工资" )); } int max = -1 ; int bb = -1 ; for (int k = 0 ; k < moneyArray.length ; k ++){ if (max < moneyArray[k]){ max = moneyArray[k]; bb = k ; } } String s = "姓名: 工资\n" ; for (int j = 0 ; j < nameArray.length; j++){ s +=nameArray[j] + " " +moneyArray[j]+"\n" ; } JOptionPane.showMessageDialog(null ,s); JOptionPane.showMessageDialog(null ,"工资最高:" + max +"人:" +nameArray[bb]); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import javax.swing.JOptionPane;class Test6 { public static void main (String[] args) { String[] nameArray = {"阿一" ,"阿二" ,"阿三" ,"阿四" ,"阿五" ,"阿六" }; int [] moneyArray = {3500 ,8500 ,6412 ,8964 ,5105 ,6982 }; String s = JOptionPane.showInputDialog("请输入要查找的姓名:" ); int index = -1 ; for (int i = 0 ; i < nameArray.length ; i ++) { if (s.equals(nameArray[i])){ index = i; break ; } } if (index == -1 ) JOptionPane.showMessageDialog(null ,"无此人, 滚粗" ); else JOptionPane.showMessageDialog(null ,"姓名:" +nameArray[index] + " 工资:" +moneyArray[index]); } }
删除数组中某个元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import javax.swing.JOptionPane;class Test7 { public static void main (String[] args) { int [] a = {3 ,5 ,7 ,9 ,12 }; int length = a.length; for (int i = 0 ; i < a.length ; i ++) System.out.println(a[i]); int deletNum = Integer.parseInt(JOptionPane.showInputDialog("请输入一个数" )); for (int j = 0 ; j < length ; j ++){ if (deletNum == a[j]) { for (int k = j ; k < length -1 ; k ++){ a[k] = a[k+1 ]; } } } for (int i = 0 ; i < a.length-1 ; i ++) System.out.println(a[i]); } }
排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Test9 { public static void main (String[] args) { int [] a = {3 ,8 ,2 ,1 ,6 }; for (int i = 0 ; i < a.length ; i ++){ for (int j = i + 1 ; j < a.length ; j ++){ if (a[i] > a[j]) { a[i] = a[i] ^ a[j]; a[j] = a[j] ^ a[i]; a[i] = a[i] ^ a[j]; } } } for (int k = 0 ; k < a.length; k++) System.out.println(a[k]); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 import javax.swing.JOptionPane;class Demo { public static void main (String[] args) { String[] nameArray = new String [4 ]; int [] moneyArray = new int [4 ]; for (int i = 0 ; i < nameArray.length ; i ++){ nameArray[i] = JOptionPane.showInputDialog("请输入第" +(i+1 )+"个人的名字" ); moneyArray[i] = Integer.parseInt(JOptionPane.showInputDialog("请输入第" +(i+1 )+"个人的工资" )); } String s = "姓名: 工资:" +"\n" ; for (int j = 0 ; j < nameArray.length ; j++){ System.out.println(nameArray[j]+" " +moneyArray[j]); s += nameArray[j]+" " +moneyArray[j]+"\n" ; } JOptionPane.showMessageDialog(null ,"排序前:\n" +s); String temp = null ; for (int i = 0 ; i < moneyArray.length ; i ++) { for (int j = i + 1 ; j < moneyArray.length ; j++) { if (moneyArray[i] < moneyArray[j]) { moneyArray[i] = moneyArray[i] ^ moneyArray[j]; moneyArray[j] = moneyArray[j] ^ moneyArray[i]; moneyArray[i] = moneyArray[i] ^ moneyArray[j]; temp = nameArray[i] ; nameArray[i] = nameArray[j]; nameArray[j] = temp ; } } } String str = "姓名: 工资:" +"\n" ; for (int j = 0 ; j < moneyArray.length ; j++) str += nameArray[j]+" " +moneyArray[j]+"\n" ; JOptionPane.showMessageDialog(null ,"排序后:\n" +str); } }