2017.12.6T19_B2_3.4
package com.xdf.bean;
/**
* 面向对象的3大特性
*
* 1.封装
* 概念:将类的所有信息 隐藏起来不让外部类去直接访问! 而是通过对应的方法去访问!
* 目的: 隐藏类的内部细节,安全!
*
* 封装的步骤:
* 01.所有属性私有化
* 02.创建对应的get和set shift +alt +s
* 03.在对应的方法中增加逻辑判断,确保数据的正确性
*
* 所有的get都是获取属性值
* 所有的set都是给属性赋值
*
*
* 2.继承
* 3.多态
*
*
*/
public class Student { // 学生类
// shift +alt +a 私有化属性
private int age;// 年龄
private String name;// 姓名
private char sex;// 性别
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;
}
/**
* sex:用户传递过来的性别
* 如果用户输入的是不健康的数据
* 默认sex='男'
*/
public void setSex(char sex) {
if (sex == '男' || sex == '女') {
this.sex = sex;
} else {
this.sex = '男';
}
}
/**
* shift+alt+s ===>toString()
* 01.因为java中所有的类都默认继承Object
* 02.如果我们想输出一个对象, 不是看它的内存地址,而是需要看到对象的每个属性值
* 03.需要重写Object类中的toString()
*/
@Override
public String toString() {
return "Student [年龄=" + age + ", 姓名=" + name + ", 性别=" + sex
************************************************************************
package com.xdf.bean;
public class StudentDemo {
public static void main(String[] args) {
// 创建Student类对象
Student student = new Student();
// 通过set()给对象的属性赋值
student.setName("小黑");
student.setAge(50);
student.setSex('m'); // 不健康的输入
System.out.println(student); // 如果Student类没有重写toString()则执行Object的toString()
}
}*************************************************************************
package com.xdf.loading;
/**
* 都是购物的方法,但是根据传递的参数不同,会得到一个不同的结果!
*
* 方法重载 方法=行为
* 01.在同一个类中
* 02.方法名相同
* 03.参数列表不同(参数个数,参数类型,参数顺序)
* 04.与访问修饰符和返回值类型 无关
*
*
* 方法重载 其实就是一个 静态的多态!
*/
public class Student { // 学生类
/**
* 学生购物的方法 压马路 没买东西 也没花钱
*/
public void buy() {
}
/**
*
* 学生购物的方法 压马路 花钱了
*/
public void buy(double money) {
}
/**
*
* 学生购物的方法 买东西 花钱了
*/
public void buy(double money, String something) {
}
/**
*
* 学生购物的方法 买东西带回家 花钱了
*/
private String buy(double money, String something) {
return "一堆东西";
************************************************************************
package com.xdf.staticdemo;
public class StaticBlock {
// 类变量
static int age;
{
System.out.println("普通代码块1");
}
{
System.out.println("普通代码块2");
}
static {
System.out.println("静态代码块1");
}
static {
System.out.println("静态代码块2");
}
public StaticBlock() {
System.out.println("无参 构造方法");
}
// 测试方法
public static void main(String[] args) {
/**
* 执行两个静态代码块 顺序是 自上而下
* StaticBlock.age = 5;
*/
/**
* 01.两个静态代码块
* 02.两个普通代码块
* 03.构造方法
*/
StaticBlock sb = new StaticBlock();
******************************************************
/**
* 一个类 在被 JVM加载的时候,首先会加载类中由static修饰的所有属性,方法,代码块!
* 并把这个static修饰的内容放进 静态存储区,便于我们共享访问!
*
* 1.static可以修饰
* 01.属性 静态属性
* 02.方法 静态方法
* 03.代码块 静态代码块
*
* 2.static的特点
* 01.static修饰的内容,在整个程序运行期间,只有一份,而且所有对象共享!
* 比如说,我们在Student类中定义了一个变量如下
* static int age;
* Student类创建出的N个对象,都共享这个age属性!
* 如果有一个对象更改了age属性,其他的N个对象也随着变化!
* 02. 静态方法 中不能访问 非静态的属性和方法
* int age; //普通属性
* public static void sayHello(){
* System.out.println(age); //编译报错
* }
* 03.普通的方法中可以访问静态属性和静态方法
* static int age; //静态属性
* public void sayHello(){
* System.out.println(age);
* }
* 04.静态属性和静态方法 可以直接通过类名访问
* 类名.静态属性
* 类名.静态方法
* 比如说:
* Student类有一个普通方法 sayHello(){}
* 我们想调用这个方法?
* 01.实例化对象 Student stu=new Student();
* 02.调用方法 stu.sayHello();
*
* 现在,sayHello()变成了静态方法
* 我们怎么访问:
* 01. sayHello()在Student类中 无需实例化
* 02. 直接访问 Student.sayHello();
*
*/
public class Student { // 实体类
static String staticName; // 类属性 所有的对象共享一份
String commonName; // 对象属性 每个对象都有一份
public void sayHello() {
System.out.println("普通的方法");
}
public static void sayBye() {
System.out.println("静态的方法");
*********************************************************
package com.xdf.staticdemo;
public class StudentDemo {
public static void main(String[] args) {
// 实例化Student对象
Student stu1 = new Student();
stu1.commonName = "小黑1";
Student stu2 = new Student();
stu2.commonName = "小黑2";
// 类名直接点出属性
Student.staticName = "哈哈哈";
// 问题? stu1的staticName是??
System.out.println(stu1.staticName);
System.out.println("=============================================");
// 调用普通的方法
stu1.sayHello();
// 调用静态方法
Student.sayBye();
}
}
***********************************************************************
package com.xdf.thisdemo;
/**
* 公司中,会有对应的代码生成器
*
* 现在书写实体类的步骤
* 01.私有化属性
* 02.快捷键 生成set和get
* 03.快捷键生成 有参和无参构造
* 04.重写toString()
*
*
* this的注意点:
* 01.this()调用无参构造
* 02.this(...)调用带参构造
* 03.this调用构造方法的时候 只能出现在 构造方法中!
* 04.this调用构造方法的时候 必须位于构造方法中的第一行
* 05.this访问对象的属性或者方法的时候 可以出现在任何方法中
*/
public class Student {
private int age; // 年龄
private String name; // 姓名
// 普通的方法
public void newInstance() {
// this(1000, "小白");不允许调用带参构造
// this(); // 不允许调用无参构造
}
public Student() { // 无参构造 方法之间可不可以相互调用
// 调用带参构造
this(1000, "小白");
System.out.println("1111111");
}
public Student(int age, String name) {
this.age = age; // 调用属性
this.name = name;
this.newInstance(); // 调用方法
}
public int getAge() {
this.newInstance();// 调用方法
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student [age=" + age + ", name=" + name + "]";
***************************************************************
package com.xdf.thisdemo;
public class StudentDemo {
public static void main(String[] args) {
// Student stu = new Student();
// System.out.println(stu); // name和age 都是默认值 null 0
Student stu1 = new Student(100, "小黑");
System.out.println(stu1); // 调用了带参构造 属性就有值
// 需要调用无参构造 也能给属性赋值
Student stu2 = new Student();
System.out.println(stu2);
}
}