1.对象数组:

/**
*学生类
*/
public class Student {
// 创建一个对象数组保存3名学生的信息
Student[] stus = new Student[3]; int age; // 年龄
String name; // 姓名 /**
* 无参构造
*/
public Student() {
} /**
* 带参构造
*/
public Student(int age, String name) {
this.age = age;
this.name = name;
} /**
* 循环给对象数组中的每一个元素 赋值
* @param stus 用户传递过来的对象数组
*/
public void addStudent() {
Scanner input = new Scanner(System.in);
for (int i = 0; i < stus.length; i++) {
System.out.println("请您给第" + (i + 1) + "个学生赋值:");
// 需要给数组中的每一个元素对象 实例化
stus[i] = new Student();
System.out.println("姓名:");
stus[i].name = input.next();
System.out.println("年龄:");
stus[i].age = input.nextInt();
} } /**
* @param students 需要遍历的数组名称
*/
public void showStudent() {
System.out.println("所有的学生信息显示如下:");
for (Student stu : stus) {
System.out.println(stu.name + ":" + stu.age);
}
} /**
* 查询学生
*/
public void finStudent(int begin, int end, String name) {
// 定义一个标记
boolean flag = false;
for (int i = begin - 1; i < end; i++) {
if (stus[i].name.equals(name)) {
flag = true; // 找到了 为true
break;
}
}
if (flag) {
System.out.println("找到了");
} else {
System.out.println("您查询的学生不存在!");
}
} /**
* @param oldName 学生以前的姓名
* @param newName 更改之后的姓名
*/
public void changeName(String oldName, String newName) {
// 定义一个标记 看是否更改成功
boolean flag = false;
for (int i = 0; i < stus.length; i++) {
if (stus[i].name.equals(oldName)) {
stus[i].name = newName;
flag = true;
break;
}
}
if (flag) {
System.out.println("修改成功");
} else {
System.out.println("没有找到!无法修改");
}
} }
public class StudentTest {

    /**
* 需求:
* 01.现在有3名学生!创建一个对象数组保存这3名学生的信息!并且输出!
* 02.让用户输入一个开始和结束位置!以及学生的姓名! 我们判断是否有该学生!
*
*
* 分析:
* 01.3名学生,每一个学生都是一个对象!那么第一步创建一个学生类!!!
* 并且 给类中增加属性和构造方法
* 02.什么是数组? 一组相同数据类型的数据集合!
* int [] nums=new int[3];
*
* 什么是对象数组?
* 3名学生 是3个对象! 类型一样,类型都是Student类型!
* Student [] students=new Student[3];
* 现在students数组中的每一个元素 是什么?
* students[0] 是一个Student对象!
* students[1] 是一个Student对象!
* students[2] 是一个Student对象!
* 03.怎么给对象数组中的每一个元素(Student对象)的属性赋值呢?
* 前提 每一个元素 都需要实例化!
* 因为这个对象数组中的每一个元素 不再是普通的数值了,而是一个Student类型的对象!
* 对象没有实例化,是不能使用的!
* 否则会产生NullPointerException(空指针异常)
* null.不出来任何东西!
*/
public static void main(String[] args) { // 实例化Student类
Student stu = new Student();
stu.addStudent(); // 循环新增学生信息
// 看到输入的所有 学生信息
stu.showStudent();
// 根据开始和结束位置,去数组中查询 有没有该学生
Scanner input = new Scanner(System.in);
System.out.println("请输入开始查询的位置:");
int begin = input.nextInt();
System.out.println("请输入结束查询的位置:");
int end = input.nextInt();
System.out.println("请输入查询的学生姓名:");
String name = input.next();
// 根据用户的输入找到指定的学生
stu.finStudent(begin, end, name); System.out.println("请输入需要修改的学生姓名:");
String oldName = input.next();
System.out.println("请输入新姓名:");
String newName = input.next();
stu.changeName(oldName, newName);
// 看到输入的所有 学生信息
stu.showStudent(); } }

2.封装:

