java基础6-面向对象
重点:获取已有对象并使用/如何自己设计对象并使用
1.类和对象
类:是对象共同特征的描述
对象:是真实存在的具体东西
在java中必须先设计类,才能获得对象。
定义类:
public class 类名 { public class phone{ 如何得到类的对象 1. 成员变量(代表属性,一般是名词) //属性(成员变量) 类名 对象名 = new 类名(); 2. 成员方法(代表行为,一般是动词) String brand; phone p = new Phone(); 3. 构造器 double price; 4. 代码块 //行为(方法) 如何使用对象 5. 内部类 public void call(){} 访问属性: 对象名.成员变量 } public void playGame(){}} 访问行为: 对象名.方法名(...)
示例:
public class Java01 { public static void main(String[] args) { Phone p = new Phone(); p.brand="小米"; p.price=1999; System.out.println(p.brand); System.out.println(p.price); p.call(); p.playGame(); } }
public class Phone { String brand; double price; public void call(){ System.out.println("打电话"); } public void playGame(){ System.out.println("玩游戏"); } }
定义类的补充注意事项:
用来描述一类事物的类,专业叫做javabean类。在这一类中是不写main方法的。
在以前编写main方法的类叫做测试类。可以在测试类中创建javabean类的对象并进行赋值调用。
类名首字母建议大写,需要见名知意,驼峰模式。
一个java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。实际开发中建议还是一个文件定义一个class类。
成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值; 一般无需指定初始化值,存在默认值。
对象的成员变量的默认值规则。
2.封装
原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为
private关键字:是一个权限修饰符;可以修饰成员(成员变量和成员方法);被private修饰的成员只能在本类中才能访问
public class Student { private String name; private int age; private String phone; public Student(String name, int age, String phone) { this.name=name; this.age=age; this.phone=phone; } public void getName(){ System.out.println(name); } public void setName(String name){ this.name=name; } }
public class Java01 {
public static void main(String[] args) {
Student s = new Student("张三", 18, "13800000000");
s.getName();
s.setName("李四");
s.getName();
}
}
- private关键字是一个权限修饰符
- 可以修饰成员(成员变量和成员方法)
- 被private修饰的成员只能在本类中才能访问
- 针对private修饰的成员变量如果需要被其他类使用,提供相应的操作
- 提供set方法用于给成员变量赋值,提供gey方法用于获取成员变量的值,方法用public修饰
3.this关键字
public class Student{ private int age;//成员变量 public void method(){ int age = 10;//局部变量 System.out.println(age); } }
使用this.xxx调用的是成员变量,如果直接写age采用就近原则
this的作用可以区别成员变量和局部变量
4.构建方法
构造方法也叫做构造器、构造函数。 作用:在创建对象的时候给成员变量进行赋值的。
创造对象的时候,虚拟机会自动调用构造方法,作用是给成员变量进行初始化的。
构造方法的格式
public class Student{ 修饰符 类名(参数){ 方法体; } }
特点:
- 方法名与类名相同,大小写也要一致。
- 没有返回值类型,void也没有。
- 没有具体的返回值(不能由return带回结果数据)public class Student {
private String name; private int age; public Student() { //空参构造方法 虚拟机会添加 System.out.println("Student Constructor"); } public Student(String name, int age) {//有参构造方法 this.name=name; this.age=age; } //如果类中没有定义有参构造方法,虚拟机会添加一个空参构造方法,否则不会添加
//两种构造方法名相同,但是参数不同,是构造方法的重载
}
5.标准的javabean类
类名需要见名知意;成员变量使用private修饰;提供至少两个构造方法:无参构造方法/带全部参数的构造方法;成员方法:提供每一个成员变量对应的setXxx() / getXxx(), 如果还有其他行为,也需要写上
IDEA快捷生成键Alt+Insert/Alt+Fn+Insert
public class User { private String username; private String password; private String email; private int age; public User(){ } public User(String username, String password, String email, int age) { this.username = username; this.password = password; this.email = email; this.age = age; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
6.对象内存图

字节码文件会先加载到方法区。
当完全出栈,没有人使用堆中的数据,相关数据会变成垃圾
两个引用指向同一个对象是赋值为地址,两者修改同一个地址中的数值
7.局部变量和成员变量


浙公网安备 33010602011771号