类和对象
类是对事物的一种描述,对象则为具体存在的事物
类---由属性和行为(方法)组成
类的属性---在类中通过成员变量来体现
类的行为---在类中通过成员方法来体现
类的定义步骤:1.定义类 2.编写类的成员变量 3.编写类的成员方法
public class 类名{
//成员变量
变量1的数据类型 变量1;
变量2的数据类型 变量2;
//成员方法
方法1;
方法2;
}
定义类的注意事项
1.类名首字母建议大写,需要见名知意。
2.一个Java文件中可以定义多个class类,且只能有一个类是public修饰,而且public修饰的类名必须为代码文件名。一般一个文件定义一个类。
3.成员变量的完整定义格式:修饰符 数据类型 变量名称 = 初始化值; 一般无需指定初始化值,存在默认值。
javabean类--不写main方法
用来描述一类事物的类
如何设计javabean类:
根据需求,看需求中有哪几类事物,每个事物都要对应一个类,这类事物的名词都可以定义为属性,这类事物的动词都可定义为行为(方法)。
javabean类的注意事项
1.类名需要见名知意
2.成员变量都使用private修饰
3.提供至少两个构造方法------>无参与有参
4.成员方法---->提供每个成员变量对应的setXxx()和GetXxx(),除此以外其他需求也要写
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;
}
//快捷键是 alt +insert alt + fn + insert
public void setUsername(String username){
this.username = username;
}
public String getUsername(String username){
return username;
}
public void setPassword(String password){
this.password = password;
}
public String getPassword(String usernameusername){
return password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
测试类---写main方法的类
我们可以在测试类中创建Javabean类的对象,进行赋值调用。
对象的使用
创建对象的格式: 类名 对象名 = new 类名();
调用成员的格式: 对象名.成员变量 对象名.成员方法();
public class Phone {
//定义成员属性
String brand;
double price;
//成员方法,请注意成员方法定义时没有static
public void call (){
System.out.println("手机在打电话");
}
public void playGame(){
System.out.println("手机在玩游戏");
}
}
public class PhoneTest {
/*根据类。定义对象,并调用成员*/
public static void main(String[] args) {
//创建手机类的对象
phone p = new phone();
//给对象p的成员变量赋值
p.brand = "小米";
p.price = 1999.98;
System.out.println(p.brand);
System.out.println(p.price);
//调用成员方法
p.call();
p.playGame();
}
}
面向对象的三大特征
封装
对象代表什么,就要封装对应的数据,并提供数据对应的行为。
封装的好处:正确地设计对象的属性和方法、降低学习成本
private关键字
private是一个权限修饰符,用来修饰成员(成员变量和成员方法),被private修饰的成员只能在本类中才能访问。
为什么会出现私有化的成员变量------>防止该成员变量在其他类中被赋值为不合理的值。
对于每一个私有化的成员变量------>都要提供get和set方法。
set方法:是给成员变量赋值;
get方法:对外提供成员变量的值。
public class BoyFriend {
//成员属性
private String name;
private int age;
/*对于每一个私有化的成员变量------>都要提供get和set方法。
set方法:是给成员变量赋值;
get方法:对外提供成员变量的值。
*/
//给私有成员变量name进行赋值
public void setName(String hisName){
name = hisName;
}
public String getName(){
return name;
}
//给私有成员变量age进行赋值
public void setAge(int hisAge){
if (hisAge>=18&&hisAge<=30){
age = hisAge;
}else {
System.out.println("非法参数");
}
}
public int getAge(){
return age;
}
}
public class BoyFriendTest {
public static void main(String[] args) {
BoyFriend boy1 = new BoyFriend();
boy1.setName("沈星回");
boy1.setAge(24);
}
}
继承
多态
就近原则---局部变量与成员变量重名时
在一个类中,方法以外的变量,称为成员变量;方法以内的变量,称为局部变量
当局部变量与成员变量重名时,采取就近原则------>谁离我近,我用谁
当需要使用成员变量时,可以在变量前面加上 this.
public class BoyFriend {
//成员属性
private String name;
private int age;
/*对于每一个私有化的成员变量------>都要提供get和set方法。
set方法:是给成员变量赋值;
get方法:对外提供成员变量的值。
*/
//给私有成员变量name进行赋值
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
//给私有成员变量age进行赋值
public void setAge(int age){
if (age>=18&&age<=30){
this.age = age;
}else {
System.out.println("非法参数");
}
}
public int getAge(){
return age;
}
}
public class BoyFriendTest {
public static void main(String[] args) {
BoyFriend boy1 = new BoyFriend();
boy1.setName("沈星回");
boy1.setAge(24);
System.out.println("我的一号男朋友是"+boy1.getName());
System.out.println("我的一号男朋友的年龄是"+boy1.getAge());
}
}
构造方法
创建对象的时候给,虚拟机会自动调用构造方法,作用是给成员变量进行初始化赋值。
构造方法的格式
public class Student{
修饰符 类名(参数){
方法体;
}
}
特点:
方法名要与类名完全一致,大小写也要完全一致。
没有返回值类型,连void也没有,同时也没有具体的返回值(不能由return带回结果数据)
构造方法不需要我们手动调用,在创建对象时由虚拟机调用,每创建一次对象,就会调用一次构造方法。
如果我们没有写任何的构造方法,那么虚拟机 会 给我们加一个空参构造方法。
//无参构造 一般情况下,无参构造也要存在,因为有时我们可能无法确定该对象的参数的具体取值
public BoyFriend(){
}
//有参构造方法
public BoyFriend(String name,int age){
this.name = name;
this.age = age;
}
注意事项:
1.如果没有定义构造方法,系统将会给出一个默认的无参数构造方法
2.如果定义了构造方法,系统将不再提供默认构造方法
3.带参构造方法,和无参构造方法,两者方法名相同,但是参数不同,这叫做构造方法的重载。
4.不管什么情况下,我们都需要手动书写无参构造和有参构造。