Java入门01
文章目录
前序
我希望看这篇文章的是学过C语言的,因为Java前期的东西也基本是面向过程的东西,直到后面的类与对象才开始进入面向对象。学过C语言的可以很快掌握Java,学习过C++的学Java简直起飞。当然这里说的也只是基本语法,里面的核心内容还是要去研究才能真正掌握。
Java的第一个简单的程序:HelloWorld
先跟着代码走,后面再逐一解释:
public class HelloWorld{
public static void main(String[] args){
System.out.println("HelloWorld");
}
}
-
java的源文件名一定要和里面的含有main方法(在C语言中叫main函数)的类名相同,可以是中文(但尽量不要这么干)。然后java源文件的后缀是.java
-
System.out.println(“内容”);这个就是java的输出语句。其中println表示的就是输出()里面的内容后就换一行,如果改成System.out.print(“内容”);这样就不会换行。
-
Java的main方法的一般写法就是public static void main(String[] args){}。其中String[] args 可以写成String args[]
Java的注释
注释是给人看的不是给机器看的,良好的注释习惯利于开发者后续复习,同时也增加合作开发的效率。Java的注释和C语言的一样,但又比C语言多了个文档注释。
- 单行注释://注释内容
- 多行注释:/* … 注释内容 …*/
- 文档注释:/* …注释内容 …/
//单行注释,这一行里都是注释内容,机器会跳过
/*
多行注释
这一整块都是注释
可以写多行
上面那种注释只能写一行
*/
/**
* 这个就是文档注释
* 里面这里是有功能的
* @author Cukor
* @version 1
/
文档注释的一些内容
(这种注释可以用来自动地生成文档。在JDK中有个javadoc的工具,可以由源文件生成一个HTML文档。使用这种方式注释源文件的内容,显得很专业,并且可以随着源文件的保存而保存起来。也就是说,当修改源文件时,也可能对这个源代码的需求等一些注释性的文字进行修改,那么,这时候可以将源代码和文档一同保存,而不用再另外创建一个文档。)
————————————————
版权声明:本文为CSDN博主「Tr0e」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39190897/article/details/81880411
Java的基本数据类型
和C/C++的基本数据类型差不了多少的,包含整型,浮点型,长整型这些的,但是Java里面没有指针了,指针变成了引用类型,Java把指针的难度隐藏了起来。然后Java还新增了boolean类型,专门用来判断真假的。
先在这里放一张Java基本数据类型的表
-
整型
int i=10; //这里的i就是整型的意思,就是没有小数点后面的数,i的初始值是10
-
浮点型
单精度浮点型
float f=3.14f; //这里的f是单精度浮点型的意思,就是含有小数的,f的初始值是3.14 //java中为了区分单精度和双精度,一般用加后缀f或F表示
双精度浮点型
double d=3.14; //这里的d是双精度浮点型的意思,就是比单精度更精确的小数,d的初始值是3.14 //java中默认的小数是双精度浮点型
-
long和short修饰整型和浮点型
直接理解成long可以加长原来类型的可见长度,而short则相反,short是减短原来类型的可见长度
int i=999999999; //这样不行,因为数据溢出了 long i= 999999999; //这样就可以,因为int被加长了 //short就反过来
-
boolean类型
判断真假的类型,在C++中也有判断真假的类型bool类型,但是C++为了兼容C,于是把非零表示真,零表示假的特性也继承下来。而Java就没有把非零表示真,零表示假的特性也继承下来。
简单来说就是,C++中的bool类型里面的值有true和false或者1和0
java的boolean类型里面的值只有true和false
//举个代码的例子 #include<iostream> using namespace std; int main() { int i=66; //这种写法C++是成立的 if(i) { cout<<"真"<<endl; } else { cout<<"假"<<endl; } return 0; }
public class Demo{ public static void main(String[] args){ int i=66; //Java不允许这样写,因为if的()里面需要的是boolean类型而不是int类型 if(i) { System.out.println("真"); } else { System.out.println("假"); } } }
-
引用类型
Java中不是基本数据类型创建出来的变量都是引用类型,这些引用类型存在栈区,当使用它的时候需要在堆区中new一个对应的内存出来才能用。数组不是基本数据类型。
//假设这里已经存在一个MM类 public class Demo{ public static void main(String[] args){ //创建一个MM对象 MM mm=new MM(); //需要new一个内存出来才能使用 int i; i=99; //int是基本数据类型使用的时候不需要new出内存了 } }
-
数组
数组的概念在C语言的时候就学过了,但是Java的数组和C的又有些不同
直接上代码
//C语言的数组 #include<stdio.h> int main() { int arr[4]={1,2,3,4}; arr[3]=2; return 0; }
//Java的数组 public class Demo{ public static void main(String[] args){ //java规定int[]是一个整型数组的类型,定义整型数组的时候把这个写在数组名前 int[] arr=new int[4]; //java的数组要使用的时候先new出内存才能使用 arr[3]=2; //当然Java也可以保留C的风格把[]写在数组名的后面,但是中括号里什么都不写 int array[]; //这里声明是正确的,但是还没有分配内存 array=new int[4];//这里才开始分配内存,中括号里可以填常量也可以填变量,但是申请完内存后,数组长度就不能改变了 } }
Java的标识符和关键字
标识符
用户自定义命名的变量或对象
标识符的一般条件:
- 英文字母、数字、下划线、$四类的组合(和C相比就是多了$)
- 不能以数字开头
- 不能是关键字(因为关键字已经被附有特殊含义)
- 标识符尽量见名知意
- '$'不要在代码中出现。(后面的内部类中,编译后会出现$符号)
推荐:直接像C语言一样用就行,原来C语言怎么用Java就怎么用即可。语言有很多东西并不是要求全会用,有些东西从入门到退休都不一定能用得到。
命名规范:
- 类名和接口名:大驼峰(例如:MyClass)
- 方法名(C语言中是函数名):小驼峰(例如:getName)
- 常量名:大写英文字母,用下划线间隔(例如:MAX_NUMBER)
关键字
在Java诞生的时候一些文字就已经被定义成是特殊的含义,这些文字就是关键字。直接看表吧。
随着代码写得越多,这些关键字也会自然而然的熟记,没必要背,背了容易忘,还不如用到哪个就查哪个,写多了想忘都难。
这里就简单的用几个关键字
int i=99; //定义了一个整型变量i,初值为99
if(i>0){
System.out.println(i+"是正数");
//条件i>0为真的话输出:99是正数
}else if(i<0){
System.out.println(i+"是负数");
//条件i>0为假且条件i<0为真的话输出:99是负数
}else{
System.out.println(i+"是零");
//条件i>0为假且条件i<0为假的话输出:99是零
}
上面的代码中: int if else都是关键字。
注意:Java中没有关键字goto,使用了标签代替它的功能。
Java的基本运算符
数据和数据之间的联系就是通过运算符实现的,计算机的基本功能就是计算。使用Java语言和计算机交流,就要从简单的计算开始,那么我们想让计算机计算,那就需要运算符。编程语言都是相通的,在C语言学的运算符的概念和Java中是差不多的。
'='表示的是赋值,是把等号的右边的值赋值给左边的变量
int i=99; //就是把99赋值给iint j=i; //就是把i的值赋值给j
直接看表吧,等下再简单的使用几个。
简单实用几个运算符:
//计算规从1加到100的值
public class Demo{
public static void main(String[] args){
int i=1; //使用了赋值运算符 '=' 这个不是等于号 等于号是这个 '=='
int sum=0; //使用了小于等于号:'<='
while(i<=100){
sum+=i; //使用了复合运算符+=
//上面这句代码等效于 sum=sum+i;
i++; //使用了自增运算符 等效于 i=i+1;
}
}
}//大括号括起来的表示一个块,通常是表示一个生命周期。在大括号里面的变量,出来大括号之后就不存在了
Java的基本输入输出
-
Java的输出
由上面的HelloWorld程序就可以看到Java的基本输出了,println表示输出内容后就会换行,print表示输出内容后不会换行
如果Java的连续输出需要中 ‘+’ 连接
System.out.println("Hello"+"world"+"\t"+"this is Java"); //输出HelloWorld this is Java
Java可以直接输出变量的值
int i=99;System.out.println("i= "+i); //输出i=99
-
Java的输入
Java的输入和C/C++是有点区别的
//C语言是这样的 #include<stdio.h> int main() { int i; scanf("%d",&i); //C语言的基本输入 return 0; }
//C++是这样的 #include<iostream> int main() { int i; std::cin>>i; return 0; }
//Java是这样的 import java.util.Scanner; //需要写这个,导入 public class HelloWorld{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); //用Scanner类 创建一个引用对象,然后这个引用指向Scanner的一个内存,初始化System.in表示从键盘获取内容 int i; i=sc.nextInt(); //整型的输入就用nextInt(),对应的double型就用nextDouble() sc.close(); //使用完输入了之后就关闭,为内存做考虑 } }
从代码上看,Java的输入真的是要求挺多的,还是C/C++比较简洁。Java的过于繁杂,所以Java初学的时候还是先用命令行加记事本的方式去写java程序,这样有助于Java的代码的熟练,达到一定程度之后就改用IDE来写。这个达到的程度就是你感觉自己闭着眼睛都能写出Java的基本的语句这样就算是达到Java的基本功要求了,然后就可以转向IDE写。使用IDE写Java程序你会发现好写很多,有各种快捷键而且会智能报错,记事本不会,但前期还是建议先使用记事本写。
写Java程序个人就比较推荐intelij IDEA
Java的基本结构
无非就是那三个结构:顺序、选择、循环
-
顺序结构
从上到下依次进行,Java源文件中以类为单位,在类中的函数是可以无序的,但是类必须是有序的。
public class Demo{ public static void main(String[] args){ int i=9; int j=4; int result=Max(i,j); System.out.println(result); //输出9 } public static int Max(int i,int j){ return i>j?i:j; } }
在C中main()函数是一个主函数,Max是一个子函数,在主函数中调用Max函数,是要把Max写在main函数上面或者在main函数上面声明Max函数。但在Java里面,函数都是在类里面的,类中的函数被称为成员函数,所以在类中的函数是没有顺序要求的。但是Java中,类和类之间就有顺序要求了。
public class Demo{ public static void main(String[] args){ MM mm=new MM(); //程序在 这里就会报错,没有找到MM mm.name="ILoveyou"; mm.age=19; } } class MM{ String name; int age; }
修改上面的错误只需要把MM类放在Demo类上面。
-
选择结构
一、if-else
翻译成:如果什么就怎样,否则就怎样
//1>3这个表达式得到的是一个boolean类型的要么true要么false if(1>3){ System.out.println("真"); }else{ System.out.println("假"); }
直接把上面的程序翻译:如果1>3就输出真,否则输出假。
if的括号里面必须是boolean类型不能是其他类型,C++允许但Java不允许。
可以if嵌套也可以连着写if-else if-else if-else
C语言里怎么用Java就怎么用,就是if括号里表达式的结果必须是boolean类型。
二、switch-case-default
switch开关语句,引文翻译switch就是开关,case就是情况,default就是默认。那一套switch下来的翻译就是:什么属于什么情况,有对应的情况就走哪个情况的路,没有就走默认的路,如果默认的路也没有就直接跳出开关语句;如果进入了某个情况后就执行这个情况里的东西,直到遇到break跳出,如果没有break就把后续的东西全部执行最后从开关语句出来。
说了那么多还不如直接看代码
switch(1+5){ case 0: System.out.println("case 0"); break; case 1: System.out.println("case 1"); case 6: System.out.print("case 6"); case 10: System.out.println("case 10"); break; default: System.out.println("default"); }//最后的结果是:case 6case10
解析上面的代码:根据1+5的值是6,然后进入case 6,输出case 6没有换行,因为没有break,所以把case 10里面的case 10也输出出来,然后遇到break就跳出switch。
所以最后的输出结果是case 6case10当然case 和case还有default之间没有书写顺序要求。
default可以写在最上面也可以写在中间。
case之间也可以先写case 2然后再写case 1 -
循环结构
三大循环:内容和C的一样
- for循环
- while循环
- do-while循环
直接看代码了
//输出1~10的奇数 public class Demo{ public static void main(String[] args){ System.out.println("while循环的方式: "); int i=1; while(i<=10){ if(i%2==1){ System.out.print(i+"\t"); } i++; } System.out.println(); System.out.println("for循环的方式: "); for(i=1;i<=10;i++){ if(i%2==1){ System.out.print(i+"\t"); } } System.out.println(); System.out.println("do-while循环的方式: "); i=1; do{ if(i%2==1){ System.out.print(i+"\t"); } i++; }while(i<=10); } }
值得注意的就是这几个循环里面的判断循环条件的时候需要的类型也是boolean类型。
while(这个位置),for( ;这个位置; ),do{}while(这个位置);
还有的就是for循环在遍历数组的时候有一个新的用法,在C++里也有这个用法,但是C语言没有。
//遍历数组中的元素 import java.util.Scanner; public class Demo{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); //定义一个整型数组 int[] arr=new int[10]; //既然学Java那就习惯使用Java的风格 System.out.println("请输入数组的元素:"); for(int i=0;i<10;i++){ arr[i]=sc.nextInt(); } //使用新的遍历方法 for(int i:arr){ System.out.print(i+"\t"); } sc.close(); } }
从代码中也可以看到所谓的新就在于
for(int i:arr){ System.out.print(i+"\t"); }
这里的意思就是从arr的数组中提取元素赋值给i,然后把i输出出来,直到遍历完整个arr数组。
使用这种新版的for循环可以省下很多代码量,在C++中的新版for循环比Java还有方便,因为C++有自动推断类型auto
int arr[]={1,2,3,4,5,6}; for(auto v:arr) { cout<<v<<'\t'; } cout<<endl; /* 输出结果: 1 2 3 4 5 6 */
Java的跳出语句
-
break
在循环中的作用:跳出当前循环,执行循环下面的代码。
在开关语句中的作用:跳出开关语句
-
continue
只能在循环中使用,其作用是:结束当前循环执行下一次循环
Java中没有goto了,但还暗含着goto的用法,就是结合break或continue来一起用。也就是标签。
//break和continue的测试
public class Demo{
public static void main(String[] args){
for(int i=0;i<=10;i++){
if(i>=4){
break; //当程序走到这里的时候会跳出下面的space处
}
else{
System.out.println(i);
}
} //space
/*
输出结果:
0 1 2 3
*/
//space_2
for(int i=0;i<=10;i++){
if(i<=4){
continue; //当程序走到这里的时候会跳出下面的space_2处
}
else{
System.out.println(i);
}
}
/*
输出结果:
5 6 7 8 9 10
*/
}
}
使用标签:
当我们的程序中有多层循环的时候,使用break跳出只能跳出一层循环,在C语言中就有一个goto关键字可以跳出多层循环,而Java中是没有goto的,但是Java有标签,是结合break和continue使用的。
标签的注意事项:
- 标签也是标识符,命名的时候按着标识符的标准来
- 标签只能写在循环的前面,不能写在循环后面
- break+标签是跳出多层循环
- continue+标签是结束当前多层循环,直接进入下一次循环
简单代码例子:
continue+标签
//输出101到1000的素数,要求使用标签
public class Demo09 {
public static void main(String[] args) {
int i;
here:for(i=101;i<1000;i++){
for(int j=2;j<i;j++){
if(i%j==0){
continue here;
}
}
System.out.println(i);
}
}
}
break+标签
public class Demo10 {
public static void main(String[] args) {
int i=11;
here:while(i<30){
for(int j=3;j<5;j++){
if(i%j==0){
break here;
}
}
System.out.println("循环没结束i="+i);
i++; //自增 相当于 i=i+1;
}
System.out.println("循环已结束i="+i);
}
}
/*
输出结果:
循环没结束i=11
循环已结束i=12
*/