Java学习笔记整理04
2017-08-04 09:08
323 查看
代码格式
123456789101112131415161718192021222324252627282930 | class Demo1Object { /* Java约定俗成 1,类名接口名 一个单词首字母大写,多个单词每个单词首字母都大写 2,方法名和变量名 一个单词全部小写,多个单词从第二个单词首字母大写 建议:如果能用英语尽量用英语,实在不行用汉语拼音 代码书写格式 1,大括号成对写,左大括号在该行代码的最后,右大括号在该行代码的下边,并与该行代码对齐 2,左大括号前面有空格 3,并排语句中间都需要加空格 4,语句块或者方法中间加空行 */ public static void main(String[] args) { for (; ; ) { } while () { } if () { }else { System.out.println();} } } public static void print() { }} |
面向对象思想概述(了解)
A:面向过程思想概述第一步
第二步
B:面向对象思想概述
找对象(第一步,第二步)
C:举例
买煎饼果子
洗衣服
C:面向对象思想特点
a:是一种更符合我们思想习惯的思想
b:可以将复杂的事情简单化
c:将我们从执行者变成了指挥者
角色发生了转换
面向对象的思想更为简洁方便,不用所有行为都需要自己去做(都交给对象对做),同时我也认为这也是高度解耦的一种形式。
面向对象开发,设计以及特征(了解)
A:面向对象开发就是不断的创建对象,使用对象,指挥对象做事情。
B:面向对象设计
其实就是在管理和维护对象之间的关系。
C:面向对象特征
封装(encapsulation)
继承(inheritance)
多态(polymorphism)
类与对象概述
A:我们学习编程是为了什么为了把我们日常生活中实物用学习语言描述出来
B:我们如何描述现实世界事物
属性 就是该事物的描述信息(事物身上的名词)
行为 就是该事物能够做什么(事物身上的动词)
C:Java中最基本的单位是类,Java中用class描述事物也是如此
成员变量 就是事物的属性
成员方法 就是事物的行为
D:定义类其实就是定义类的成员(成员变量和成员方法)
a:成员变量 和以前定义变量是一样的,只不过位置发生了改变。在类中,方法外。
b:成员方法 和以前定义方法是一样的,只不过把static去掉,后面在详细讲解static的作用。
E:类和对象的概念
a:类:是一组相关的属性和行为的集合
b:对象:是该类事物的具体体现
c:举例:
类 学生
对象 具体的某个学生就是一个对象
学生类的定义
A:学生事物B:学生类
C:案例演示
属性:姓名,年龄,性别
行为:学习,睡觉
手机类的定义
模仿学生类,让学生自己完成属性:品牌(brand)价格(price)
行为:打电话(call),发信息(sendMessage)玩游戏(playGame)
学生类的使用
A:文件名问题在一个java文件中写两个类:一个基本的类,一个测试类。
建议:文件名称和测试类名称一致。
B:如何使用对象?
创建对象并使用
格式:类名 对象名 = new 类名();
D:如何使用成员变量呢?
对象名.变量名
E:如何使用成员方法呢?
对象名.方法名(…)
123456789101112131415161718192021222324252627282930313233343536373839404142 | class Demo3Student { //测试类,包含主函数,测试类的类名要与文件名一致 public static void main(String[] args) { /* * 创建对象并使用 * 格式:类名 对象名 = new 类名(); */ Student s = new Student(); //创建对象 //String name = s.name; //获取对象的属性(成员变量) //int age = s.age; //char gender = s.gender; s.name = "张三"; s.age = 23; s.gender = '男'; s.study(); //获取对象的行为(成员方法) s.sleep(); s.name = "李四"; s.study(); }}class Student { /* * 属性:姓名,年龄,性别(成员变量) * 行为:学习,睡觉(成员方法) */ String name ; int age ; char gender ; public void study() { System.out.println(name + "在学习"); } public void sleep() { System.out.println(name + "在睡觉"); }} |
手机类的使用
A:学生自己完成模仿学生类,让学生自己完成
1234567891011121314151617181920212223242526272829303132333435 | class Demo4Phone { public static void main(String[] args) { Phone p = new Phone(); //创建对象在最后有小括号 p.brand = "三星"; //调用属性的时候后面没有括号 p.price = 14999; p.color = "天空灰"; p.call(); //调用方法的时候后面有括号 System.out.println("我是一部" + p.brand + "手机,价格是:" + p.price + ",颜色是:" + p.color); }}/* 属性:品牌(brand)价格(price)* 行为:打电话(call),发信息(sendMessage)玩游戏(playGame)*/class Phone { String brand; int price; String color; public void call() { System.out.println("打电话"); } public void sendMessage() { System.out.println("发信息"); } public void playGame() { System.out.println("玩游戏"); }} |
一个对象的内存图
A:画图演示一个对象
所有代码进入方法区,换成xxx.class字节码文件,等待调用,同时main方法入栈,开始调用方法区的class字节码文件并写入内存,如果是new出一个对象(所有new出来的对象,都存储在栈上,并有一个地址,通过地址访问),就在栈里面开辟空间并初始化赋值。
输出结束以后,方法进行弹栈,对象会被不定时的回收。
二个对象的内存图
A:画图演示二个不同的对象
运行程序以后,java文件从硬盘上加载到方法区,转换成计算机可执行的字节码(类似一个代码仓库,等待调用),同时main方法入栈,new出来对象存储在栈上,并存储成员变量,并把地址传给person,进行访问。当方法执行完毕以后,进行弹栈。
每new一次就会产生一个新的对象,内存充足的时候,并不会被回收覆盖。
三个对象的内存图
A:画图演示三个引用,有两个对象的引用指向同一个地址
成员变量和局部变量的区别
A:在类中的位置不同成员变量:在类中方法外
局部变量:在方法定义中或者方法声明上
B:在内存中的位置不同
成员变量:在堆内存(成员变量属于对象,对象进堆内存)
局部变量:在栈内存(局部变量属于方法,方法进栈内存)
C:生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
D:初始化值不同
成员变量:有默认初始化值
局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。
注意事项:
局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则,自己有就不用其他的了。
12345678910111213141516171819202122 | class Demo1Person { public static void main(String[] args) { Person p = new Person(); //创建对象 p.name = "张三"; //给对象属性赋值 p.age = 23; p.speak(20); }}class Person { String name; //定义在类中,方法外,成员变量 int age; public void speak(int y) { //定义在方法上,局部变量 int x = 10; //定义在方法内,局部变量 int age = 30; //java中有就近原则 System.out.println(name+ "," + age); System.out.println(x + "," + y); }} |
方法的形式参数或返回值是类名的时候如何调用
A:方法的参数是类名public void print(Student s){}//print(new Student());如果你看到了一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。
B:方法的返回值是类名public Student print(){return s}
如果你看到了一个方法的返回值是类名,这里其实返回的是该类对象
123456789101112131415161718192021222324252627282930313233343536373839 | class Demo2Student { public static void main(String[] args) { Test1 t = new Test1(); //Student stu = new Student(); //s = 0x0011 //t.run(stu); Student stu = t.aaa(); //s = 0x0022 int x = t.xxx(); }}class Student { String name; int age; public void speak() { System.out.println(name + "," + age); }}class Test1 { public void run(Student s) { //参数是引用数据类型,调用这个方法时传递的是该类的对象 System.out.println("run"); } public Student aaa() { //返回值类型是引用数据类型,返回的就是该类对象 Student s = new Student(); //s = 0x0022 return s; } public int xxx() { int x = 10; return x; } public String bbb() { return "aaa"; }} |
方法的形式参数是类名的调用过程
返回值是类名的调用过程
本质上是通过分配的地址找到对象,以及访问到其中的数据。
匿名对象的概述和应用
A:什么是匿名对象B:匿名对象应用场景
a:调用方法,仅仅只调用一次的时候。
那么,这种匿名调用有什么好处吗?
节省代码
注意:调用多次的时候,不适合。匿名对象调用完毕就是垃圾。可以被垃圾回收器回收。
b:匿名对象可以作为实际参数传递
C:案例演示
匿名对象应用场景
12345678910111213141516171819202122232425262728293031323334 | class Demo1Car { public static void main(String[] args) { Car c1 = new Car(); //c1是对象的名字 //new Car(); //匿名对象 c1.color = "red"; c1.num = 8; c1.run(); new Car().color = "blue"; //匿名对象是否可以调用属性?可以但是没有意义 new Car().num = 4; new Car().run(); //匿名对象是否可以调用方法?可以 Car c2 = new Car(); c2.print(); c2.print(); new Car().print(); //匿名对象调用方法的好处,只是节省了代码 new Car().print(); //如果对同一个方法多次调用,必须用有名字的对象 new Car().print(); //因为匿名对象会创建多个对象,浪费空间 }}class Car { String color; int num; public void run() { System.out.println(color + "," + num); } public void print() { System.out.println("11111111111111111111111111"); }} |
12345678910111213141516171819202122232425262728293031 | class Demo2Car { public static void main(String[] args) { //Car c1 = new Car(); /*c1.color = "black"; c1.num = 4; c1.run();*/ //method(c1); method(new Car()); //匿名对象可以当作参数传递 Car c2 = new Car(); /*c2.color = "black"; c2.num = 4; c2.run();*/ method(c2); } public static void method(Car cc) { //Car cc = new Car(); cc.color = "black"; cc.num = 4; cc.run(); }}class Car { String color; int num; public void run() { System.out.println(color + "," + num); }} |
封装的概述
A:封装概述是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
B:封装好处
隐藏实现细节,提供公共的访问方式
提高了代码的复用性
提高安全性。
C:封装原则
将不需要对外提供的内容都隐藏起来。
把属性隐藏,提供公共方法对其访问。
1234567891011121314151617181920212223242526272829303132333435363738394041 | /*封装的作用。 */class Demo1Person { public static void main(String[] args) { Person p = new Person(); p.name = "dayone"; //p.age = -17; p.setAge(-17); System.out.println(p.getAge()); }}class Person { String name; private int age; //private私有,只能在本类访问 public void speak() { System.out.println(name + "," + age); } /* 对外提供公共的访问方法,分别是setXxx()和getXxx() 可以写if else,对程序进行控制,保证数据的安全性。 */ public void setAge(int a) { if (a > 0 && a < 200) { age = a; }else { System.out.println("回火星吧"); } } public int getAge() { return age; }} |
private关键字的概述和特点
A:人类赋值年龄的问题B:private关键字特点
a:是一个权限修饰符
b:可以修饰成员变量和成员方法
c:被其修饰的成员只能在本类中被访问
C:案例演示
封装和private的应用:
A:把成员变量用private修饰
B:提高对应的getXxx()和setXxx()方法
private仅仅是封装的一种体现形式,不能说封装就是私有
this关键字的概述和应用
A:this关键字特点B:案例演示
this的应用场景
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | class Demo1This { public static void main(String[] args) { Person p = new Person(); p.setName("王学兵"); p.setAge(44); //System.out.println(p.getName() + "年龄是:" + p.getAge() + "又进去了"); p.print(); System.out.println(p); System.out.println("========================="); Person p2 = new Person(); p2.print(); System.out.println(p2); }}class Person { private String name; private int age; //变量名要求见名只意 public void setName(String name) { //name = "王学兵" this.name = name; //this代表当前对象的引用 } //局部变量绝对不能用对象.调用 public String getName() { return name; } public void setAge(int a) { age = a; } public int getAge() { return age; } public void print() { System.out.println("print方法中的:" + this); method(); } public void method() { System.out.println("method"); } /* this可以用来区分成员变量和局部变量重名,用this.调用的是成员变量 this可以调用成员方法 */} |
标准的手机类代码及其测试
A:学生练习请把手机类写成一个标准类,然后创建对象测试功能。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | class Demo2This { public static void main(String[] args) { Phone p = new Phone(); p.setBrand("锤子"); p.setPrice(2480); p.setColor("白色"); System.out.println("罗永浩生产了" + p.getBrand() + "手机,价格是:" + p.getPrice() + ",颜色是:" + p.getColor()); p.call(); p.sendMessage(); p.playGame(); }}/*请把手机类写成一个标准类,然后创建对象测试功能。*/class Phone { private String brand; //品牌 private int price; //价格 private String color; //颜色 public void setBrand(String brand) { //setXxx方法,修改值 this.brand = brand; } public void setPrice(int price) { this.price = price; } public void setColor(String color) { this.color = color; } public String getBrand() { //getXxx方法,获取值 return brand; } public int getPrice() { return price; } public String getColor() { return color; } public void call() { System.out.println("打电话"); } public void sendMessage() { System.out.println("发信息"); } public void playGame() { System.out.println("玩游戏"); }} |
相关文章推荐
- 学习笔记10—JAVA高级视频04_Applet
- 整理JAVA学习笔记 JAVA基础需要掌握重点
- Java 学习笔记04:Spring XML配置文件Bean
- 【Java学习笔记】Day 3 String及StringBuilder及StringBuffer 【待整理】
- [Java] 学习笔记整理 [java 前 7]
- Java反射学习笔记(待整理)
- Learn Objective‐C,学习笔记04 协议(Java中的接口,c中的纯虚函数)
- [Java] 二次学习-笔记整理
- java学习笔记04--数组
- java基础学习笔记04
- java学习笔记,自己有时间就整理的,有错的地方请指出来
- Java容器学习笔记(由java编程思想和网上资料整理而成)
- java学习笔记04--数组
- [Java] 二次学习-笔记整理
- 【Java学习笔记】Day 1 String类的学习及堆栈的若干问题 (待整理)
- java学习笔记04--数组
- JAVA高级视频_IO输入与输出04 学习笔记
- Java 二次学习-笔记整理
- spring学习笔记整理--04(配置Spring管理的bean的作用域、生命周期)
- 黑马程序员——java高新技术2学习笔记整理