课程总结
1.先获取规范再实现
int i = 10;
int 就是规范,操作系统会分配相应的内存大小,最后存放数据实现,而i存放的是对应的数据首地址。
2.先有类后有对象,我的理解是,类似于c语言中的结构体,结构体相似于类,模型是什么样的由类决定,比如人有四肢,有五脏六腑,至于具体的,四肢有多长,五脏六腑的功能先天有多好,都由具体的对象决定
3.任何一个不被static修饰的方法第一个参数都是this,其实这个还是不太理解,只知道this是用来存放地址的,和第一条的区别不大清楚,被static修饰的话又意味着什么??
作业收获
最大的问题和收获就是自创包和导入自建包
我认为包其实就是一个一劳永逸的方法,总体上与方法区别不大,优点在于可以直接用 ,不用再次编写同样的功能。
假如创建一个对数组求和功能的包
首先创建一个java文件
然后写入功能,最主要的区别在于,开头加上package语句
package sp;//与方法的区别
public class money
{
public static int sum(int[] arr)
{
int i=0;
int sum=0;
for(i=0;i<arr.length;i++)
{
sum+=arr[i];
}
return sum;
}
}//可以看到数组传参和返回参数和方法都是一样的.
最后再编译类 Javac -d . money.java;
编译完成后,会自动创建一个文件夹(包),类也自动写进去了。
假如还要写一个类进去,过程也是一样的。
package sp;//同样声明属于sp包中
public class re
{
public static double rmb(int sum)
{
double y=0;
if(sum>=1000)
{
System.out.println("您可获得八折优惠以及200元优惠券!");
y=sum*0.8;
}
if(sum>=500&&sum<1000)
{
System.out.println("您可获得八五折优惠以及100元优惠券!");
y=sum*0.85;
}
if(sum<500&&sum>=300)
{
System.out.println("您可获得九折优惠以及70元优惠券!");
y=sum*0.9;
}
if(sum<300)
{
System.out.println("您可获得九五折优惠!");
y=sum*0.95;
}
return y;
}
}
这样sp包中就有俩个class文件,即自己想要的功能。
调用包
import 包名.类名;
使用功能:类名加方法名。
import sp.money;//导入
import sp.re;
import java.util.*;
public class p47
{
public static void main(String[] args)
{
Scanner in =new Scanner(System.in);
int i=0;
System.out.println("请输入10个数据:");
int[] arr=new int[100];
for(i=0;i<10;i++)
{
arr[i]=in.nextInt();
}
int sum=money.sum(arr);
double y=re.rmb(sum);
System.out.println("您应当支付"+y+"元");
}
}
还有一个问题就是如何导入在不同目录下的包
我有搜索到有直接更改电脑的环境变量的。
但我认为这太麻烦了,本来调用包就是为了方便
看了很多博客都没有结果。
最后我发现可以直接把想用的包复制到java文件所在目录下。
其实就是装换成在同一目录下的情况。这样比更改环境变量的方法要稍微便捷一些。
最后一点小问题
1.写题的过程中,出现了编译javac成功却java运行不成功
如果java语句和javac语句都没问题的话,多半是复制文件到其他文件后,编辑的仍然是原来文件夹里的文件,而新的java文件是空的,所以能编译通过而运行不了
2.类名与文件名不同
当出现这个的时候,多半是类名与文件名不相同,值得注意的是,编译的时候,文件不区分大小写,运行的时候区分大小写