JAVA随笔 一 Java面向对象基础和String
2018-04-02 21:53
344 查看
Java代码处理过程
.java-->编译--->.class---->解析---->.运行程序(虚拟机处理)
JRE:Java Runtime Environment
Java编程规范:每一个操作后都添加一个空格
方法的重载:方法名相同,但是参数个数或者参数类型不同,两者都不同也可以
面向对象:
封装性:1,把对象的属性和行为包装成一个整体
2,把不希望外界访问的信息隐藏
继承性:首先设计一个具有描述一般特征事物的类,再此基础上去定义具有特殊属性的事物的类
多态性:1,方法的重载
2,子对象和父对象的互相转换
static在方法上声明的情况:不是由对象调用的方法添加static,反则反之
引用类型与堆栈内存: String 类 数组 等
栈:存储堆内存的地址数据
堆:存储具体对象的属性值
为什么一般的对象可以用"=="直接比较而String对象却一般不行?
一般对象如数组,CLASS对象比较用"==",都是直接在比较栈内存数据是否相同,而一般对象都是直接拷贝,所以多个栈内存指向同一个堆内存。String对象一般是新建堆栈存储,如 String str = new String("world") ;故栈存储不同,即使是相同的值,也不相同。String为了解决这个问题定义了如下方法:
public boolean equals(String str); 该方法用来比较String字符串,注意:该方法有NULL检测
匿名对象:没有栈对象指向堆内存的对象
字符串常量的特殊性:
举例 : "hello".equals("hello"); 可以发现equals是一个方法,只有对象可以调用方法,这里说明"hello"是一个对象,但是并没有定义String对象,故不存在栈存储,所以只有堆内存。说明字符串常量是一个匿名对象
String类两种构造方法的区别(重)
直接赋值方式:String st r= "hello" ; 可知"hello"可以看作一个匿名对象,会有自己的堆内存,这里str对象的栈内存就指向这块内存。由此:该方法值开辟一块堆空间,并且存入内存池。
构造方法:String str = new String("hello") ; "hello"匿名对象有一个堆内存,但是new标识符一定会开辟一块堆内存(该内存不会加入内存池,但可以用intern方法手动加入内存池),而且str对象的栈内存指向new开辟的堆内存,那么这里就有两块堆内存,且"hello"的堆内存会标志为垃圾。
举例1:
String str1 = new String ("hello") ;
String str2 = "hello" ;
判断 str1 == str2 结果为 false
举例2:
String str1 = new String ("hello").intern() ;
String str2 = "hello";
判断 str1 == str2 结果为 true
简单JAVA类(原则上JAVA类都要实现以下几点)
1,类名
2,所有属性都为private并实现对应的gettter和setter方法
3,在类中没有任何输出
4,保留一个无参构造方法
5,提供一个获取类中所有属性的方法返回String
.java-->编译--->.class---->解析---->.运行程序(虚拟机处理)
JRE:Java Runtime Environment
Java编程规范:每一个操作后都添加一个空格
方法的重载:方法名相同,但是参数个数或者参数类型不同,两者都不同也可以
面向对象:
封装性:1,把对象的属性和行为包装成一个整体
2,把不希望外界访问的信息隐藏
继承性:首先设计一个具有描述一般特征事物的类,再此基础上去定义具有特殊属性的事物的类
多态性:1,方法的重载
2,子对象和父对象的互相转换
static在方法上声明的情况:不是由对象调用的方法添加static,反则反之
引用类型与堆栈内存: String 类 数组 等
栈:存储堆内存的地址数据
堆:存储具体对象的属性值
为什么一般的对象可以用"=="直接比较而String对象却一般不行?
一般对象如数组,CLASS对象比较用"==",都是直接在比较栈内存数据是否相同,而一般对象都是直接拷贝,所以多个栈内存指向同一个堆内存。String对象一般是新建堆栈存储,如 String str = new String("world") ;故栈存储不同,即使是相同的值,也不相同。String为了解决这个问题定义了如下方法:
public boolean equals(String str); 该方法用来比较String字符串,注意:该方法有NULL检测
匿名对象:没有栈对象指向堆内存的对象
字符串常量的特殊性:
举例 : "hello".equals("hello"); 可以发现equals是一个方法,只有对象可以调用方法,这里说明"hello"是一个对象,但是并没有定义String对象,故不存在栈存储,所以只有堆内存。说明字符串常量是一个匿名对象
String类两种构造方法的区别(重)
直接赋值方式:String st r= "hello" ; 可知"hello"可以看作一个匿名对象,会有自己的堆内存,这里str对象的栈内存就指向这块内存。由此:该方法值开辟一块堆空间,并且存入内存池。
构造方法:String str = new String("hello") ; "hello"匿名对象有一个堆内存,但是new标识符一定会开辟一块堆内存(该内存不会加入内存池,但可以用intern方法手动加入内存池),而且str对象的栈内存指向new开辟的堆内存,那么这里就有两块堆内存,且"hello"的堆内存会标志为垃圾。
举例1:
String str1 = new String ("hello") ;
String str2 = "hello" ;
判断 str1 == str2 结果为 false
举例2:
String str1 = new String ("hello").intern() ;
String str2 = "hello";
判断 str1 == str2 结果为 true
简单JAVA类(原则上JAVA类都要实现以下几点)
1,类名
2,所有属性都为private并实现对应的gettter和setter方法
3,在类中没有任何输出
4,保留一个无参构造方法
5,提供一个获取类中所有属性的方法返回String
相关文章推荐
- 【重走Android之路】【Java面向对象基础(二)】细说String、StringBuffer和StringBuilder
- Java 基础入门随笔(7) JavaSE版——面向对象定义、特征:封装、构造函数
- Java基础-第六章(面向对象2)
- 黑马程序员_java 面向对象基础(1)
- Java基础<六>----面向对象(二)
- java面向对象基础 -- 重写父类方法的规则
- [零基础学JAVA]Java SE面向对象部分-08.面向对象基础(03)
- 5、Java面向对象基础
- JAVA基础、方法、面向对象笔记5
- 黑马程序员 Java基础_4 面向对象-抽象与封装
- java 面向对象基础及特性
- [2013-11-28]JAVA笔记_面向对象基础、方法重载
- 黑马程序员 java基础之面向对象
- Java 面向对象基础
- Java基础(五)OOP面向对象之(三) 面向对象思想总结
- Java面向对象基础知识点
- 黑马程序员--JAVA基础之面向对象
- [零基础学JAVA]Java SE面向对象部分-16.面向对象高级(04) 推荐
- java面向对象12讲 基础一 什么是面向对象
- 黑马程序员——java基础--面向对象基础