/**
* 学生类
*
* 面向对象的三大特性!
* 01.封装
* 概念:将类的某些信息隐藏在类内部!不允许其他类直接访问,而是通过该类提供的方法来访问隐藏的信息!
* 目的:隐藏类的内部细节! 安全!
*
* 步骤:
* 001.把所有的属性 私有化
* 002.创建属性对应的set和get方法 shift +alt +s +r 快速生成类中所有变量的set和get方法
* 003.在对应的set或者get方法中 增加逻辑判断!确保数据的有效性!
*
*
* 02.继承
* 03.多态
*
*/
public class Student {
private int age; // 年龄
private String name; // 姓名
private char sex; // 性别 /**
* get() 是为了别人获取值
* set() 是为了给属性赋值
* shift +alt +s +r 快速生成类中所有变量的set和get方法
*
*/
public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public char getSex() {
return sex;
} /**
* @param sex 用户传递来的 用户性别
* 如果用户输入的是不健康的数据!
* 我们默认sex='男'
*/
public void setSex(char sex) {
if (sex == '男' || sex == '女') {
this.sex = sex;
} else {
// 不健康输入
this.sex = '男';
}
} }
public class StudentTest {

    public static void main(String[] args) {
Student stu = new Student();
stu.setSex('c'); // ͨ¹ýset()ÊôÐÔ¸³Öµ
// ͨ¹ýget()È¡Öµ
System.out.println(stu.getSex());
}
}
/**
* 学生类
*/
public class Student { int age; // 年龄
String name; // 姓名 /**
* shift +alt +s +o 快捷键 生成 有参和无参构造
*/
public Student(int age, String name) {
super();
this.age = age;
this.name = name;
} public Student() {
super();
} /**
* 学生自我介绍的方法
*/
public void showInfo() {
System.out.println("我的姓名是:" + name);
System.out.println("我的年龄是:" + age);
} public void showInfo(Student stu) {
stu.age = 888; // 改变参数的值
stu.name = "小白";
System.out.println("参数的姓名是:" + stu.name);
System.out.println("参数的年龄是:" + stu.age);
} /**
* 学生睡觉的方法
*/
public void sleep() {
System.out.println(name + "在睡觉");
} /**
* @param stu 用户传递来的学生对象
* @return 是否长大了
*/
public void changeStudent(Student stu) {
// 定义一个标记
boolean flag = false;
if (stu.age > 20) {
flag = true;
} if (flag) {
System.out.println("你已经长大了!");
} else {
System.out.println("你还年轻!");
} } }
public class StudentTest {
public static void main(String[] args) {
// 创建学生类对象
Student stu = new Student();
stu.age = 20;
stu.name = "小黑";
// 自我介绍
stu.showInfo();
// 调用对象的睡觉方法
stu.sleep();
System.out.println("----------------------------");
stu.showInfo(stu);
// 调用学生是否长大的方法
stu.changeStudent(stu);
} }
/**
* 方法重载
* 01.在一个类中
* 02.方法名相同
* 03.参数列表不同
* 04.与方法的修饰符和返回值类型 无关!
*
*
* 其实就是一个静态的多态!
* 都是买东西,但是根据传递参数的不同得到一个不同的结果!
*/
public class Student {
int age; /**
* 构造的重载
*/
public Student() {
} public Student(int age) {
this.age = age;
} /**
* 买东西 什么都不给
*/
public void buy() { } /**
* 买东西 给钱 没找零
*/
public void buy(double money) { } /**
* 买东西 给钱 ,给东西
*/
public void buy(double money, String someThing) { } }
/**
* 一个类在被jvm加载的时候,首先会加载类中所有由static修饰的方法,属性,代码块!
* 并把这个数据放进堆中的静态存储区!便于我们访问!
*
* static 可以修饰的内容
* 01.属性 静态属性
* 02.方法 静态方法
* 03.代码块 静态代码块
*
*
* 特点:
* 01. 有static修饰的内容,在整个程序运行期间,只存在一份!
* 02. 有static修饰的属性和方法,直接可以通过类名.属性 /类名.方法
* 03. static修饰的方法中 不能访问 非static修饰的的属性!
* 04.非static修饰的方法中能访问 static修饰的的属性!
*
*
* 例子:
* 之前说过 一个类可以创建N个对象!
* 每个对象都是独一无二的!
*
* 现在 我们实现N个对象 共享一个属性!
*
*/
public class Student { static int age; // 静态变量
String name; /**
* 创建一个static修饰的静态方法
* 之前的方式:
* 01.通过类创建对象
* 02.通过对象.方法访问
*
* 现在
* 直接通过类名.方法
*/ public static void sayHello() {
System.out.println("我是一个静态方法");
} public static void main(String[] args) {
Student stu1 = new Student();
stu1.age = 50;
stu1.name = "小黑";
Student stu2 = new Student();
stu2.age = 30;
stu2.name = "小白"; System.out.println("stu1的年龄:" + stu1.age);
System.out.println("stu2的年龄:" + stu2.age);
System.out.println("stu1的姓名:" + stu1.name);
System.out.println("stu2的姓名:" + stu2.name); /**
* 在 age前 加一个修饰符 static
* 虽然没有给stu3对象的age属性赋值!
* 但是因为age是static修饰的!
* 所以所有对象共享这个属性!
* 只要有一个对象改变了这个age属性!
* 那么所有对象的这个age属性都随之发生变化!
*/
Student stu3 = new Student();
stu3.age = 60;
System.out.println("stu3的年龄:" + stu3.age); Student.sayHello(); } }
/**
* 验证静态代码块和普通代码块的执行顺序
* 静态代码块优先执行!
*
* 如果有多个静态代码块或者普通代码块
* 按照书写的顺序执行!
*/
public class StaticBlock { public StaticBlock() {
System.out.println(" 无参构造");
} {
System.out.println("普通代码块1");
} {
System.out.println("普通代码块2");
} static {
System.out.println("静态代码块1");
}
static {
System.out.println("静态代码块2");
} public static void main(String[] args) {
// 实例化对象
StaticBlock s = new StaticBlock();
} }
/**
* 书写实体类的步骤
* 01.定义属性
* 02.快捷键生成set get
* 03.快捷键生成 有参 无参构造
* 04.生成toString()
*/
public class Student {
private int age;
private String name; // 属性 /**
* set和get方法名称后的第一个单词 首字母小写 ===》属性名
*
* 01.this调用本类的构造方法时,只能存在构造方法中的第一行!
* 02.this还可以访问我们的属性和方法 可以存在任何位置!
*/
public Student() {
this(50, "小黑"); // 调用本类的带参构造
} public Student(int age, String name) {
// this(); 调用本类的无参构造
this.age = age;
this.name = name;
} // set get方法
public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} }
public class StudentTest {

