package cn.temptation;

 public class Sample01 {
public static void main(String[] args) {
// 传递 值类型参数 和 传递 引用类型参数
int i = 2;
int j = 3;
System.out.println("方法调用前:i = " + i + ",j = " + j); Calc calc = new Calc();
int result = calc.add(i, j); System.out.println("方法调用后:i = " + i + ",j = " + j); // 这里的i 和 j 是main主函数中的局部变量,它们无法参与到对象的成员方法的运算中的,"井水不犯河水" StudentTest studentTest = new StudentTest();
// 在创建了StudentTest类的对象后,使用 对象名.成员方法()来进行调用,对于test这个成员方法,需要传入类型为Student类类型的实参,到底需要传入什么东西给它?
// 需要的是一个类类型的东西,可以传递一个类名称过去么? 答:不可以的,语法错误
// Student cannot be resolved to a variable
// studentTest.test(Student); // 考虑到类是模板是抽象的东西,这里不需要抽象的类名称,而是需要传入一个具体的对象实例
Student student = new Student();
System.out.println(student);
student.age = 18;
System.out.println("方法调用前,age = " + student.age); // 依据类这个模板创建出来的对象自然应该是这个模板类的类型
studentTest.test(student); // 也就是传递了一个Student类类型的实例对象 System.out.println("方法调用后,age = " + student.age);
}
} // 定义计算类
class Calc {
// 成员变量 // 成员方法
// 方法的形参是值类型
public int add(int i, int j) {
i *= 2;
j *= 3; System.out.println("方法中:i = " + i + ",j = " + j); return i + j;
}
} // 定义学生类
class Student {
// 成员变量
int age; // 成员方法
public void say() {
System.out.println("春眠不觉晓");
}
} // 定义学生类的测试类
class StudentTest {
// 成员方法
public void test(Student student) {
System.out.println(student);
// 67行打印出的内容 和 25行打印出的内容一致,其实就是告诉test方法,使用的形参student就是在内存中的堆上使用方法调用前通过new创建出来的那一块空间
student.age = 99;
}
} /*
* 值类型、引用类型给方法传递的规则:
* 1、形参为值类型时:实参传递过来的是数据值,形参的改变对实参没有影响
* 2、形参为引用类型时:实参传递过来的是引用(地址,堆内存中的空间),形参的改变对实参会有影响
*/
 package cn.temptation;

 public class Sample02 {
public static void main(String[] args) {
// 匿名数组 // Syntax error, insert "AssignmentOperator Expression" to complete Expression
// The left-hand side of an assignment must be a variable
// new int[] { 1, 2, 3 };
// 上述写法有语法错误,因为匿名函数只能使用一次,考虑放在方法中作为实参来使用 // 对象的创建(类的实例化)
// Person person = new Person();
// System.out.println(person); // cn.temptation.Person@15db9742
// person.say(); // 匿名对象
// 下句没有语法错误,但是如何使用通过new关键字在堆中开辟出来的空间呢?
// new Person();
// 下句把new Person()执行的结果作为实参传递给打印方法,打印出的结果说明new Person()这句话的确是创建出了一个匿名对象
// System.out.println(new Person()); // cn.temptation.Person@15db9742 // 匿名对象如何使用成员变量 和 成员方法?
// 我们已经知道的是 对象名.成员变量 和 对象名.成员方法,所以类推 匿名对象.成员变量 和 匿名对象.成员方法
// (new Person()).age = 18;
// 下句打印结果为0,为何?
// 答:上句使用new 关键字创建了一个匿名对象,下句使用了new 关键字又创建了一个匿名对象,自然使用的是其默认值
// System.out.println((new Person()).age); // 0 // 下面两句输出的结果没有区别,虽然是不同的匿名对象
// (new Person()).say();
// (new Person()).say(); // 匿名对象的优缺点:
// 优点:随时定义,随时使用
// 缺点:只能使用一次
}
} //// 定义人类
//// 只写class关键字,不写类名去实现匿名类,语法错误
//// 语法错误:Syntax error on token "class", Identifier expected after this token
////class {
//class Person {
// // 成员变量
// int age;
//
// // 成员方法
// public void say() {
// System.out.println("说话");
// }
//}
 package cn.temptation;

 public class Sample03 {
public static void main(String[] args) {
// 成员变量的数据保护 Person person1 = new Person();
person1.name = "张三";
// 对age这个成员变量使用了private后,提示 The field Person.age is not visible 语法错误
// person1.age = 18;
person1.show(); Person person2 = new Person();
person2.name = "李四";
// 直接拿着成员变量使用(赋值和取值),产生了不正常的错误数据
// 因为缺少对成员变量数据范围的检查
// 对age这个成员变量使用了private后,提示 The field Person.age is not visible 语法错误
// person2.age = 160;
person2.show(); Person person3 = new Person();
person3.name = "王五";
person3.setAge(200);
person3.show(); // 成员变量的数据保护的方案:
// 将成员变量设置为private,通过成员方法去访问它,来实现对成员变量的数据保护
}
} class Person {
// 成员变量
// 对于不合理的数据,首先想的是在成员变量上做文章,考虑到成员变量能被随意的访问,所以会被随意的赋值
// 自然考虑如果不能被访问,自然也就不能被赋值,也就不会有不合理的数据
// 对于成员变量设置为不能访问,Java中提供了一个关键字 private 私有的
String name;
// int age;
private int age; // 给成员变量加上private关键字,它不能被访问了,但是这不是我们想要的最终结果 // 因为成员变量不加private,就可以随意赋值,加了private又无法访问,这里就需要考虑结合其他的途径
// 考虑到还要使用这个特征age,如果给age进行赋值时有相应的检查就好了,显然不是一句语句可以完成,既然是需要多个语句来做这个事情
// 自然有想到要使用多个语句的封装形式-----方法,使用方法对赋值进行检查
// 同时观察到要制作的这个检查方法是和成员变量在同一个类中的方法,即成员变量使用了private修饰符,在这个检查方法中也可以访问到 // 成员方法
public void setAge(int personAge) {
if (personAge < 0 || personAge > 120) {
System.out.println("设置的年龄不正确!!!");
} else {
age = personAge;
}
} public void show() {
System.out.println("姓名为:" + name + ",年龄为:" + age);
}
}
 package cn.temptation;

 public class Sample04 {
public static void main(String[] args) {
// private 关键字的用法 Man man = new Man();
man.name = "王五";
// 语法错误:The field Man.age is not visible
// man.age = 28; man.show1(); // 使用private修饰的成员变量无法访问
// 语法错误:The method show2() from the type Man is not visible
// man.show2(); man.show3(); // 语法错误:The method show4() from the type Man is not visible
// man.show4();
}
} // 定义一个Man类
class Man {
// 成员变量
String name;
// 成员变量age没有使用默认值,给其赋值为18
private int age = 18; // 成员方法
public void show1() {
System.out.println("这是public修饰的show1方法");
} private void show2() {
System.out.println("这是private修饰的show2方法");
} public void show3() {
// private修饰的成员变量age在本类的成员方法中可以被访问到,不论本类的成员方法是public修饰的,还是private修饰的
System.out.println(age);
} private void show4() {
// private修饰的成员变量age在本类的成员方法中可以被访问到,不论本类的成员方法是public修饰的,还是private修饰的
System.out.println(age);
}
}
 package cn.temptation;

 public class Sample05 {
public static void main(String[] args) {
// 通过制作setXXX(...)实现对成员变量进行赋值操作
// 通过制作getXXX(...)实现对成员变量进行取值操作 Animal animal = new Animal();
animal.setName("狗");
animal.setWeight(10); System.out.println("名称为:" + animal.getName() + ",体重为:" + animal.getWeight());
}
} // 定义动物类
class Animal {
// 成员变量
// 名称
private String name;
// 体重
private int weight; // 成员方法
public void setName(String animalName) {
// 通过形参从外部接收到数据,把数据赋值给设置为private的成员变量
name = animalName;
} public String getName() {
return name;
} public void setWeight(int animalWeight) {
// 通过形参从外部接收到数据,把数据赋值给设置为private的成员变量
weight = animalWeight;
} public int getWeight() {
return weight;
}
}
 package cn.temptation;

 public class Sample06 {
public static void main(String[] args) {
// // 需求:定义一个手机类,三个成员变量品牌brand,价格price,颜色color,使用成员变量数据保护
// Phone phone = new Phone();
// phone.setBrand("iphone 7");
// phone.setPrice(5888);
// phone.setColor("白色");
//
// System.out.println("手机品牌为:" + phone.getBrand() + ",价格为:" + phone.getPrice() + ",颜色为:" + phone.getColor());
}
} //// 定义手机类
//class Phone {
// // 成员变量
// // 品牌
// private String brand;
// // 价格
// private int price;
// // 颜色color
// private String color;
//
// // 成员方法
// public void setBrand(String param) {
// brand = param;
// }
//
// public String getBrand() {
// return brand;
// }
//
// public void setPrice(int param) {
// price = param;
// }
//
// public int getPrice() {
// return price;
// }
//
// public void setColor(String param) {
// color = param;
// }
//
// public String getColor() {
// return color;
// }
//}
 package cn.temptation;

 public class Sample07 {
public static void main(String[] args) {
// 思考一下创建对象这一步,通过类的实例化
// 观察一下new这一部分,new关键字后面写的是一个带有小括号的东西,这个小括号让我们联想到了方法(函数)
// 1、从形式来看,创建对象好像是从new一个方法得到的
// 2、这个写在new后面的方法在类中没有看到 // 这个方法称为 Java中的 构造方法(构造函数) // 构造函数定义:用来创建对象时使用的方法
// 类中可以不写构造函数,由JDK自动生成出构造函数
// 通过使用XJad反编译工具对.class字节码文件进行反编译,查看一下JDK的确自动生成了构造函数
Girl girl = new Girl(); // 注意:有几个类,对应就有几个.class文件,在定义类时,eclipse就自动为我们生成了对应的.class文件
}
} //定义妹纸类
class Girl {
// 成员变量
private String name; // 成员方法
public void setName(String girlName) {
name = girlName;
} public String getName() {
return name;
}
}
 package cn.temptation;

 public class Sample08 {
public static void main(String[] args) {
// JDK生成出来的构造函数的特点:
// 1、无修饰符
// 2、无返回值类型,也没有返回值
// 3、无参数
// 4、方法名和类名一致 // 手写一个构造函数
// 1、手写一个构造函数,JDK不再为类自动生成构造函数
// 2、创建对象时,执行了写在构造函数中的语句
// 3、构造函数比所有的成员方法都要先执行,理解:小鸟还在蛋里,就要它飞行,不现实
Bird bird = new Bird();
bird.say();
}
} class Bird {
// 成员变量 // 构造函数
// 不使用修饰符修饰的构造函数
Bird() {
System.out.println("我是Bird的构造函数");
} // 使用public可以修饰构造函数
// public Bird() {
// System.out.println("我是Bird的构造函数");
// } // 使用private也可以修饰构造函数,但是使用private修饰后,进行类的实例化时出现语法错误:The constructor Bird() is not visible
// private Bird() {
// System.out.println("我是Bird的构造函数");
// } // 成员方法
public void say() {
System.out.println("这是成员方法say");
}
}
 package cn.temptation;

 public class Sample09 {
public static void main(String[] args) {
// 思考这样的场景:对于小孩子被生出来,正常情况就有两个手、两个脚 // 下面写法:创建出Baby对象,再使用setXXX方法进行赋值,这样的写法对使用者有要求,创建出对象后不能忘记使用setXXX方法
Baby baby1 = new Baby();
baby1.setHands(2);
baby1.setLegs(2);
System.out.println("手为:" + baby1.getHands() + "只,脚为:" + baby1.getLegs() + "只"); // 考虑在创建对象时就应该初始化赋值,自然考虑在构造函数上做处理
// 可以根据开发人员的需要,制作多种多样的构造函数的重载方法
Baby baby2= new Baby(2, 2);
System.out.println("手为:" + baby2.getHands() + "只,脚为:" + baby2.getLegs() + "只"); // 注意:
// 1、没有有参构造函数,也没有无参构造函数,那么JDK会自动生成无参构造函数
// 2、编写有参构造函数,不写无参构造函数,那么那些使用了无参构造函数创建兑现搞得语句就会有语法错误The constructor Baby() is undefined
// 反编译字节码文件,发现此时JDK是不会自动生成无参构造函数
// 大家使用构造函数时,建议把无参构造函数都手写补上
}
} // 小孩子类
class Baby {
// 成员变量
private int hands;
private int legs; // 构造函数(无参)
public Baby() {
System.out.println("这是Baby的无参构造函数");
} // 构造函数(有参)
public Baby(int babyHands, int babyLegs) {
System.out.println("这是Baby的有参构造函数");
hands = babyHands;
legs = babyLegs;
} // 成员方法
public void setHands(int babyHands) {
hands = babyHands;
} public int getHands() {
return hands;
} public void setLegs(int babyLegs) {
legs = babyLegs;
} public int getLegs() {
return legs;
}
}
 package cn.temptation;

 public class Sample10 {
public static void main(String[] args) {
// 需求:创建手机类,有品牌、价格、颜色,默认出厂标识码(pinCode),使用private成员变量、构造函数、set方法、get方法
Phone phone = new Phone("xiaomi", 1200, "白色", "A123456");
phone.show();
}
} // 定义手机类
class Phone {
// 成员变量
// 品牌
private String brand;
// 价格
private int price;
// 颜色color
private String color;
// 出厂标识码
private String pinCode; // 构造函数(无参)
public Phone() {
System.out.println("这是无参构造函数");
} // 构造函数(有参)
public Phone(String phoneBrand, int phonePrice, String phoneColor, String phonePinCode) {
brand = phoneBrand;
price = phonePrice;
color = phoneColor;
pinCode = phonePinCode;
} // 成员方法
public void setBrand(String param) {
brand = param;
} public String getBrand() {
return brand;
} public void setPrice(int param) {
price = param;
} public int getPrice() {
return price;
} public void setColor(String param) {
color = param;
} public String getColor() {
return color;
} public void setPinCode(String param) {
pinCode = param;
} public String getPinCode() {
return pinCode;
} // 自定义的成员方法
public void show() {
System.out.println("品牌为:" + brand + ",价格为:" + price + ",颜色为:" + color + ",出厂标识码为:" + pinCode);
}
}

