Java入门02
Cukor丘克
Java的数组
Java数组的写法:
- 声明写法:类型[] 数组名; 这种写法没有分配内存,使用的时候先分配内存才能使用
- 定义写法:类型[] 数组名=new 类型[数组长度]; 这种是正常的写法
- 继承C语言的写法: 类型 数组名[]=new 类型[数组长度]; 但是方括号里不写东西,C语言中是写数组的长度
int[] a; //整型数组,里面装的都是整型变量,a是数组名
double[] b; //双精度浮点型数组,里面装的都是double型的变量
MM[] mm; //假设这里的MM是一个类,那么mm就是MM类型的数组,里面装的都是MM的对象
//切记,方括号里不写任何东西
上面的代码也都只是在声明一个数组名而已,还没有实际存储的空间,数组名存在栈区,数组里面要存的东西是在堆区,那么怎么才能使用到 数组呢?那就是通过动态内存申请new出来就可以使用了。
直接上代码
public class Demo{
public static void main(String[] args){
int[] a; //声明了一个整型数组
a=new int[10]; //申请了10个int类型的内存给a
double[] b=new double[9]; //在创建b的时候就直接申请9个double类型的内存给b
int length=20;
char[] c=new double[length]; //方括号里可以写变量,但是申请内存类数组名之后数组长度就不能改变了
}
}
上面的代码也只是定义出来了数组,但是并没有去用他们。还有值得注意的是,Java当中没有对申请内存之后的数组进行初始化,会默认初始化为零,如果是字符数组,存的就是空串。
代码测试一下
public class Demo01 {
public static void main(String[] args) {
int[] arr; //声明了一个数组,但是没有申请内存
arr=new int[5]; //给数组arr申请了5个int类型的内存
for (int i = 0; i < 5; i++) {
//循环打印数组里面的内容
System.out.print(arr[i]+"\t");
}
/*
打印结果:
0 0 0 0 0
*/
System.out.println(); //换一行
double arr2[]=new double[6]; //定义了一个数组,并且申请了6个double类型的内存
for (int i = 0; i < 6; i++) {
//循环打印数组里面的内容
System.out.print(arr2[i]+"\t");
}
/*
打印结果:
0.0 0.0 0.0 0.0 0.0 0.0
*/
System.out.println();
String[] arr3=new String[3]; //定义了一个数组,并且申请了3个String类型的内存
//利用数组的特性,长度直接使用length
for (int i = 0; i < arr3.length; i++) {
//循环打印数组里面的内容
System.out.print(arr3[i]+"\t");
}
//打印结果: null null null
}
}
简单的使用一下数组:
- Java中的数组也和C语言的一样,只要在申请内存的时候定义好了数组长度就不能改变长度了
- Java中的数组提供了直接求长度的成员: length
- 使用方法: 数组名.length 即可直到数组的长度是多少
//使用数组求和
import java.util.Arrays; //导入Arrays,相当于使用一个数组的容器
public class Demo02 {
public static void main(String[] args) {
int[] arr=new int[3];
for (int i = 0; i < arr.length; i++) {
arr[i]=i+1;
}
//新版for循环遍历数组
for (int v:arr) {
System.out.print(v+"\t");
}
System.out.println();
//使用Arrays容器直接求和
int i=Arrays.stream(arr).sum();
System.out.println(i);
}
}
上面这块代码有点超纲了,那现在用一下类似在C语言中的Java写法
public class Demo02 {
public static void main(String[] args) {
int[] arr=new int[3];
for(int i=0;i< arr.length;i++){
arr[i]=i+1;
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+"\t");
}
System.out.println();
//计算数组arr中的数据的和
int sum=0; //定义一个整型数据来接受求和结果
for(int i=0;i<arr.length;i++){
sum+=arr[i]; //累加数组中的数
}
//最后输出出来
System.out.println("sum="+sum);
}
}
Java的数组的第二个简单的用法:复制
public class Demo02 {
public static void main(String[] args) {
int[] arr=new int[3];
for(int i=0;i< arr.length;i++){
arr[i]=i+1;
/*
把1 2 3存到数组arr中
*/
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+"\t");
}
System.out.println();
int[] arr2=arr.clone(); //相当于把arr数组里面的数据复制给arr2,就连内存长度也一样
for(int i:arr2){
System.out.print(i+"\t");
/*
输出结果:
1 2 3
*/
}
System.out.println();
System.out.println("arr2.length="+arr2.length); //输出3
}
}
入门阶段的Java数组只需掌握length和clone的简单用法即可,因为Aarrays这个属于容器里的东西。就是Java诞生的时候就已经封装好的一个类。直接使用Arrays和自己写的效果是一样的,就是Arrays内部做了优化。这个就相当于Arrays是用轮子,自己写的数组是造轮子,造完了再用。
Java的String类的基本用法
简单来说String类就是用来处理字符串的。这里入门阶段的话就先掌握几个简单的用法即可。String就是用来操作字符串的。
在C语言中的字符串是用字符指针char*或者是字符数组char []表示一个字符串
#include<stdio.h>
int main()
{
char* str1="ILoveyou";
char str2[10]="IMissyou";
printf("%s\t%s\n",str1,str2);
//输出:ILoveyou IMissyou
return 0;
}
在C++中的字符串是用string类来表示一个字符串
#include<iostream>
using namespace std;
int main()
{
string str="This is a string of CPP";
cout<<str<<endl;
}
在Java中的字符串是使用已经封装好的String类来表示字符串,写法上和C++相比就是首字母大小写的问题,基本用法是和C++string差不多的。
public class Demo{
public static void main(String[] args){
String str="ILoveyou";
System.out.println(str);
//这样是直接输出ILoveyou
//在Java中下面的代码是会报错的,因为类型不一致而报错
char[] str2=new char[10];
str2="IMissyou";
//str2需要的是char类型,但却拥有了String类型,因为在Java中默认的字符串是String类
}
}
这也就体现了Java比C更加的安全,在类型的赋值上直接报错,这就阻止了后续代码的非法操作。
在C语言中字符串是不能直接相加的,必须调用string.h里面的一些特定的函数
//直接上代码,C语言实现字符串连接
#include<stdio.h>
#include<string.h>
int main()
{
char str[20]="ILoveyou";
char str2[10]="IMissyou";
strcat(str,str2);
printf("%s\n",str);
//输出的是ILoveyouIMissyou
return 0;
}
值得注意的是在C语言中让两个字符串相加,必须是用字符数组的方式去存字符串,然后必须其中一个字符数组的内存能包含另一个字符串的内存,这样才能将两个字符串连接起来。这样做就显得麻烦许多,因为还要计算数组的内存长度。在Java中就不需要考虑这些问题,直接相加就完事了。
public class Demo {
public static void main(String[] args) {
String str="Imissyou";
System.out.println(str);
String str2="IMissyou";
str=str+str2;
System.out.println(str);
}
}
/*
输出内容:
Imissyou
ImissyouIMissyou
*/
C++里的string和Java的String又有所不同。下列简单举例:
- 首先就是字面上的写法,C++是小写,Java是首字母大写
- 其次是C++有运算符重载的概念,所以C++string可以采用运算符直接比较,而Java中没有运算符重载的概念,所以Java不能直接使用运算符比较。
- C++的字符串比较时主要知道结果,Java的字符串比较时主要知道两个字符串在第一个字符不同的时候两个字符相差多少。
//C++字符串比较
#include<iostream>
using namespace std;
int main()
{
string name1 = "IMissyou";
string name2 = "Imissyou";
int i=name1.compare(name2); //可以显式访问成员函数的方式比较
cout << i << endl; //输出:-1
//因为m的ASCII比M的ASCII大,所以name1比name2小,按C语言的strcmp的说就是返回-1
bool j = name1 > name2; //也可以采用string类中已经重载好运算符的方式直接比较
cout << j << endl; //输出:0
//因为name1比name2小,所以得到的bool值就是0
return 0;
}
//Java字符串比较
public class Demo01 {
public static void main(String[] args) {
String str1="aello";
String str2="Aorld";
int i=str2.compareTo(str1);
System.out.println(i);
//输出:-32
//因为A比a小32
}
}
#include<iostream>
using namespace std;
int main()
{
string str = "Imissyou";
string str2 = "IMissyou";
int i = str.compare(str2);
cout << i << endl;
//输出:1
//因为m比M大
return 0;
}
通过C++的代码和Java的代码可以看到,C++是可以直接使用运算符比较,这一点比Java更方便,而Java比较的时候可以知道相差多少,这一点可能比C++要细节,两个都有各自的好处。
Java的方法
Java的方法其实和C语言中的函数是一个意思。
-
方法的作用:
方法的作用就是可以复用,也就是在同一个程序中需要用到两次或两次以上的同一个代码的功能,这个时候可以考虑把这些代码封装起来形成一个方法,然后后面想要使用这个功能的时候就直接调用就好,不用重复造轮子。
-
Java的方法写法:
修饰词 返回值类型 方法名(形参列表){方法体}一般Java的方法中要加static修饰,这个static就是静态的意思。在C++中学到的类时,说到过static修饰的函数是属于整个类的不是属于任何对象独有。那其实在Java也差不多。加了static就方便调用了嘛,现在才刚开始,知道Java的方法需要stiatc就行。建议直接按照C/C++的风格写Java的方法,就是在前面多了public static
-
Java的方法与C的函数最简单的区别:
就是C语言需要把自定义函数写在主函数的上方,或者是在主函数之前声明自定义函数,这样才不会报错。在Java中,由于是与类封装东西,而函数也是在类中,所以Java的方法就没有顺序可以,可以写在主方法上面,也可以写在主方法下面。
-
Java和C/C++一样,有且仅有一个主函数(主方法),主函数(主方法)作为程序的入口。
#include<stdio.h>
int main()
{
int i=9;
int j=3;
int max=Max(i,j); //在这里程序就会报错,不能理解Max 因为Max函数在下面,编译的时候先编译了main
printf("max=%d\n",max);
return 0;
}
int Max(int x,int y)
{
return x>y?x:y;
}
public class Demo{
public static void main(String[] args){
int i=9;
int j=3;
int max=Max(i,j);
System.out.println("max="+max);
//输出:max=9
}
static int Max(int x,int y){
return x>y?x:y;
}
}
从上面的代码也可以看到了,C语言的函数是有顺序要求的,而Java没有。
在这两个程序当中也可以看到,C语言和Java在定义函数(方法)的时候还有一个小细节。就是Java的方法必须用static 修饰,表示静态的意思,在C语言中就没有这个要求,而Java有。所以在写Java的方法的时候一定要加上static修饰,方法才能使用。
关于static的错误:
- 自定义方法不加static
package base01; //包,这里埋个伏笔
public class Demo {
public static void main(String[] args) {
int a=9,b=8;
int result=Max(a,b);
System.out.println(result);
}
public int Max(int a,int b){
return a>b?a:b;
}
}
IDEA给我们程序报错:无法从 static 上下文引用非 static 方法 ‘Max(int, int)’

然后推荐上图中的两种改错方法:
- 第一个的意思就是给Max方法加上static关键字
- 第二个的意思就是把main方法的static去掉
那么使用第一个方法改了之后是没什么问题的,使用第二个方法改就会得到新的错误,就是你没办法运行这个程序了。因为编译器找不到public staitc void main(String[] args);所以写方法的时候还是老老实实的把static加上吧。public意思就是公有的,在主类中的自定义方法写不写这个public都是可以正常调用的。在其他类中,写不写这个public然后通过对象去调用这个成员方法也是没有问题的。但是还是推荐习惯的写上public static毕竟Java也有自己代码风格,和C/C++区分一下。
本文介绍了Java入门的两个关键知识点:数组的声明、定义与动态内存分配,以及String类的基础用法,包括String数组的长度获取和字符串连接。同时讲解了静态方法和C++/Java方法的区别,以及如何正确使用static修饰符。

690

被折叠的 条评论
为什么被折叠?