    public static void main(String[] args) {

        Student stu = new Student();
System.out.println(stu.getName());
System.out.println(stu.getAge()); }
}

OOP⑷的更多相关文章

  1. c#面向对象基础技能——学习笔记(二)基于OOP思想研究对象的【属性】

    字段(成员变量): 字段只能从对象中访问实例字段,无法直接从类中访问(换言之,不创建实例就不能访问),可以理解为:字段一般用在内部数据交互使用,当需要为外部提供数据时,(要优先使用自动实现的属性而不是 ...

  2. 一个简单oop的changeTab

    好多地方都会用到这样一个效果“点击tab切换内容页”,根据自己的想法实现了一下,写了个简单的插件.以前写代码都是标准的函数式编程,现在觉得面向对象编程看起来比较爽,并且更容易维护,于是就用oop的思想 ...

  3. Python OOP(面向对象编程)

    一OOP的作用 在Python中,类是面向对象设计(OOP)的主要工具.通过使用类这种工具,OOP可以: 1.分解代码,最小化代码的冗余. 2.通过定制现有的代码,来编写新的程序,而不用在原处进行修改 ...

  4. OOP,WEB开发实用小技巧

    偶然读到一篇博客,记录一下心得.这种设计对于新手来说一般是想不到的,它充分的发挥了OOP语言的特性,让代码专用而清爽.这是不是重构的思想呢? 我们在写业务层的时候,有很多方法是重复功能的,我们就可以使 ...

  5. 从OOP的角度看Golang

    资料来源 https://github.com/luciotato/golang-notes/blob/master/OOP.md?hmsr=toutiao.io&utm_medium=tou ...

  6. 玩转JavaScript OOP[2]——类的实现

    概述 当我们在谈论面向对象编程时,我们在谈论什么?我们首先谈论的是一些概念:对象.类.封装.继承.多态.对象和类是面向对象的基础,封装.继承和多态是面向对象编程的三大特性. JavaScript提供了 ...

  7. Atitit 面向对象编程(OOP)、面向组件编程(COP)、面向方面编程(AOP)和面向服务编程(SOP)的区别和联系

    Atitit 面向对象编程(OOP).面向组件编程(COP).面向方面编程(AOP)和面向服务编程(SOP)的区别和联系 1. 面向组件编程(COP) 所以,组件比起对象来的进步就在于通用的规范的引入 ...

  8. iOS - 对OOA、OOD、OOP的理解

    很多人在求职的时候,会遇到一个这样的问题:“对OOD/OOP有较深的理解”,这个时候有人就会问OOD.OOP是什么呢?那么今天咱们就一块来看一下OOA.OOD.OOP到底是什么! (一)OOA--面向 ...

  9. OOP感悟

    行内讲的最多的就是出来一年内基本靠copy,一年后才基本懂得如何去写代码,而理解领悟oop,需要的时间却不定. 我工作中,我发现很多人拿着面向对相当的语言作者做着面向过程的事情,不需要知其所以然,只要 ...

  10. 初识JAVA之OOP

    有一段时间没发博客了,每次手打还是很累,但感觉很充实.. 最近发现很多初学者到了面向对象编程这个知识点时,不太清楚类是如何转化成为对象的,很是困扰,今天我在这里谈谈我的理解,大家一起来研究学习... ...

随机推荐

  1. JAVA基础知识总结:十九

    一.多线程使用过程中的临界资源问题 1.临界资源:被多个线程同时访问的资源 临界资源产生的原因:有多个线程同时访问一个资源的时候,如果一个线程在取值的过程中,时间片又被其他的线程抢走了,临界资源问题就 ...

  2. ICO分享

  3. Go语言学习之4 递归&闭包&数组切片&map&锁

    主要内容: 1. 内置函数.递归函数.闭包2. 数组与切片3. map数据结构4. package介绍 5. 排序相关 1. 内置函数.递归函数.闭包 1)内置函数 (1). close:主要用来关闭 ...

  4. Ubuntu 16.04下docker ce的安装(待完善)

    参见:https://www.cnblogs.com/senlinyang/p/8203191.html https://blog.csdn.net/qq_34906391/article/detai ...

  5. mysql5.6以上版本: timestamp current_timestamp报1064/1067错误

    mysql5.6以上版本: timestamp current_timestamp报1064/1067错误 在创建时间字段的时候 DEFAULT CURRENT_TIMESTAMP表示当插入数据的时候 ...

  6. PHP操作MySQL数据库--PHP的应用

    一.Apache服务器的安装 <1>安装版(计算机相关专业所用软件---百度云链接下载)-直接install<2>非安装版(https://www.apachehaus.com ...

  7. Jumpserver3.0部署(Centos6.x)

    1.jumpserver基础环境准备[root@jumpserver ~]# yum -y install epel-release[root@jumpserver ~]# yum clean all ...

  8. 通俗大白话来理解TCP协议的三次握手和四次断开

    from : https://blog.csdn.net/Neo233/article/details/72866230?locationNum=15&fps=1%20HTTP%E6%8F%A ...

  9. 精华 selenium_webdriver(python)调用js脚本

    #coding=utf-8 from selenium import webdriver import time driver = webdriver.Firefox() driver.get(&qu ...

  10. 安卓——Activity生命周期

      在xml 设计页面添加标签 xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...