类:使用关键字class,抽象的概念集合。例如人类,具有共性的产物。
对象:具有自己独立属性,具有个性的个体。
类中可以定义的内容:
创建一个对象: new Scanner(); new int[];
类的构造方法:每一个类中都有一个默认的无参构造方法。构造方法名与类名一致。无返回值。不用void修饰。
无参构造方法与有参构造方法对比:
public class Round {
int r;
String color;
public Round(){
}
public Round(String color)
{
this.color=color;
}
}
构造方法的作用:初始化创建对象。
方法重载:在一个类中有多个名称相同的方法。
Q:当出现多个名称相同的方法该如何区分呢?
A:可通过传入的参数个数,类型顺序区分。
普通成员方法也可方法重载。
public int area(int r)
{
return (int) (r*r*Math.PI);
}
public double area(double r)
{
return r*r*Math.PI;
}
对象与引用
值传递:
1.基本类型值传递(形参改变不影响实参)
public class Myproject {
public static void main(String[] args) {
Round r1=new Round();
int x=1;
r1.draw(x);
System.out.printf("x=%d\n",x);
}
}
public class Round {
int r;
public void draw(int r)
{
r=10;
System.out.printf("r=%d\n",r);
}
}
如上述所示,当main函数传入一个实参x,成员方法中改变了形参的大小,可是并没有影响实参最终大小。因此,基本类型的值传递时,形参的改变不影响实参的大小。
2.引用类型值传递 (形参改变影响实参)
首先,我们介绍一下何谓引用类型的值,引用类型包括类(例如字符串),数组,接口。
public class Myproject {
public static void main(String[] args) {
Person p1=new Person();
p1.name="adele";
p1.Read_name(p1);
System.out.println("对象p1最终的名字为:");
System.out.println(p1.name);
}
}
public class Person {
String name;
public void Read_name(Person person)
{
person.name="amy";
System.out.println("调用Read_name方法并且在成员方法中更改p1名字,输出的p1对象名字:");
System.out.println(person.name);
}
}
神奇的,我们发现最终在main函数中对象的name改变了,形参影响了实参。这是为什么呢?
这是因为在创建一个对象的时候,对象名指向的是持有对象在内存空间的地址(即引用变量)。
传入实参,形参也会指向实参地址,所以改变的是形参指向的地址上的值。接下来我们看看实参和形参所指向的内存地址是否相同来验证。
public class Myproject {
public static void main(String[] args) {
Person p1=new Person();
p1.name="adele";
System.out.println(p1);
p1.Read_name(p1);
// System.out.println("对象p1最终的名字为:");
// System.out.println(p1.name);
}
}
public class Person {
String name;
public void Read_name(Person person)
{
System.out.println(person);
// System.out.println(person.name);
person.name="amy";
System.out.println(person);
// System.out.println("调用Read_name方法并且在成员方法中更改p1名字,输出的p1对象名字:");
// System.out.println(person.name);
}
}
结果输出:
通过结果发现,指向的的内存地址始终指向同一个,而改变的是该地址上的值。
所以可以得到结论:使用引用类型值传递时,形参改变会影响实参。
this关键字:表示当前正在操作的对象。
使用this关键字可以引用成员变量,成员方法。
static关键字(静态的意思):
代码块:类似于没有名称的方法。
类的加载执行:
访问权限修饰符(控制能否被外界访问)