public class Hello{
public static void main(String args[]){
System.out.println("Hello World !");
}
}
[public] class 类名称 {}
1、public class 类名称{}:类名称必须与文件名称保持一致
2、class 类名称{}:类名称可以与文件名称不一致,但是编译后的*.class名称是class定义的类名称,解析的是生成的class文件的名称,在一个.java文件中可以有多个class定义,并且编译后会形成不同的.class文件;
1、关于源代码定义问题,在进行项目开发时,很少会出现 一个.java源代码里面定义有多个class的情况;
2、定义类名称时,要求每个单词首字母大写,如HelloWorld、TestDemo等;
public class 类名称 {
public static void main(String args[]){
//程序的代码由此执行
}
}
Java的主方法名称定义较长,约定俗成的主方法所在的类成为主类,所有的主类都用public class 定义。
主类用class定义不报错。
输出之后追加换行:System.out.println();
输出之后不追加换行:System.out.print();
ln即line,换行
/open 文件路径/文件名
只需编写核心结构的代码即可,减少对结构化的需求。
/exit退出
在cmd中输入 SET CLASSPATH=[字节码文件所在目录]
PATH 和 CLASSPATH 的区别:
PATH是操作系统提供的路径配置,定义所有可执行程序的路径;
CLASSPATH是由JRE提供的,用于定义Java程序解释时类加载路径,默认设置为当前所在目录加载,可以通过"SET CLASSPATH=路径"的命令形式来进行定义
JVM → CLASSPATH定义的路径 → 加载字节码文件
//单行注释
/*
多行注释
*/
/**
文档注释里面还有很多选项,一般建议通过开发工具控制
*/
abstract | assert | boolean | break | byte |
---|---|---|---|---|
class | continue | const | default | do |
enum | final | finally | float | for |
import | instanceof | int | interface | long |
package | private | protected | public | return |
super | strictfp | this | throw | throws |
volatile | while | case | catch | char |
double | else | extends | goto | if |
implements | native | new | null | short |
static | synchronized | transisent | try | void |
// int 变量名称 = 常量(10是一个常量,整数类型为int)
int x =10; // 定义了一个整型变量
x = 20;
// int 变量 * int 变量 = int 型数据
System.out.println(x*x);
10永远不变,但x是一个变量,x的内容可变。
int max = Integer.MAX_VALUE; //获取int的最大值
int min = Integer.MIN_VALUE; //获取int的最小值
System.out.println(max); //2147483647
System.out.println(min); //-2147483648
// int型变量 + int型变量 = int型计算结果
System.out.println(max+1); //-2147483648,最大值 + 1 = 最小值
System.out.println(min-1); //2147483647,最小值 - 1 = 最大值
//符号位、数字位的计算结果
这些数字在处理的时候如果超过最大保存范围,将出现循环的问题,称为数据溢出,解决方法:
1、操作时预估数据范围,范围不够就扩大使用范围;int → long
int long = Integer.MAX_VALUE;
//long型变量 + int型常量 = long型计算结果
System.out.println(max+1); //2147483648,超过int范围
2、除了定义long型变量之外,也可以直接在常量上处理,默认的整数常量都是int型,可以追加字母“L”或“l”转换常量,也可以直接使用"long"强制转换变量。
int max = Integer.MAX_VALUE;
//int型变量 + long型常量 = long型计算结果
System.out.println(max+1L);
//long型变量 + int型常量 = long型计算结果,强制转换
System.out.println((long)max+1L);
long num = 2147483649L; //数据已经超过int范围
int temp = (int)num; //long范围比int大,不能直接转换
程序支持有数据转换处理,但是不是必须的情况不建议这种转换。
byte num =20;
System.out.println(num);
正常来说,20应该是int型,但为byte赋值时并没有因为是int型而发生强制类型转换,因为Java对byte做了特殊处理,如果没超过byte范围的常量可以自动由int变为byte,如果超过就必须进行强制类型转换。
int x = 20;
byte num = (int)x;
System.out.println(num * num);
对于常量可以自动适配转换,但是对于变量还是必须强制类型转换。
// 10.2是一个小数,对应的类型为double
double x = 10.2;
int y = 10;
// double类型 * int类型 = double类型
double result = x*y;
System.out.println(result);
所有的数据类型转换都是由小类型向大类型进行自动转换。默认的类型是double,也可以定义为float变量,此时赋值应使用强制类型转换。
// 不兼容的类型报错
float x = 10.2;
// 强制类型转换
float x = (float)10.2;
float y = 10.1f;
System.out.println(x*y); //float型,103.02004
int x = 10;
int y = 4;
System.out.println(x/y); //此时计算结果是2
//将其中的一个数据类型转为double/float
System.out.println((double)x/y);
char c = 'A'; //一个字符变量
System.out.println(c);
char c = 'A'; //一个字符变量
int num = c; //可以获得字符的编码
System.out.println(num);
大写字母A-Z范围:65-90;
小写字母a-z范围:97-122;
数字字符0-9范围:48-57
通过编码范围可以发现大小写字母相差32个数字长度,由此可以实现大小写的转换处理。
char c = 'x'; //一个字符变量
int num = c; //可以获得字符的编码
num = num -32; //编码减少32
System.out.println((char)num);
char c = '仁'; //一个字符变量
int num = c; //可以获得字符的编码
System.out.println(num);
boolean flag = true;
if (flag){
System.out.println("结果为真。");
}
有些编程语言没有提供布尔类型,会使用0表示false,用非0表示true,在java中不存在。
String str = "Hello World!";
System.out.println(str);
String str = "Hello";
str = str + "World"; //字符串连接
str += "!" //字符串连接
System.out.println(str);
double x = 10.1
int y = 20;
String str = "计算结果:" + x + y;
System.out.println(str); //结果为10.120
String str = "计算结果:" + (x + y);
System.out.println(str); //结果为30.1
int num = 10;
//操作步骤多
num = num + 20;
//操作步骤少,结果相同
num += 20 ;
System.out.println(num);
char c ='建';
boolean flag = 24314 == c; //true
System.out.println(flag);
数据类型之间提供转型支持,在判断时字符会直接转换为int进行比较。
int x = 10;
int y = 20;
int max = x>y?x:y;
System.out.println(max);
// 保存三个数字之中最大值
int x = 10;
int y = 20;
int z = 15;
int max = x>y?(x>z?x:z):(y>z?y:z);
System.out.println(max);
虽然允许嵌套,但是程序可读性降低。
//与计算:观察x、y的二进制和结果的二进制可知,都为1时结果为1,其余为0
int x = 13;
int y =7;
System.out.println(x&y); //与计算结果为5
//或计算:观察x、y的二进制和结果的二进制可知,只要有一位为1时结果就为1,只有两位为0结果为0
int x = 13;
int y =7;
System.out.println(x|y); //与计算结果为15
请解释&和&&、|和||的区别:
&和|两个运算符可以进行位运算和逻辑运算:在进行逻辑运算的时候所有的判断条件都要执行;在进行位运算的时只是针对当前的数据进行与和或处理;
在逻辑运算上还可以使用&&和||:&&在若干个条件判断时,如果前面的条件返回了false,后续条件不再判断,结果为false;||在若干个条件判断时,如果前面的条件返回true,后续条件不再判断,结果为true。
if(布尔表达式){
//条件满足时执行;
}
if(布尔表达式){
//条件满足时执行;
}else{
//条件不满足时执行
}
if(布尔表达式){
//条件满足时执行;
}else if (布尔表达式){
//条件满足时执行;
}else{
//上述条件都不满足时执行
}
switch(数据){
case 数值:{
//数值满足时执行;
[break;]
}
case 数值:{
//数值满足时执行;
[break;]
}
case 数值:{
//数值满足时执行;
[break;]
}
[
default:
//所有判断数值不满足时执行;
[break;]
]
}
while(布尔表达式){
//条件满足时执行;
//修改循环条件
}
do{
//条件满足时执行;
//修改循环条件
}while(布尔表达式)
int sum = 0;
int num = 1;
while(num<=100){
sum += sum;
num++;
}
System.out.println(sum);
int sum = 0;
int num = 1;
do{
sum += sum;
num++;
}while(num<=100)
System.out.println(sum);
for(定义循环的初始化数值;循环判断;修改循环数据){
//循环语句执行
}
int sum = 0;
for(int x = 1; x <= 100 ; x++){
sum += x;
}
System.out.println(sum);
for(int x=1 ; x<=9 ; x++){
for(int y=1 ; y<=x ;y++){
System.out.print(y + "*" + x + "=" + x*y + "\t");
}
System.out.println();
}
int line = 5;
for(int x=0 ; x<line ; x++){
for(int y=0 ; y<line - x ;y++){
System.out.print(" ");
}
for(int y=0 ; y<= x ;y++){
System.out.print("* ");
}
System.out.println();
}
public/protected/private [static] 返回值类型 方法名称([参数类型 变量名]){
//执行代码
[return [返回值];]
}
关于方法名称与变量的定义命名要求:
在定义方法名时要求第一个单词的字母小写,而后每个单词的首字母大写。
在定义变量名时要求相同。
public static void main(String[] args)
{
printMessage();
}
public static void printMessage(){
System.out.println("Hello World!");
}
public static void main(String[] args)
{
String result = get(10);
System.out.println(result);
System.out.println(get(10));
}
public static String get(double num){
if (num>=10.0){
return "Hello World!" + num;
} else {
return "Wrong Num!";
}
}
public static void get(num){
if (num>=10.0){
System.out.println("Hello World!" + num);
} else {
return ;
}
}
public static void main(String args[]){
int resultA = sum(10,20); //调用两个int参数的方法
int resultB = sum(10,20,30); //调用三个int参数的方法
double resultC = sum(10.2,20.3);//调用两个double参数的方法
}
public static int sun(int x,int y){
return x+y;
}
public static int sun(int x,int y,int z){
return x+y+z;
}
public static double sun(double x,double y){
return x+y;
}
System.out.println(1);
System.out.println(1.1);
System.out.println('A');
System.out.println("Hello World!“);
可以发现,所有的输出操作支持各种数据类型,所以System.out.println()就属于方法重载。
public static int sum(int num){ //执行累加
if(num == 1)
return 1;
return num + sum(--num);
}
第一次执行sum(),由主方法调用:return 100 + sum(99);
第二次执行sum(),由sum()递归调用:return 99 + sum(98);
…
第九十九次执行sum(),由sum()递归调用:return 2 + sum(1);
第一百次次执行sum(),由sum()递归调用:return 1;
整体形式: return 100 +99 + 98 + … … + 2 + 1;
//递归实现
public static void main(String args[]){
sum(90);
}
public static double fan(int num){
if(num == 1)
return 1;
return num * fan(num -1);
}
public static sum(int num){
if(num == 1)
return 1;
return fan(num)+sum(num-1);
}