1、类与对象的关系:
类相当于抽象的概念。
对象是类的具体表现。
类: 是一组成员变量和成员方法的集合,可以把类看作一个抽象的概念。
对象:是该类的具体的表现,具体到一个个体。
2、现实事物:
属性:用于描述事物的信息。 例如:人的身高,体重等。
行为:用来描述事物能够做什么的。 例如:人可以学习,吃饭等。
类:
成员变量:就是事物的属性。
成员方法:就是事物的行为。
定义一个类,其实就是定义这个类中成员变量和成员方法。
3、如何定义一个成员变量?
(1)、定义的位置:在类中,方法外
(2)、定义的格式:
数据类型 变量名;
public String name;
4、如何定义一个成员方法?
(1)、定义的位置:在类中
(2)、定义的格式:
修饰符 返回值类型 方法名(参数列表){
方法体;
}
public void eat(){
System.out.println("饿了吃饭。");
}
5、定义一个类:
(1)、先创建成员变量
(2)、再创建成员方法
public class Student{
//创建成员变量
String name;
int age;
//创建成员方法
public void sleep(){
System.out.println("困了就睡觉。");
}
}
如何创建对象:
在main方法中调用。
格式:类名 对象名 = new 类名();
Student student = new Student();
创建好对象后,通过对象名访问成员变量:
格式:对象名.非私有的成员变量名
student.name = "小米"; //给成员变量赋值
System.out.println(student.name); //输出
创建好对象后,通过对象访问成员方法:
格式:对象名.非私有的成员方法
student.sleep();
6、成员变量与局部变量的区别:
(1) 、在类中定义的位置不同
成员变量:类中,方法外
局部变量:定义在方法内部
(2) 、在内存中的位置不同
成员变量:在堆内存中
局部变量:在栈内存中
(3) 、初始化值不同
成员变量:系统会给予默认值
局部变量:没有系统给的默认值,必须在定义的时候赋值,亦或者在方法中使用之前赋值,然后才能使用。
(4) 、生命周期不同
成员变量的生命周期:随着对象的创建而创建,随着对象的消失而消失
局部变量的生命周期:随着方法的调用而创建,随着方法的调用完毕而消失
注意事项:
(1)、局部变量的名字可以和成员变量的名字一样,在方法中使用的时候,采用就近原则
方法中使用的变量,会先在方法内部查找,如果方法内部没有,去成员变量中查找。
(2)、方法与方法之间的局部变量,不能互相调用。
public void show(){
int a = 20;
System.out.println(a);
}
public void show1(){
//System.out.println(a); //报错,因为show1方法无法调用到show方法中的变量a
}
7、形式参数的问题: (形参就是定义方法时后面跟的参数)
(1)、当形式参数是基本数据类型的时候, 将来调用方法的时候传入的是常量值, 或者是该类型的变量。
(2)、当形式参数是引用数据类型的时候, 将来调用方法的时候传入的是该类对象的地址值。
(3)、当形式参数是基本数据类型的时候, 在方法中对变量做修改, 不会影响到外部实际的栈内存中的值。
(4)、当形式参数是引用数据类型的时候, 在方法中对变量做修改, 会影响到外部实际的堆内存中的值。
8、匿名对象:
没有名字的对象,是当new完对象之后直接使用,没有用变量名接收的对象。
匿名对象的使用场景:
(1) 、调用方法时,仅仅调用一次的时候,可以使用匿名对象。
注意,当调用多次的时候,不适合。每次new都是一个新的匿名对象,会频繁的在堆内存中开辟空间。
当匿名对象使用完毕之后,无法再使用第二次,就变成了一个垃圾(当栈中没有变量引用它的时候,判定是一个垃圾),等待被垃圾回收器回收。
(2) 、当方法的参数类型是一个类的时候,可以使用匿名对象调用方法。
在main方法中创建对象:
PhoneDemo pd = new PhoneDemo();
Phone phone = new Phone();
//调用的时候,实际传的是对象phone的地址值
pd.function(phone); //调用方式1
new PhoneDemo().function(new Phone()); //调用方式2
//调用方式1和调用方式2输出结果一致,而第2种就是匿名对象的方式调用。
9、面向对象的三大特质之一: 封装
隐藏类的属性和相关描述信息,对外仅提供公共的get和set方法访问方式。
(1)、封装的好处:
隐藏实现细节,提供公共的访问方式
提高了代码的复用性
提高安全性。
(2)、封装的原则:
将不需要对外提供的内容都隐藏起来。
把属性隐藏,提供公共方法对其访问。
10、private关键字:
(1)、私有的。
(2)、它可以修饰成员变量和成员方法。
private String name;
private void password(){
...
}
(3)、被private修饰的成员只能在本类中进行访问,其他类中使用不了。
11、this关键字:
this代表所在类的对象引用。
方法被哪个对象调用,this就代表那个对象
一般用在set方法中:
private String name;
public void setName(String name){
this.name = name; //这里this.name就是指成员变量name
}
12、标准类的写法:
(1)、成员变量:被private修饰
(2)、成员方法:getXxx()和setXxx(),show()
(3)、使用this关键字。
public class Phone {
private String brand;
private int price;
private String color;
public void setBrand(String brand) {
this.brand = brand;
}
public void setPrice(int price) {
this.price = price;
}
public void setColor(String color) {
this.color = color;
}
public String getBrand() {
return brand; //其实这里隐藏了一个this,但是我们也可以不写,因为就近原则取的就是对象的成员变量
}
public int getPrice() {
return price;
}
public String getColor() {
return color;
}
public void show() {
System.out.println("手机的品牌是: " + brand + " ,手机的价格是: " + price + " ,手机的颜色是: " + color);
}
}
今天已经是我学习java的第8天了,我感觉每天的我都很充实,我很喜欢这种感觉,我会继续加油。