【原】Java学习笔记015 - 面向对象的更多相关文章

  1. Java学习笔记之---面向对象

    Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...

  2. Java学习笔记之面向对象、static关键字

    一周Java学习总结 今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字. 面向对象 现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的 ...

  3. Java 学习笔记(4)——面向对象

    现在一般的语言都支持面向对象,而java更是将其做到很过分的地步,java是强制使用面向对象的写法,简单的写一个Hello Word都必须使用面向对象,这也是当初我很反感它的一点,当然现在也是很不喜欢 ...

  4. 【原】Java学习笔记019 - 面向对象

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 仔细想一想,Ani ...

  5. 【原】Java学习笔记016 - 面向对象

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // this 关键字 ...

  6. 【原】Java学习笔记014 - 面向对象

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 面向对象思想 // ...

  7. 【原】Java学习笔记020 - 面向对象

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 成员方法的参数列表 ...

  8. 【原】Java学习笔记018 - 面向对象

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 继承关系的子类可以 ...

  9. 【原】Java学习笔记017 - 面向对象

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 继承关系中的pri ...

随机推荐

  1. Java编程——学习大纲

    Java基础 Java基础--JDK的安装和配置 Java基础--Eclipse使用 Java基础--基本概念.数据类型.运算符 Java扩展--整型和浮点型在计算机中的存储格式 Java基础--流程 ...

  2. mongo 删除 表中字段

    查询语句 db.getCollection("A表").update( { } ,{   $unset:{"a":1}  } , {multi: true} ) ...

  3. 树莓派pwm驱动好盈电调及伺服电机

    本文讲述如何通过树莓派的硬件PWM控制好盈电调来驱动RC车子的前进后退,以及如何驱动伺服电机来控制车子转向. 1. 好盈电调简介 车子上的电调型号为:WP-10BLS-A-RTR,在好盈官网并没有搜到 ...

  4. 死磕 java集合之LinkedHashMap源码分析

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 简介 LinkedHashMap内部维护了一个双向链表,能保证元素按插入的顺序访问,也能以访问 ...

  5. 『Tarjan算法 有向图的强连通分量』

    有向图的强连通分量 定义:在有向图\(G\)中,如果两个顶点\(v_i,v_j\)间\((v_i>v_j)\)有一条从\(v_i\)到\(v_j\)的有向路径,同时还有一条从\(v_j\)到\( ...

  6. redis 系列20 服务器下

    二. serverCron函数 2.3 更新服务器每秒执行命令次数 serverCron函数中的trackOperationsPerSecond函数会以每100毫秒一次的频率执行,这个函数以抽样计算的 ...

  7. Zookeeper~Linux环境下的部署

    介绍 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提 ...

  8. Ubuntu安装谷歌浏览器

    首选方法: sudo wget http://www.linuxidc.com/files/repo/google-chrome.list -P /etc/apt/sources.list.d/ wg ...

  9. import 和 export

    1.export 命令 export 命令用于规定模块的对外接口. 一个模块就是一个独立的文件.该文件内部所有的变量,外部无法获取.要想外部能够读取模块内部的某个变量,就必须使用 export 关键字 ...

  10. 触发器 评论折叠显示(jquery)

    触发器   评论折叠显示(jquery)   子页面 : @if(Model?.count>0) {      var i=1;      var n=model.count-2      va ...