目标
今天学习了如何创建Java语言中的数组,和其使用方式。初步了解了类和对象的概念。然后就是使用Java语句重写之前用C语言写过的两个小程序重新写了一下,尽然程序所用的语句不一样,但是逻辑却也还是那个逻辑,这也能够看到我们学习C语言的必要性和好处,也通过了编写两个程序体验到了Java这门面向对象语言的好处。
数组的两种定义方式和其基本的使用
class text{
public static void main(String[] args){
int[] score={1,2,3};
float[] height=new float[5];
String[] names={"jack","merry"};
height[0]=128.0f;
Random r=new Random();
r.nextInt(i:100);
int[] count = new int [10];
for(int i = 0; i <10;i++){
count[i] = r.nextInt(i:100);
}
}
}
在Java里面有很多方法是已经定义好的,遍历数组的方法也因此有好几种
//数组输出方式1也是我们最熟悉一种方式
for(int i = 0; i <10;i++){
System.out.print(count[i]+" ");
}
//数组输出方式2
for(int temp:count){
System.out.print(temp +" ");
}
//数组输出方式3使用了toString方法
System.out.println(Arrays.toString(count));
类和对象的概念
类:
coutact:【姓名 地址 email 电话号码】8种基本类型:byte char boolean short int long double float
java里面除了8大基本类型之外都是对象
抽象的 不实际存在的 描述同一事物(具有共同的属性和方法)
人类:概念 抽象 不能完成具体的事情
对象:
具体的,实际存在的,某一类的实例化
对象都是创建出来的
可以完成具体的事情,有内存空间的
同一个类可以有多个对象
如何定义一个类
修饰符 class 类名{
这个类的一些属性:成员变量
这个类的功能:方法
}
class Person{
String name;
int age;
float score;
String password;
char choice;
public void texts(){
System.out.print("哈哈哈");
}//没有返回值 没有参数的方式
public void test2(String name){
}//有一个参数 没有返回值
public void text3(String name){
}//有一个返回值 有一个参数
public int text4(String name,int age){
return 0;
}//有多个参数 每个参数应该用逗号隔开
public int text5(int...counts){
int sum=0;
for(int i=0;i<counts.length;i++){
sum+=counts[i];
}
return sum;
}//可变参数 相当于数组
}
方法的使用
要分清调用的是(那个对象)方法
在类里面可以直接调用自己的方法
在外部必须通过对象来调用
class text2{
public static void mian(String[] args){
/*
创建Person类的一个对象 new
使用.访问成员变量
对象一旦创建 属性变量有初值
*/
Person zs=new Person();
/*
同一个类可以创建多个对象
两个对象之间并无关系
*/
Person xw=new Person();
xw.age=10000;
xw.name="wangba";
System.out.print(xw.age);
System.out.print(xw.name);
/*
方法的使用
在类里面可以直接调用这个类的所有资源
在外部必须通过对象来调用
*/
}
}
1.存什么值:成员变量
2.完成什么功能:方法
封装:
访问权限:public private protected
public:公共的 想用就用(内部可以用 外部也可以用)
private:私有的 只能自己用 外部无法访问
protected:受保护的 外部(同一个包)可以访问
把私有的东西封装起来 不让外部使用
需要给外部使用,就暴露出来
继承:后面会学到类的继承
多态:
实际应用
猜数字
class text1{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int[] count=new int[4];
Random r=new Random();
for(int i=0;i<4;i++)
{
int temp=r.nextInt(10);
boolean result=coutains(count,temp);
if(result){
//确保i对应的位置能够得到一个不重复的数字
i--;
}
else{
count[i]=temp;
}
}
Arrays.sort(count);
for(int i=0;i<4;i++){
System.out.print(count[i]+" ");
}
int countA=0,countB=0;
int[] yourCount=new int[4];
while(countA!=4){
System.out.print("请输入数字:");
for(int i=0;i<4;i++)
{
yourCount[i]=scanner.nextInt();
}
for(int i=0;i<4;i++)
{
boolean result=coutains(yourCount,count[i]);
if(result==true){
int index=indexof(yourCount,count[i]);
if(index==i){
countA++;
}else{
countB++;
}
}
}
if(countA!=4)
{
System.out.print(countA+" A "+countB+" B ");
countA=0;
countB=0;
}
}
System.out.print("恭喜!!!!!");
}
public static boolean coutains(int[] val,int obj){
for(int i=0;i<val.length;i++){
if(val[i]==obj){
return true;
}
}
return false;
}
public static int indexof(int[] val,int obj){
for(int i=0;i<val.length;i++){
if(val[i]==obj){
return i;
}
}
return -1;
}
}
在这个程序里面我们可以感受到类里面的方法是可以直接调用的比如我们在程序的后面定义的两个方法,它们皆是有多个参数且有返回值得方法。其逻辑和C程序一脉相承。
写在后面
说实话,那个数组和对象在内存里面的表现优点难懂,有一丝丝学习C语言指针时的感觉。可能是堆栈没有具体的概念的关系吧!