1 类中的属性又叫成员变量(member variable),属性用英文(property)或者attribute
2 对象(Object) 又叫做实例(Instance)。生成一个对象的过程叫做对象的实例化
3 面向对象编程中命名的约定:
(a) 类:首字母大写,如果一个类名由多个单词构成,那么每个单词的首字母都要大写,中间不使用仍何连接符,比如Person类 ,MemberTest类
(b)方法:首字母小写,如果一个方法由多个单词构成,那么第一个单词的所有字母全都小写,从第二个单词开始,每一个单词的首字母大写,比如:add , ageOfPerson
(c) 属性:命名约定与方法完全相同,比如:age ageOfPerson
4 属性需要定义在类中,又叫做成员变量,而定义方法中的变量叫做局部变量
5 如何定义属性:
public class Person
{
修饰符 类型 属性名称
}
使用属性的方法:与方法一样;使用.运算符 首先生成类的实例,然后使实例 . 方法方式使用属性
Person person=new Person();
person.age=...;
public class Person
{
int age=20; //注意一下 :类的属性所写的位置
public static void main(String[] args)
{
Person person=new Person();
System.out.println(person.age);
}
}
6 成员变量和局部变量的区别:
局部变量使用前要声明并且要赋初值:
成员变量使用前要声明但是可以不赋初值 ;
成员变量和局部变量的区别和联系:
(a)无论是成员变量还是局部变量在使用前都要声明 :
(b )对于局部变量来说:使用前必须要初始化 ,对于成员变量来说,使用前可以不初始化,如果没有初始化成员变量并开始使用,那么每个类型的成员变量都有一个默认的初始值
i byte short int long 类型的初始值为0
ii float double 类型的初始值是0.0
iii char类型的初始值是‘\u0000‘
iV boolean 类型的初始值是false
7 引用类型(reference type)引用类型是用在对象上的
Person person=new Person(); person 是一个引用类型 而不是对象
【注明】一个对象可以被多个引用所指向
但是同一时刻,每个引用只能指向唯一的一个对象,如果一个对象被多个引用所指向,那么无论哪个引用对对象的属性进行了修改,都会反映到其他的引用当中去
举例:people.java
引用变量分配是在栈上的 内存里生成是对象 Java里面无法直接操作对象 都是通过引用来操作的
public class People
{
int age=20;
public void change(People people)
{
people.age=30;
}
public static void main(String[] args)
{
People people =new People();
int age1=people.age;
System.out.println(age1);
people.change(people);
int age2=people.age
System.out.println(age2);
}
}
首先在栈内存上分配一个people的一个引用类型的变量 这个变量会指向 堆内存上分配的一个对象 age=20;
然后再栈内存上又会分配一个应用类型的变量 同时指向堆内存上的这个对象 将他的值改成了30 所以答案是age1=20 age2=30 方法执行完了之后 ,关于这些方法的所有代码都会被垃圾回收器回收,所以这个方法里存在的形参会消失掉
在这个执行程序的时候 ,引用可以多个,但是只有一个对象
思考 若是public void change(People people )
{
people=new People();
people.age=30;
}
执行的结果是两个都是20
9
(1) 如果一个类包含多个属性和方法,那么该类的 每一个对象都有自己的属性,但无论一个类有多少个对象,这些对象共用同一个方法 。
(2)Java中是没有传引用这种类型的 ,在C#或者 C++中才有可能传递的是引用这种说法。
Java中关于方法参数传递:对于Java中的方法参数的传递,无论传递的是原生数据类型,还是引用数据类型,一律传值(pass by value)若是传递的参数是一个引用类型,只不过是传递的是对象的地址
(3)什么类型的引用就可以指向什么类型的对象,比如 people类型的引用就可以指向People类型的对象,但是不能指向别的对象 比如 People类型指向 bird
People people=new People();//正确
10 构造方法:构造方法(Constructor)构造方法用于完成对象属性的初始化工作,构造方法的特点:
(1)构造方法的名字必须与类名完全一致 包括大小写
(2)构造方法没有返回值,连void也不会出现
(3)如果在定义一个类的时候,没有为类声明构造方法,那么java编译器会自动为类添加一个没有参数且方法为空的构造方法(次方法叫做默认的构造方法)
(4)如果在定义一个类的时候,为类声明了构造方法,那么Java编译器就不会再为类添加构造方法了
(5)不能显式调用类的构造方法,构造方法通常是通过关键字new类隐式子调用
People p =new People();
在执行了这句话之后 ,内存中会出现的情况:
(a)为对象开辟空间
(b)调用类的构造方法
(c)将类的对象的地址返回
11默认的构造方法:构造方法没有参数且方法体会空
12 使用new来生成对象的时候,后面的小括号()表示构造方法的参数列表,如果构造方法不接受参数,那么小括号中的内容为空 ,若构造方法接收参数,那小括号中的实际参数就需要与构造方法定义中的形式参数保持一致(参数数量一致,参数类型一致,按照顺序逐一赋值)
public class PersonTest
{
public static void main(String[] args)
{
Person person = new Person();
System.out.println(person.age);
}
}
class Person
{
int age;
public Person()
{
}
}//打印出0 年龄的默认值是0
=======================思考如下程序的执行结果+++++++++++++++++
public class ParamTest
{
public static void main(String[] args)
{
Person person=new Person();
person.change(person);
int age=person.age;
System.out,println(age);
int i=10;
person.change2(i);
System.out.println(i);
}
}
class Person
{
int age = 20;
public void change(Person person)
{
person=new Person();
person.age=30;
}
public void change2(int age)
{
age=40;
}
}
类的命名采用驼峰标识:AddThreeInt
方法的命名第一个字母要小写 addThreeInt(int a,int b)
属性和方法是一样的 ,中间不要加下划线