Ricky Hao

Java学习总结(之一)

传说中的三天精通Java系列来了!
好吧,我只是扯淡- -毕竟晚上我还想睡觉,所以,只学习到就结束了。
那么,接下来就是我对Java的一点理解。
一、和C的相似性

Java不愧是继承了C++(C)的一种语言。在很多地方和C语言非常的相似。比如,**循环语句**,**判断语句**,**switch**啊什么的。像是**for循环**,和C语言基本没有什么差别。那么,学习的速度就可以加快许多,这些直接跳过吧~
还有呢,就是有一些类似性质的东西就,只是名字有点区别罢了。像是**C语言中的函数->Java中的方法**。感觉是一个东西嘛。

public class Hello
{
    public static void main(String args[])
    {
        double num=0;
        //int t=0;
        for(int t=0;t蓝图**,**对象->实体**。在知道了这些之后,我们需要知道如何定义一个类。

class 类名称
{ 
    类名称 (//若需要参数则填)   //类的构造方法,类似于第一次声明
    {                         //调用时会自动运行的代码块
        ...
    }
    数据类型  属性 
    ….                        // 声明成员变量(属性)
  
    返回值的数据类型 方法名称(参数 1,参数 2…) 
    {     
        程序语句 ;            // 定义方法的内容   
        return 表达式 ; 
    } 
} 

示例:

class Person 
{ 
    String name ; 
    int age ; 
    Person()            //Java默认的空构造类型
    {}
    void talk() 
    { 
        System.out.println("我是:"+name+",今年:"+age+"岁"); 
    } 
}

这样就声明了一个类。随后就可以在程序中通过Person p=new person(//参数,若需要则填);来创建这个类的实例。

一个很重要的就是构造类型。**构造类型**就好似第一次声明这个类的实例的时候所调用的代码块。可以不在类里面写**构造类型**,那么,这将会**生成默认的空构造类型**。如果编写需要参数的构造类型,那么在new一个实例的时候就需要填入对应的参数。
如果你想要让类外部的程序不能调用类里面的某个参数或者说方法(eg:`Person.name`),那么就可以用`private`参数。在每个变量或者是方法声明的时候,加上`private`参数,就可以指定该变量只能在类内部调用,不能被类外部的代码所调用(eg:`private int age`)。这就是类的封装。有利于保护类内的数据不能够被随意读取修改,保证类内部一个稳定相对独立的环境。

三、引用(实现部分C指针的功能)

引用,说白了就像是指针。
首先,看以下代码:

Person p1=new Person();    //创建p1实例
Person p2=null;            //使用null表示p2为Person类型却没有指定对象。
p2=p1;                     //将p2指向p1所指的实例的内存块
p1=null;                   //p1与原实例的内存块断开连接
                           //但此时p2仍指向原p1所创建的实例的内存块
p2=null;                   //断开p2与实例内存块的链接,使得该内存块变成垃圾内存

大概就是这样的一个意思。简洁明了。
同时,java里面的参数传递也和C语言的一样。可以通过引用(指针)的方法传递。

四、方法的重载

在Java里面,方法有一个特性。就是可以定义许多同名的但是需要的参数数量不同的方法。

void fun();
void fun(int a);
void fun(int a,int b);
...
fun();                //调用无参数的fun()
fun(1);               //调用1个参数的fun()
fun(1,2);             //调用2个参数的fun()

方法的重载就是这样。同时,在类里面的构造方法也是可以重载的:

class Person
{
    public Person()
    {...}
    public Person(int a)
    {...}
    public Person(int a,int b)
    {...}
}

public static void main()
{
    Person p1=new Person();        //调用无参数的构造方法
    Person p2=new Person(1);       //调用1个参数的构造方法
    Person p2=new Person(1,2);     //调用2个参数的构造方法
}

五、this的使用(我一定要凑齐六点!)
首先,this可以简单的理解为作用于当前对象。
有些时候,我们可能会有以下的代码:

class Person
{
    public Person(int a)
    {
        a=a;
    }
}

在这段代码中,是将类属性中的a赋值为形参a呢?还是将形参a赋值为类属性中的a?
如果我们使用了this,那就简单了:


class Person
{
    public Person(int a)
    {
        this.a=a;
    }
}

简洁明了,是吧?给类属性中的a赋值形参a
同时,在多个方法冲突的时候,也可以使用this.fun()来指定哪个是当前对象的方法。

六、其他
首先,数组的声明和定义有点不同:

int a[]={1,2,3};        //这是声明同时赋值
int b[]=new int[3];     //这是给b找到三个int大小的内存空间,也就是说,b可以有三个元素。
int c[];
c=new int[3];           //类似第二条

对于多维数组来说,也是类似的:

int 2a[][]={{1,1,1},{2,2},{3}};
int 2b[][]=new int [2][3];
int 2c[][];
2c=new int [2][3];

有没有发现,多维数组的每个维度的内容的数量是可以不一样的!这是C语言所不支持的。

还有呢,就是==equals()的区别:

String str1="java";
String str2="java";
String str3=new String("java");

从表面上看,这三个字符串的内容是一模一样的。但是,如果我们使用==来比较的话:

str1==str2;        //True
str1==str3;        //False

这是为什么呢?这是因为==运算符比较的是地址。而在Java里面,虽然str1和str2是分开声明的,但是,str1却和str2指向的是同一片内存空间???(我也很奇葩这是为什么,求证明!)而str3是new出来的一个字符串,所占用的是一个新的内存空间,自然也就内存地址不相等了。
那么,我们要怎么来比较两格字符串的内容呢?可以用equals()

str1.equals(str2);    //True
str1.equals(str3);    //True

这才是我们要的!

让我想想还有啥?。。。
对了,有一个东西叫length,很好用。我们可以对一个一维数组a这样:a.length,这样就可以得到a中元素的个数了。
如果是二维数组b的话:

b.length;        //得到b的第一维内元素的个数
b[0].length;      //b的第一个元素内的元素的个数

很好用有木有?可以去试试对于一个字符串,有没有这个属性233

差不多就这么多了,三天速成Java,如果是基础看来还有点可行啊!啊哈哈哈哈哈~

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据