一、类和对象
1.什么是类和对象?
类(设计图):是对象共同特征的描述;
对象:是真实存在的具体的东西
在java中,必须先设计类,才能获得对象。
2、如何定义类?
public class 类名{
1.成员变量(代表属性,一般是名词)
2.成员方法(代表行为,一般是动词)
3.构造器(后面学习)
4.代码块(后面学习)
5.内部类(后面学习)
}
3.如何得到类的对象?
类名 对象名 = new 类名();
4.如何使用对象?
访问属性: 对象名.成员变量
访问行为: 对象名.方法名(...)
#定义类的补充注意事项
●用来描述一类事物的类,专业叫做:Javabean类。
在Javabean类中,是不写main方法的。
●在以前,编写main方法的类,叫做测试类。
我们可以在测试类中创建javabean类的对象并进行赋值调用。
●类名首字母建议大写,需要见名知意,驼峰模式。
●一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。实际开发中建议还是一个文件定义一个class类。
●成员变量的完整定义格式是: 修饰符 数据类型 变量名称 = 初始化值;一般无需指定初始化值,存在默认值。
二、封装
1.什么是封装?
●告诉我们,如何正确设计对象的属性和方法
●原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为
2.封装的好处
●让编程变得很简单,有什么事,找对象,调方法就行。
●降低我们的学习成本,可以少学、少记,或者说压根不用学,不用记对象有哪些方法,有需要时去找就行
3.private关键字
●是一个权限修饰符
●可以修饰成员(成员变量和成员方法)
●被private修饰的成员只能在本类中才能访问
●针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作
●提供“setXxx(参数)”方法,用于给成员变量赋值,方法用public修饰
●提供“getXxx()”方法,用于获取成员变量的值,方法用public修饰
三、this关键字
成员变量和局部变量
就近原则
作用:区分成员变量和局部变量
四、构造方法
构造方法也叫作构造器、构造函数。
作用:在创建对象的时候给成员变量进行赋值的。
public class Student{
修饰符 类名(参数){
方法体;
}
}
特点:1.方法名与类名相同,大小写也要一致
2.没有返回值类型,连void都没有
3.没有具体的返回值(不能由retrun带回结果数据)
执行时机:1.创建对象的时候由虚拟机调用,不能手动调用构造方法
2.每创建一次对象,就会调用一次构造方法
#构造方法有几种,各自的作用是什么?
无参数构造方法:初始化的对象时,成员变量的数据均采用默认值。
有参数构造方法:在初始化对象的时候,同时可以为对象进行赋值。
#构造方法注意事项
a.构造方法的定义
如果没有定义构造方法,系统将给出一个默认的无参数构造方法
如果定义了构造方法,系统将不再提供默认的构造方法
b.构造方法的重载
带参构造方法,和无参数构造方法,两者方法名相同,但是参数不同,这叫做构造方法的重载
c.推荐的使用方式
无论是否使用,都手动书写无参数构造方法,和带全部参数的构造方法
五、标准Javabean
1.标准的JavaBean类
a.类名需要见名知意
b.成员变量使用private修饰
c.提供至少两个构造方法
无参构造方法
带全部参数的构造方法
d.成员方法
提供每一个成员变量对应的setXxx()/getXxx()
如果还有其他行为,也需要写上
package cn.nwafu;
public class User {
//属性
private String username;
private String password;
private String email;
private String gender;
private int age;
public User() {
}
public User(String username, String password, String email, String gender, int age) {
this.username = username;
this.password = password;
this.email = email;
this.gender = gender;
this.age = age;
}
/**
* 获取
* @return username
*/
public String getUsername() {
return username;
}
/**
* 设置
* @param username
*/
public void setUsername(String username) {
this.username = username;
}
/**
* 获取
* @return password
*/
public String getPassword() {
return password;
}
/**
* 设置
* @param password
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 获取
* @return email
*/
public String getEmail() {
return email;
}
/**
* 设置
* @param email
*/
public void setEmail(String email) {
this.email = email;
}
/**
* 获取
* @return gender
*/
public String getGender() {
return gender;
}
/**
* 设置
* @param gender
*/
public void setGender(String gender) {
this.gender = gender;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "User{username = " + username + ", password = " + password + ", email = " + email + ", gender = " + gender + ", age = " + age + "}";
}
// //空参
// public User(){}
// //带全部参数构造
// public User(String username,String password,String email,String gender,int age){
// this.username = username;
// this.password = password;
// this.email= email;
// this.gender = gender;
// this.age = age;
// }
//get和set方法
//10
//快捷键
//alt+insert
//alt+fn+insert
//ptg插件
// public void setUsername(String username){
// this.username = username;
// }
// public String getUsername(){
// return username;
// }
// public void setPassword(String password){
// this.password = password;
// }
// public String getPassword(){
// return password;
// }
// public void setEmail(String email){
// this.email = email;
// }
// public String getEmail(){
// return email;
// }
// public void setGender(String gender){
// this.gender = gender;
// }
// public String getGender(){
// return gender;
// }
// public void setAge(int age){
// this.age = age;
// }
// public int getAge(){
// return age;
// }
}
快捷键
//alt + insert
/ /alt + Fn + insert
构造方法:右键单击
空参: ->Constructor-select none
全部参数: ->Constructor->按住shift不松点击最下面的属性(或者ctrl+a)->ok
get和set方法: ->Getter and Setter->ctrl+a->ok
ptg插件:右键单击空白处选择ptg to JavaBean
六、对象内存图
1、一个对象的内存图
2、两个对象内存图
3、两个引用指向同一个对象
补充:
基本数据类型和引用数据类型区别(从内存角度)
this内存原理
成员变量与局部变量的区别