面向对象
基础介绍
- 什么是类和对象?
- 类用于描述共同特征,对象是具体的实例。
- 成员变量和方法
- 成员变量是属性,名词。方法是行为,动词。
- 类名 对象名 = new类名()
- 调用
- 对象名.成员变量()
- 对象名.方法()
JAVAbean
类
- 类名首字母大写,采用驼峰模式。
- 一个
java
文件中可以有多个class类,但public修饰的类只能有一个,且被public修饰的类要与文件名相同。(一个文件写一个类) - 成员变量的完整定义格式: 修饰符 数据类型 变量名 = 初始值; ,如果没有赋予初始值[1]就存在默认值[2]。
封装
什么是封装?
- 对象代表什么,就要封装对应的数据,和对应的行为。
封装需要使用private关键字
- 可以修饰成员变量和成员方法
- 只能在本类中使用
- 针对被private修饰的成员,如果需要被其他类使用,则要提供相对应的操作。
- 即通过set() get()方法,方法用public修饰
public class GrilFriend {
//1.类中的变量都要用private修饰
private String name;
private int age;
//2.对每一个私有化的变量,提供set() get()方法。
//3.set()方法对成员变量进行赋值,只需要赋值,不用返回值,返回值类型用void。
public void setName(String a){
name = a;
}
//4.get()方法对外提供成员变量的值,不需要接收值,无形参。同时对外提供值,方法的返回值类型要与成员变量的返回值类型一致。
public String getName(){
return name;
}
public void serAge(int b){
if(b >= 18 && b <=50 ){
age = b;
}else{
System.out.println("不是喜欢的类型");
}
}
public int getAge(){
return age;
}
}
public class GirlFriendText {
public static void main(String[] args) {
GrilFriend gf1 = new GrilFriend();
gf1.serAge(18);
gf1.setName("小诗诗");
System.out.println(gf1.getAge());
String name = gf1.getName();
System.out.println(name);
}
}
就近原则和this关键字
在Java中对变量起名,需要起到见名知意的效果。在上面GrilFriend
实例中形参a和形参b显然不符合这一要求。
那么我们可以改写成name和age。如下:
public class GrilFriend {
private String name;
private int age;
public void setName(String name){
//局部变量代表测试类中调用方法传递过来的数据
//左边是成员变量的name
this.name = name;
}
public String getName(){
return name;
}
public void serAge(int age){
if(age >= 18 && age <=50 ){
this.age = age;
}else{
System.out.println("不是喜欢的类型");
}
}
public int getAge(){
return age;
}
}
就近原则
public class GrilFriend{
private int age;//0
public void method(int age){
int age = 10;
System.out.println(age);//10,谁离我近就用谁
System.out.println(this.age);//代表成员变量
}
}
this
this的作用是区分成员变量和局部变量。
this的本质是方法调用者的地址值。
图中method()调用者是s,所以this(001)=s(001)。
构造方法
格式
修饰类型 类名(参数){}
特点
-
方法名与类名一致
-
没有返回值类型,void也没有。
-
没有具体返回值,也就没有返回结果,没有return.
执行
- 创建对象时由虚拟机调用,不能手动调用。
- 每创建一次对象,就会调用一次构造方法。
空参构造
- 如果没有写无参的构造方法,系统会提供默认的无参的构造方法。
- 如果手动写了无参的构造方法,系统就不提供默认的构造方法。
public class Student{
private String name;
public Student(){
System.out.println("吃饭了吗?");
}
}
public class StudentText{
public static void main(String[] args){
Student s = new Student();
}
}
结果:吃饭了吗?
有参构造
- 在初始化对象时,可以同时给对象赋值。
- 如果写了有参构造,无参构造器就没有了,需要自己写。
public class Student{
private String name;
private int age;
public Student(String name,int age){
this.name=name;
this.age=age;
}
public void setName(String name){
this.name= name;
}
public String getName(){
return name;
}
//age脑补
}
public class StudentText{
public static void main(String[] args){
Student s = new Student("小诗诗",18);
System.out.println(gf1.getname());
}
}
两种构造方法的联系
- 无参的构造方法和有参的构造方法虽然方法名相同,但是参数不同,这就是叫构造方法的重构。
- 无论使用与否,都要手动书写无参的构造方法和带全部参数的构造方法。
- 他们的作用是在创造对象时,由虚拟机调用,给成员变量初始化。
标准JavaBean
- 类名要见名知意
- 成员变量需要用private修饰
- 带有两个构造方法(无参和带全部参数)
- 对每个成员变量都写上get()和set()方法以及其他行为。
创建构造方法的快捷方式
- alt + (Fn) + insert ,选择 select none就创建空参构造;按住Shift点击最后一项全选,就是带全部参数的构造方法。
- 选getter and setter,选上所有的成员变量。
- 连接外网,File,settings,Plugins,搜PTG,这个插件可以一秒生成Javabean。
对象的内存图
注意:
- 遇到Student s = new Student();就会加载Student.class文件。
- 在Student类中没有对成员变量赋值,就不会显示初始化,而是默认初始化(name null,age 0)。没有写构造方法,就是空参构造。
- s.变量名或s.方法()可以看成地址值.变量名或地址值.方法()
- 当方法出栈后,没有变量指向堆空间,对象消失。
- 申明局部变量的意思是,对左边的变量申明空间。
- 当创建第二个对象时,不需要再加载.class文件
- 成员方法在堆空间中有自己的地址值,通过在堆中的地址找到方法区中的方法( study( ) )再进入栈中。
- 其中要注意的是变量名 = null,null表示不存在的空间,一旦使用就会断开连接。
基本数据类型和引用数据类型
基本数据类型的定义:数值存储在自己的空间中,
引用数据类型的定义:变量存的是地址值,通过地址使用其他空间的数据。例如:数组