面向对象设计思想
1.考虑问题涉及哪些个类和对象;
2.分析类和对象所需要具有的属性和方法;
3.类和类之间具备了怎样的关系;
成员变量若未初始化,系统会默认为其初始化;而局部变量未对其初始化则无法使用;
引用:相当于指针(一小块内存指向一大块内存)
对象是通过引用new出来的,存在堆内存里;
new出来的对象中是该对象独有的属性;
构造方法
public class Person {
int id;
int age =20;
//构造方法(和类同名,没有返回值)
//构建对象的模板
Person(int _id,int _age){
id = _id;
age = _age;
}
/*常见错误:前面不能加任何返回值,加返回值变为普通方法
* void Person(int _id,int _age){
id = _id;
age = _age;
}
*/
//new + 构造方法==创建对象
//调用构造方法来创建对象,_id,_age在栈内存中赋值,
//传递给创建的对象,完成对新建对象的创建,之后回收构造方法调用后的“垃圾”;
public static void main(String[] args){
Person Tom = new Person(1,25);
//若已经指定某种形式的构造方法,系统不会添加默认形式的构造方法,
//也就无法调用,
//例如下面的调用形式无法执行
/*Person jerry = new Person();
jerry.id = 1;
jerry.age = 22;
*/
Point p = new Point();
//p.x==p.y==0 系统默认值为0
//System.out.print(p.x);
//System.out.println(p.y);
}
}
class Point{
int x;
int y;
Point(){}//系统自动设定的构造方法
}
约定俗成的命名规则:
1.类名首字母大写;
2.方法名,参数名首字母小写;
3.运用驼峰标识
class BirthDate {
int day;
int month;
int year;
public BirthDate(int _d,int _m,int _y){
day = _d;
month = _m;
year = _y;
}
public void setDay(int _d){
day = _d;
}
public void setMonth(int _m){
month = _m;
}
public void setYear(int _y){
year = _y;
}
public int getDay(int _d){
return _d;
}
public int getMonth(int _m){
return _m;
}
public int getYear(int _y){
return _y;
}
}
public class Test {
public void change1(int i){
i = 1234;
}//i值改为1234后被回收,over
public void change2(BirthDate d){
d = new BirthDate(2,3,2020);
//test.change2(d2); d2调用时,d先指向d2对象,
//再创建一个新的对象,但方法结束后被回收,不会改变d2中值
}
public void change3(BirthDate d){
d.setDay(22);//在当前对象引用下真正的改变了值
}
public static void main(String[] args){
Test test = new Test();
int date = 9;
BirthDate d1 = new BirthDate(7,7,1970);
BirthDate d2 = new BirthDate(1,1,2000);
test.change1(date);
test.change2(d2);
test.change3(d2);
System.out.println("d1:"+d1.day+"-"+d1.month+"-"+d1.year);
System.out.println("d2:"+d2.day+"-"+d2.month+"-"+d2.year);
}
}
//d1:7-7-1970
//d2:22-1-2000
class Points{
double x;
double y;
double z;
//构造方法
public Points( double _x,double _y,double _z){
x = _x;
y = _y;
z = _z;
}
//set方法
public void setX(double _x){
x = _x;
}
public void setY(double _y){
y = _y;
}
public void setZ(double _z){
z = _z;
}
public double getDistance(Points p){
return (x-p.x)*(x-p.x) +(y- p.y)*(y-p.y) +(z- p.z)*(z-p.z);
}//调用它的点到当前点对象的距离
}
public class TestPoint {
public static void main(String[] args){
Points p1 = new Points(1.0,2.0,3.0);
Points p2 = new Points(1.0,-3.0,3.0);
double d = p1.getDistance(p2);
System.out.println(d);
p1.setX(3.0);
System.out.println(p1.getDistance(p2));
}
}