传说中的三天精通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,如果是基础看来还有点可行啊!啊哈哈哈哈哈~