面向对象
类和对象
- 类(设计图):是对象共同特征的描述;
- 对象:是真实存在的具体东西
在Java中,必须先设计类,才能获得对象
public class 类名{
1.成员变量
2.成员方法
3.构造器
4.代码块
5.内部类
}
public class Phone{
//属性(成员变量)
String brand;
double price;
//行为(方法)
public void call(){
}
public void playGame(){
}
}
定义类的注意事项
- 类名首字母建议大写,需要见名知意
- 一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须为代码文件名(实际开发中还是建议一个文件定义一个class类)
- 成员变量完整定义格式是:修饰符 数据类型 变量名称 = 初始化值;一般无需指定初始化值,存在默认值
封装
告诉我们如何正确设计对象的属性和方法
- 对象代表什么,就得封装对应的数据,并提供对应的行为
private关键字
- 是一个权限修饰符
- 可以修饰成员(成员变量和成员方法)
- 被private修饰的成员只能在本类中才能访问 以下代码并不安全
public class GirlFriend{
String name; //会出现负数等不合理的值
int age;
String gneder;
}
修改为以下代码
public class GirlFriend{
//将类中的变量转换为私有
private int age;
// set 赋值
public void setAge(int a){
if(a >= 18 && a <= 50){
age = a;
}else{
System.out.println("非法数据");
}
}
// get 获取
public int getAge(){
return age;
}
}
就近原则和this关键字
成员变量和局部变量
public class GrilFriend{
private int age; //成员变量
public void method(){
int age = 10; //局部变量
System.out.println(age);//输出 10
}
}
修改为this后可以调用成员变量
public class GrilFriend{
private int age; //成员变量
public void method(){
int age = 10; //局部变量
System.out.println(this.age);
}
}
构造方法
构造方法也叫做构造器,构造函数 作用:在创建对象的时候给成员变量进行初始化(赋值)。
public class Student(){
修饰符 类名(参数){
方法体;
}
特点:
方法名与类名相同,大小写也要一致
没有返回值类型,连void也没有
没有具体的返回值(不能由return带回结果数据) 空参构造:
public Student(){
System,out.println("执行空参构造")
}
空参调用:Student s = new Student()
带参构造:
public Student(String name,int age){
System.out.println("执行带参构造");
this.name = name;
this.age = age;
}
带参调用:Student s = new Student("Jim",18);
注意事项: 1.构造方法的定义
- 如果没有定义构造方法,系统将给出一个默认的无参数的构造方法
- 如果定义了构造方法,系统将不再提供默认的构造方法
2.构造方法的重载
- 带参构造方法和无参构造方法,方法名相同,但是参数不同,这叫构造方法的重载
3.推荐使用方式
- 无论是否使用,都手动书写无参数构造方法和带全部参数的构造方法
标准JavaBean
标准的Javabean类
- 类名需要见名知意
- 成员变量使用private修饰
- 提供至少两个构造方法
- 无参构造方法
- 带全部参数的构造方法
- 成员方法
- 提供每一个成员变量对应的setXxx() / getXxx()
- 如果还有其他行为,也需要写上
Java内存分配
new 一个对象: 1.加载class文件 2.申明局部变量 3.在堆内存中开辟一个空间 4.默认初始化 5.显示初始化 6.构造方法初始化 7.将堆内存中的地址值赋值给左边的局部变量
this本质:代表方法调用者的地址值
this作用:区分局部变量和成员变量
一些实例…
键盘录入:
第一套体系 (遇到空格,制表符,回车就停止接收)
nextInt(); //接收整数
nextDouble(); //接收小数
next(); //接收字符串
第二套体系(遇到回车停止接收)
nextLine(); //接收字符串