1.设计对象并使用
类:使对象共同特征的描述
对象:是真实存在的具体的东西
如何定义类:
public class 类名{
1.成员变量
2.成员方法
3.构造器
4.代码块
5.内部类
}
Javabean类:用来描述一类事物的类(在Javabean类中,是不写main方法的)
🐖:
1.类名首字母建议大写,建议见名知意
2.一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名,实际开发中建议一个文件定义一个class类
3.成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值;一般无需指定初始化值,存在默认值
例:demo1.java
public class demo1 {
//属性
String name;
int age;
String gender;
//行为
public void sleep(){
System.out.println("睡觉");
}
public void eat(){
System.out.println("吃饭");
}
}
demo1_test.java
public class demo1_test {
public static void main(String[] args){
//创建对象
demo1 d1=new demo1();
d1.name="xcm";
d1.age=20;
d1.gender="famale";
System.out.println(d1.name);
System.out.println(d1.age);
System.out.println(d1.gender);
d1.sleep();
d1.eat();
}
}
2.封装
定义:封装就是把过程和数据包裹起来,对数据的访问只能通过已经定义的接口,面向对象计算始于这个基本概念,即现实世界已经被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象
作用:提高代码的安全性
原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为
例:人关门
人:给门一个作用力
门:自己关起来
private关键字
修饰成员变量和成员方法,被private修饰的成员只能在本类中才能访问
提供“setXxx(参数)方法,用于给成员变量赋值,方法用public修饰
提供”getXxx(参数)方法,用于获取成员变量的值,方法用public修饰
package Object;
public class Girlfriend {
//属性
private String name;
private int age;
private String gender;
public void setName(String n){
name=n;
}
public String getName(){
return name;
}
public void setAge(int a){
if(a>=18&&a<=50){
age=a;
}
else{
System.out.println("非法参数");
}
}
public int getAge(){
return age;
}
public void setGender(String g){
gender=g;
}
public String getGender() {
return gender;
}
//行为
public void sleep(){
System.out.println(("睡觉"));
}
public void eat(){
System.out.println(("吃饭"));
}
}
package Object;
public class Girlfriend_test {
public static void main(String[] args){
//创建对象
Girlfriend gf1=new Girlfriend();
//赋值
gf1.setName("xcm");
gf1.setAge(18);
gf1.setGender("famale");
System.out.println(gf1.getName());
System.out.println(gf1.getAge());
System.out.println(gf1.getGender());
gf1.sleep();
gf1.eat();
}
}
3.this关键字
作用:区别成员变量和局部变量
就近原则:谁离我近,我就用谁
public class GirlFriend{
private int age;
public void method(){
int age=10;
System.out.println(age);
}
}
public class GirlFriendTest {
public static void main(String[] args){
GirlFriend gf1=new GirlFriend();
gf1.method();
}
}
此时,age=10
public class GirlFriend{
private int age;//age=0
public void method(){
int age=10;
System.out.println(this.age);//使用成员变量中的age
}
}
public class GirlFriendTest {
public static void main(String[] args){
GirlFriend gf1=new GirlFriend();
gf1.method();
}
}
age=0;
4.构造方法
格式:
public class Student{
修饰符 类名(参数){
方法体:
}
}
特点:
1.方法名和类名相同,大小写也要一致
2.没有返回值类型,连void也没有
3.没有具体的返回值(不能由return带回结果数据)
执行时机:
1.创建对象的时候由虚拟机调用,不能手动调用构造方法
2.,每创建一次对象。就会调用 一次构造方法
作用:
创建对象的时候,由虚拟机自动调用,给成员变量进行初始化的
public class Student {
private String name;
private int age;
//如果我们自己没有写任何的构造方法
//那么虚拟机给我们加一个空参构造方法
public Student(String name,int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class StudentTest {
public static void main(String[] args) {
//创建对象
Student s = new Student("zhangsan",23);
System.out.println(s.getName());
System.out.println(s.getAge());
}
}
🐖:
①构造方法的定义
如果没有定义构造方法,系统将给出一个默认的无参数构造方法
如果定义了构造方法,系统将不在提供默认的构造方法
②构造方法的重载
带参构造方法和无参数构造方法,两者方法名相同,但是参数不同,这叫做构造方法的重载
③推荐的使用方式
无论是否使用,都手动书写无参数构造方法和带全部参数的构造方法
5.标准JavaBean
①类名需要见名知意
②成员变量需要用private修饰
③提供至少两个构造方法——无参构造方法和带全部参数的构造方法
④成员方法
提供每一个成员变量对应的setXxx()/getXxx(),如果还有其他行为,也需要写上
快捷键构造方法:Alt+Insert-构造函数
快捷键构造setXxx()/getXxx()成员方法:Alt+Insert-Getter and Setter
或右键-Ptg To Javabean
package test4;
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 + "}";
}
}
6.对象内存图
jvm划分:栈、堆、方法区、寄存器、本地方法栈
方法区:字节码文件加载时进入的内存
栈内存:方法运行时所进入的内存、变量
堆内存:new出来的东西会在这块内存中开辟空间并产生地址
🐖:
Java文件编译的过程
- 程序员编写的.java文件
- 由javac编译成字节码文件.class(为什么编译成class文件,因为JVM只认识.class文件)
- 在由JVM编译成电脑认识的文件
①一个对象的内存图
Student s = new Student();
1.加载class文件
2.申明局部变量
3.在堆内存中开辟一个空间
4.默认初始化
5.显示初始化
6.构造方法初始化
7.将堆内存中的地址值赋值给左边的局部变量