java面向对象
思维:1.程序大众化
2.目标
3.不强调过程
明确目标
规划,计划-----设计它
当你执行完计划的时候-----达到目标
opp:站在更高层次看待事物
1.第一个狗系统
package com.alibaba.bean;
public class Dogs {
//狗名字
public String name;
//狗种类
public String variety;
//狗年龄
public int age;
//狗食物
public String food;
public void eat(){
System.out.println("狗吃饭");
}
public void sleep(){
System.out.println("狗睡觉");
}
}
调用上述代码
import com.alibaba.bean.Dogs;
public class ApplicationRun {
public static void main(String[] args) {
//张大爷你先注册试一试
Dogs zhangDog = new Dogs();
zhangDog.name = "Jerry";
zhangDog.variety = "拉布拉多";
zhangDog.age = 2;
zhangDog.food = "馒头";
zhangDog.sleep();
//王阿姨你也注册试试
Dogs wangDog = new Dogs();
wangDog.name = "Tom";
wangDog.variety = "藏獒";
wangDog.age = 3;
wangDog.food = "槟榔";
System.out.println("张大爷家狗的名字:" + zhangDog.name);
System.out.println("王阿姨家狗吃的什么:" + wangDog.food);
}
}
//狗睡觉
//张大爷家狗的名字:Jerry
//王阿姨家狗吃的什么:槟榔
2.成员变量,行为,类和this
package com.alibaba.bean;
//类当中的变量和方法都总称为:属性(共性,特性)
public class Dogs {
//成员变量:它们构成了类,所以这样命名
//它们是类的重要组成部分
//狗名字
public String name;
//狗种类
public String variety;
//狗年龄
public int age;
//狗食物
public String food;
//一个动作,这些方法(函数)在类当中,我们有很好听的名字--行为
public void eat(){
System.out.println(this.name + "在吃饭");
}
public void sleep(){
System.out.println(this.name + "在睡觉");
}
}
调用
import com.alibaba.bean.Dogs;
public class ApplicationRun {
public static void main(String[] args) {
//张大爷你先注册试一试
//对象————实例
//实例:显示生活的一个东西,对抽象的对象进行表示出来的产物。
//实例是一个真是存在的东西,是唯一的
//实实在在的例子,证明
Dogs zhangDog = new Dogs();
zhangDog.name = "Jerry";
zhangDog.variety = "拉布拉多";
zhangDog.age = 2;
zhangDog.food = "馒头";
//王阿姨你也注册试试
Dogs wangDog = new Dogs();
wangDog.name = "Tom";
wangDog.variety = "藏獒";
wangDog.age = 3;
wangDog.food = "槟榔";
System.out.println("张大爷家狗的名字:" + zhangDog.name);
System.out.println("王阿姨家狗吃的什么:" + wangDog.food);
//张大爷家的狗睡觉;
zhangDog.sleep();
//王阿姨家的狗吃饭
wangDog.eat();
}
}
3.注销账户和null指针异常
import com.alibaba.bean.Dogs;
public class ApplicationRun {
public static void main(String[] args) {
//张大爷你先注册试一试
Dogs zhangDog = new Dogs();
zhangDog.name = "Jerry";
zhangDog.variety = "拉布拉多";
zhangDog.age = 2;
//张大爷不想用了
//注销账户
zhangDog = null;
//null指针异常
//已经注销的账号,还想要输出有关他的实例就会报错
System.out.println("zhangDog name = " + zhangDog.name);
}
}
4.opp封装
package com.alibaba.bean;
import jdk.nashorn.internal.objects.annotations.Getter;
import jdk.nashorn.internal.objects.annotations.Setter;
//我们把成员变量做的安全,使用private 代替public 成员变量的特性,我们另外提供getter and setter ,这种方式叫 oop---封装
public class Dogs {
/*public 公共的,公有的————用户可以为所欲为
支付宝余额
public class aliPay {
public String balance;
}*/
//private 私人的
// 狗名字
private String name;
//狗种类
private String variety;
//狗年龄
private int age;
//狗食物
private String food;
//我们要给用户部分权限,能设置,能修改但是不能瞎改
// 快捷键 alt+insert 自动创建get和set函数
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getVariety() {
return variety;
}
public void setVariety(String variety) {
this.variety = variety;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFood() {
return food;
}
public void setFood(String food) {
this.food = food;
}
public void eat(){
System.out.println(this.name + "在吃饭");
}
public void sleep(){
System.out.println(this.name + "在睡觉");
}
}
///Application.java
//调用
import com.alibaba.bean.Dogs;
public class ApplicationRun {
public static void main(String[] args) {
Dogs zhangDog = new Dogs();
zhangDog.setName("jrray");
zhangDog.setAge(2);
zhangDog.setVariety("拉布拉多");
/*如果支付宝余额是公共的可想而知会出现什么问题
在我们编程中也是如此
aliPay ppt = new Dogs();
ppt.balance = "99999999999999";*/
System.out.println(zhangDog.getName());
System.out.println(zhangDog.getAge());
System.out.println(zhangDog.getVariety());
}
}
5.jar导入和lombok
利用lombok 的 jar包 封装时只需要在类之前使用@Getter
@Setter两句函数就可以实现输出的调用
如果有特殊的输出条件可另起写
jar导入利用:
1.从Maven官网上下载lombok jar包
在ldea项目上右键--> new --> Directory --> name:jar --> 将下载的lombok包导入
2.jar --> lombok包 右键 --> Add as Library -->level :Project Library
--> Add to module: 本项目名称
3.Build --> Rebuild Project
package com.alibaba.bean;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Dogs {
// 狗名字
private String name;
//狗种类
private String variety;
//狗年龄
private int age;
//狗食物
private String food;
//我们要给用户部分权限,能设置,能修改但是不能瞎改
// 快捷键 alt+insert 自动创建get和set函数
//特殊的拿过来单独写————方法的重写
public void setAge(int age) {
if(age < 0 || age > 30){
System.out.println("你输入的数据不合法,以默认清零");
this.age = 0;
} else{
this.age = age;
}
}
public void eat() {
System.out.println(this.name + "在吃饭");
}
public void sleep() {
System.out.println(this.name + "在睡觉");
}
}
//调用
import com.alibaba.bean.Dogs;
public class ApplicationRun {
public static void main(String[] args) {
Dogs zhangDog = new Dogs();
zhangDog.setName("jrray");
zhangDog.setAge(2);
zhangDog.setVariety("拉布拉多");
System.out.println(zhangDog.getName());
System.out.println(zhangDog.getAge());
System.out.println(zhangDog.getVariety());
}
}
6.ToString
package com.alibaba.bean;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class Dogs {
// 狗名字
private String name;
//狗种类
private String variety;
//狗年龄
private int age;
//狗食物
private String food;
//我们要给用户部分权限,能设置,能修改但是不能瞎改
// 快捷键 alt+insert 自动创建get和set函数
//特殊的拿过来单独写————方法的重写
public void setAge(int age) {
if(age < 0 || age > 30){
System.out.println("你输入的数据不合法,以默认清零");
this.age = 0;
} else{
this.age = age;
}
}
public void eat() {
System.out.println(this.name + "在吃饭");
}
public void sleep() {
System.out.println(this.name + "在睡觉");
}
//跟getter一样可以在最开始前写@。。。。。,后面就不用写具体的函数了
@Override
public String toString() {
return "Dogs{" +
"name='" + name + '\'' +
", variety='" + variety + '\'' +
", age=" + age +
", food='" + food + '\'' +
'}';
}
}
//调用
import com.alibaba.bean.Dogs;
public class ApplicationRun {
public static void main(String[] args) {
Dogs zhangDog = new Dogs();
zhangDog.setName("jrray");
zhangDog.setAge(2);
zhangDog.setVariety("拉布拉多");
//利用toString打印zhangDog这个对象的全部
System.out.println("zhangDog = " + zhangDog);
}
}
7.构造方法
package com.alibaba.bean;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class Dogs {
// 狗名字
private String name;
//狗种类
private String variety;
//狗年龄
private int age;
//狗食物
private String food;
//构造方法
//不能加类型
//默认创建,隐藏的,只要创建,就会存在
//无参数构造函数(无参构造器)
public Dogs() {
}
// 有参的构造函数
public Dogs(String name, String variety, int age, String food) {
this.name = name;
this.variety = variety;
this.age = age;
this.food = food;
}
public void eat() {
System.out.println(this.name + "在吃饭");
}
public void sleep() {
System.out.println(this.name + "在睡觉");
}
}
//
import com.alibaba.bean.Dogs;
public class ApplicationRun {
public static void main(String[] args) {
//初始化对象(实例)
Dogs zhangDog = new Dogs("jerry", "拉布拉多", 2, null);
System.out.println("zhangDog = " + zhangDog);
}
}
8.构造方法的重载和this
package com.alibaba.bean;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class Dogs {
// 狗名字
private String name;
//狗种类
private String variety;
//狗年龄
private int age;
//狗食物
private String food;
//构造方法
//不能加类型
//默认创建,隐藏的,只要创建,就会存在
//无参数构造函数(无参构造器)
public Dogs() {
}
// 有参的构造函数
public Dogs(String name, String variety, int age, String food) {
this.name = name;
this.variety = variety;
this.age = age;
this.food = food;
}
//构造函数重载,相同类名,参数个数或参数类型不同
public Dogs(String name, int age) {
this.name = name;
this.age = age;
}
public void eat() {
System.out.println(this.name + "在吃饭");
}
public void sleep() {
System.out.println(this.name + "在睡觉");
//在方法中调用方法
//如果要在睡觉时吃饭
this.eat();
}
}
9. 静态变量和静态方法
package com.alibaba.bean;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class Dogs {
//NanG 小区名字 静态变量
public static String plot = "NanG";
// 狗名字
private String name;
//狗种类
private String variety;
//狗年龄
private int age;
//狗食物
private String food;
//构造方法
//不能加类型
//默认创建,隐藏的,只要创建,就会存在
//无参数构造函数(无参构造器)
public Dogs() {
}
// 有参的构造函数
public Dogs(String name, String variety, int age, String food) {
this.name = name;
this.variety = variety;
this.age = age;
this.food = food;
}
//构造函数重载,相同类名,参数个数或参数类型不同
public Dogs(String name, int age) {
this.name = name;
this.age = age;
}
public void eat() {
System.out.println(this.name + "在吃饭");
}
public void sleep() {
System.out.println(this.name + "在睡觉");
//在方法中调用方法
//如果要在睡觉时吃饭
this.eat();
}
//静态方法
public static void injection() {
System.out.println("所有狗,月底打针");
}
}
//
import com.alibaba.bean.Dogs;
public class ApplicationRun {
public static void main(String[] args) {
System.out.println("Dogs.plot = " + Dogs.plot);
Dogs.injection();
}
}
10.private static
package com.alibaba.bean;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class Dogs {
//NanG 小区名字 静态变量
//如果用公共类,不安全,应该使用
//使用private实现小区名字的锁定
// public static String plot = "NanG";
private static String plot = "NanG";
// 狗名字
private String name;
//狗种类
private String variety;
//狗年龄
private int age;
//狗食物
private String food;
//构造方法
//不能加类型
//默认创建,隐藏的,只要创建,就会存在
//无参数构造函数(无参构造器)
public Dogs() {
}
// 有参的构造函数
public Dogs(String name, String variety, int age, String food) {
this.name = name;
this.variety = variety;
this.age = age;
this.food = food;
}
//构造函数重载,相同类名,参数个数或参数类型不同
public Dogs(String name, int age) {
this.name = name;
this.age = age;
}
public void eat() {
System.out.println(this.name + "在吃饭");
}
public void sleep() {
System.out.println(this.name + "在睡觉");
//在方法中调用方法
//如果要在睡觉时吃饭
this.eat();
}
//使用静态方法实现小区名字的返回
public static String getPlotInstance(){
return plot;
}
}package com.alibaba.bean;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class Dogs {
//NanG 小区名字 静态变量
//如果用公共类,不安全,应该使用
// public static String plot = "NanG";
private static String plot = "NanG";
// 狗名字
private String name;
//狗种类
private String variety;
//狗年龄
private int age;
//狗食物
private String food;
//构造方法
//不能加类型
//默认创建,隐藏的,只要创建,就会存在
//无参数构造函数(无参构造器)
public Dogs() {
}
// 有参的构造函数
public Dogs(String name, String variety, int age, String food) {
this.name = name;
this.variety = variety;
this.age = age;
this.food = food;
}
//构造函数重载,相同类名,参数个数或参数类型不同
public Dogs(String name, int age) {
this.name = name;
this.age = age;
}
public void eat() {
System.out.println(this.name + "在吃饭");
}
public void sleep() {
System.out.println(this.name + "在睡觉");
//在方法中调用方法
//如果要在睡觉时吃饭
this.eat();
}
//使用静态方法实现小区名字的锁定
public static String getPlotInstance(){
return plot;
}
}
//
import com.alibaba.bean.Dogs;
public class ApplicationRun {
public static void main(String[] args) {
//静态变量小区改为 private类时无法利用Dog.plot
// System.out.println("Dogs.plot = " + Dogs.plot);
System.out.println("plot = " + Dogs.getPlotInstance());
}
}
11.static单例模式
package com.alibaba.bean;
public class Earth {
//static 单例设计模式
private static Earth earthInstance = new Earth();
private Earth() {
}
public static Earth getEarthInstance() {
return earthInstance;
}
public void hello() {
System.out.println("hello");
}
}
//
import com.alibaba.bean.Earth;
public class Application {
public static void main(String[] args) {
Earth earthInstance = Earth.getEarthInstance();
earthInstance.hello();
}
}