21天学通Java学习笔记-Day03
来源:互联网 发布:json转换为字符串 编辑:程序博客网 时间:2024/05/29 14:31
Day03:
new 的功能:
当使用 new 时会 1,创建给定类的实例对象;2,为它分配内存;3,调用给定类定义的一个构造函数。
构造函数: 是用于创建和初始化类实例的方法。构造函数初始化新对象及其变量。每个类在没有手动添加构造函数时,java都会默认有一个空的构造函数。
内存管理:
当创建新的对象时,java会自动分配适当数量的内存,当对象使用完后,会指向一个null值,表示不再使用,(该对象中没有任何正在使用的或者被存储数组中的变量),java定期查询未被使用的对象,并收回这些对象占有的内存。(无用单位收集)
实例变量和类变量由两部分组成,句点左边是对象和类的引用,句点右边为变量。
类变量:是在类中定义和存储。适用于类及其所有实例对象。
类变量的修改会直接影响所有实例中的这个变量。
定义类变量的方法:在前面加上关键字 static 。
类变量用 :类.(句点)类变量
实例变量用 :实例对象.(句点)实例变量
这样便于调试。
格式输出方法:
System.out.format();
相当于 C语言中 printf();
%,d 格式化整数
%,f 格式化浮点数 %,11f 控制位数
%n 换行
有返回值的方法也可以赋给变量
a.b().c();
a对象有个b方法,b方法的返回值是一个对象,该对象中有一个c方法,可以通过这个嵌套方法调用c方法。
lei.bl.fangf();
fangf() 方法是在实例变量 bl 储存的对象中定义,这个实例变量本身在对象 lei 中。
class test01{public static void main(String[]args){ a lei = new a(); lei.bl.fangf(); }}class a{ b bl = new b();}class b{ void fangf(){ System.out.println("hhhhhh"); }}
关于 System.out.println(); 的详解:
println() 方法是在实例变量 out 储存的对象中定义,这个实例变量本身在对象 System 中。
out 是一个 PrintStream 类型实例变量 。
System 中有一个 public static final PrintStream out 实例变量
out 是一个 PrintStream 类型实例变量。
PrintStream 类中有一个 println() 方法。
类方法:
类方法作用于整个类,而且不需要实例化,可以直接使用。
堆栈内存数据问题:
java 的基础类型存放在 stack(栈)上,new 出对象后,只把 对象 的 reference(引用)存放在 stack(栈)中用来指向某个对象,对象本身放在 heap(堆)中。
还有,调用方法时传递的参数以及在调用中创建的临时变量都保存在 stack(栈)中,速度较快。
其它变量,如(static)静态变量(类变量),实例变量等都在堆中创建,速度较慢。
java 中引用可以看做是一种不需要操作且受限制的指针,引用无大小,不可计算,安全,强转要小心。
对象的引用:引用是一个地址,它指明了对象的变量和方法储存的位置。
强制类型转换:
1.基础类型之间的转换
2.类型实例对象之间的转换
3.基础类型转和对象之间的转换
大转小必须强制类型转换,小转大不需要强制类型转换。
位数多的基础类型转成位数小的基础类型需要强制转换
父类转子类需要强制转换
class a{ }class b extends a{ }class test{ public static void main(String[]args){ a a1 = new a(); b b1 = new b(); a1 = b1; //子类转父类 a a2 = new a(); b b2 = new b(); b2 = (b)a2; // 父类转子类 需要强制类型转换a a3 = new b(); // 子类 new 一个父类对象 b b3 = (b)new a(); // 父类 new 一个子类对象 需要强制类型转换 } }
基础类型和对象之间的转换
class test{ public static void main(String[]args){ Integer a = new Integer(7801); // Integer 对象转成 int 基础类型 int i = a.intValue(); System.out.println(i); String str = "6500"; //String 对象转成 int 基础类型 int w = Integer.parseInt(str); System.out.println(w); }}
多态:
必须满足三个要求:1.必须有继承;2.必须有重写;3.必须有父类引用指向子类对象
多态例子代码:
public class testdt { public static void main(String[]args){ BaiDog bd = new BaiDog(); //new 一个子类对象 HeiDog hd = new HeiDog(); //new 一个子类对象 ZhuRen zr = new ZhuRen("bai",bd); //将子类对象传入父类引用中(父类引用指向子类对象) ZhuRen zz = new ZhuRen("hei",hd); //将子类对象传入父类引用中(父类引用指向子类对象) zr.wan(); //调用的是被重写后的方法 zz.wan(); //调用的是被重写后的方法 }}class Dog { //父类 Dog public void jiao(){ //父类 jiao( )方法 System.out.println("wang,wang。。。。"); }}class BaiDog extends Dog { //继承 Dog 父类的 BaiDog 子类 public void jiao(){ //重写父类的 jiao( )方法 System.out.println("baidog-jiao111,baidog-jiao111......"); }}class HeiDog extends Dog { //继承 Dog 父类的 HeiDog 子类 public void jiao(){ //重写父类的 jiao( )方法 System.out.println("heidog-jiao222,heidog-jiao222......"); }} class ZhuRen { String name; Dog d; ZhuRen(String name,Dog d){ //需要传入一个父类 Dog对象 this.name=name; this.d=d; } public void wan(){ d.jiao(); //调用传入对象的jiao( )方法,必须是父类中有的方法,子类重写后会显示重写后的内容,子类没有重写显示的是父类这个方法中的内容 }}
执行结果:baidog-jiao111,baidog-jiao111......
heidog-jiao222,heidog-jiao222...... //显示的是子类重写后的方法内容
基础类型对应的对象:
boolean Boolean
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
对象封装器
自动封装和拆封:一种自动转换过程,处理表示同一类值的基本类型和对象时更容易。
自动封装:就是自动的将基本类型转换为对象;自动拆封则是相反。
如果编写语句时,本来应该出现基本类型变量的地方使用了对象(或者相反),相应的值会自动被转换,以便能够成功执行。
两个对象之间的比较:
== 比较的是两个对象的地址,检查是否是同一个对象
equals()是 Object 类的方法 两个对象引用相同则返回true(与==用法一样),如果子类重写equals( )方法用法请参考重写后的equals( )方法
把相同内容赋给多个 String,返回的还是同一个对象。
判断对象所在的类:
对象.getClass().getName();
获得对象所在类的类名。
getClass() 和 getName() 都是Object 类中定义的方法
判断对象是否是这个类的对象:
用 instanceof 判断,左边是对象引用,右边是类名
boolean pd = (b)对象 instanceof (a)类型;(b对象是否是一个a类型对象,返回boolean类型)
- 21天学通Java学习笔记-Day03
- java 学习笔记 day03
- Java学习笔记 Day03
- Java学习笔记Day03
- JAVA语言基础 +JAVA学习笔记-DAY03
- 黑马程序员 java学习笔记(day03)
- JQuery学习笔记--Day03
- C++学习笔记 day03
- mysql 学习笔记 day03
- 基础学习day03笔记
- Oracle学习笔记--day03
- struts2 day03学习笔记
- [Java视频笔记]day03
- Java笔记Day03
- Java基础Day03笔记
- 【java笔记】day03
- java学习day03
- Java学习 day03
- Groovy入门教程
- HTTP消息格式
- 不使用if,?:及switch等实现求出两个数的较大值
- 程序员必须知道的10大基础实用算法及其讲解
- hbase windowns 下, Will not attempt to authenticate using SASL (无法定位登录配置)
- 21天学通Java学习笔记-Day03
- 图的遍历
- 使用GridView控件绑定数据
- 网盘背后的秘密
- Python中的生成器在八皇后问题上的应用
- Java 8新特性: lambda
- win7 远程桌面连接
- 解析数据库生成XML文件及解析XML文件插入数据库
- An error has occurred.See the log file错误解决