java笔记
来源:互联网 发布:车床g41 g42编程实例 编辑:程序博客网 时间:2024/05/29 18:21
一切都是对象(2017.7.26)
学习笔记
a.JAVA对象在内存中存储的位置:寄存器,堆栈,堆,常量存储,非ram区。
1,寄存器
这是最快的存储区,在处理器内部,无法手动操纵这一块内存,大小数量比较有限
2,堆栈
仅此于寄存器存储速度的存储区,位于RAM(随机存储区)中,通过堆栈指针直接操纵分配内存,指针下移,分配新的内存,指针上移,释放内存。创建程序时,java系统必须知道存储在堆栈内所有项的生命周期,以便上下移动指针,灵活性较差。JAVA对象的引用存储在堆栈中,但是JAVA对象不存在于堆栈空间中。
3,栈
一种通用的内存池,也存在与RAM中,但是编译器不需要知道存储在栈空间的对象的生命周期,所以灵活性较强,,当需要一个对象时,只需要new一个对象,这个对象就会存在与栈空间中。
4,常量存储
常亮通常存储在程序代码内部,这样的量是很安全的,并不会被改变,一般称为字符串常量池,放在ROM中
5,非RAM存储区
不依赖于程序存在的数据存在于两个地方,一种是流对象,一种是持久化对象。流对象存在于计算机和计算机传输中的字节流中。持久化对象存在于ROM中(计算机硬盘,磁盘),JAVA提供了JDBC和HIBERNATE两种轻量级操作数据库的方式,讲持久化对象恢复,成为反序列化。
b.基本数据类型的大小
基本数据类型有八种,各有各的取值范围
定义一个基本数据类型
int a = 10;
则在内存堆栈区域开辟了4个字节的大小给a这个非引用的自动变量,直接存储值,并不是地址。
如果使用包装类型new一个对象,那就是非基本对象,存在于堆空间中,而不是堆栈空间
对于这8种基本数据类型的变量,变量直接存储的是“值”,因此在用关系操作符==来进行比较时,比较的就是 “值” 本身。要注意浮点型和整型都是有符号类型的,而char是无符号类型的(char类型取值范围为0~2^16-1).
高精度计算的类,BigInteger和BigDecimal,两种类都是包装器类,但是没有对应的基本类型。都是存在于堆空间。
总结来说:
1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
如果作用于引用类型的变量,则比较的是所指向的对象的地址
2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。
一切都是对象(2017.7.27)
a.成员变量个成员方法
定义在类内部的属于类的成员变量,java会自动为其赋值初始值。但是如果不是成员变量的定义一个基本数据类型的参数,那么java不会为其赋值,如果程序员在定义一个基本数据类型变量时并没有对其赋值,那么java在运行时会报错,而不是像C++一样只是警告
a(1).方法名和参数列表(方法签名)才是定义一个方法的唯一标识,方法重载可以是参数不能,参数个数不同,参数类型不同,参数类型和参数个数都不同,也可以是方法名不同,给对象发送消息,就是让一个对象去调用某个方法
a(2).String类支持“+”和“+=”,来获得一个新的值.
class Tank {
int a;
}
public class TIJTest1 {
public static void main(String[] args) {
Tank t1 = new Tank();
Tank t2 = new Tank();
t1.a = 10;
t2.a = 15;
System.out.println("ti.a : "+t1.a+" ,t2.a : "+t2.a);
//此时是对象的引用的赋值,把t2指向的地址赋值给t1,所以t2的地址就覆盖了t1的地址,所以t1,t2就指向了同一个地址
// t1=t2;
//
// System.out.println("ti.a : "+t1.a+" ,t2.a : "+t2.a);
//
//此时改变了t1的值,因为t1,t2指向的是同一个地址,也就是同一个引用,所以改变t1地址中的值,t2也指向那个地址,所有,t2所对应的值也改变了
// t1.a = 18;
//
// System.out.println("ti.a : "+t1.a+" ,t2.a : "+t2.a);
//
//因为只是把t2.a的值传递给t1.a,所以只是值的传递,不会影响t1,t2的地址,或者说是引用
t1.a = t2.a;
System.out.println("ti.a : "+t1.a+" ,t2.a : "+t2.a);
t1.a = 18;
System.out.println("ti.a : "+t1.a+" ,t2.a : "+t2.a);
}
}
int a;
}
public class TIJTest1 {
public static void main(String[] args) {
Tank t1 = new Tank();
Tank t2 = new Tank();
t1.a = 10;
t2.a = 15;
System.out.println("ti.a : "+t1.a+" ,t2.a : "+t2.a);
//此时是对象的引用的赋值,把t2指向的地址赋值给t1,所以t2的地址就覆盖了t1的地址,所以t1,t2就指向了同一个地址
// t1=t2;
//
// System.out.println("ti.a : "+t1.a+" ,t2.a : "+t2.a);
//
//此时改变了t1的值,因为t1,t2指向的是同一个地址,也就是同一个引用,所以改变t1地址中的值,t2也指向那个地址,所有,t2所对应的值也改变了
// t1.a = 18;
//
// System.out.println("ti.a : "+t1.a+" ,t2.a : "+t2.a);
//
//因为只是把t2.a的值传递给t1.a,所以只是值的传递,不会影响t1,t2的地址,或者说是引用
t1.a = t2.a;
System.out.println("ti.a : "+t1.a+" ,t2.a : "+t2.a);
t1.a = 18;
System.out.println("ti.a : "+t1.a+" ,t2.a : "+t2.a);
}
}
一切都是对象(2017.7.28)
a.==和equals的区别
==是所有对象和基本操作数据类型都有的运算比较符,比较的是两个引用之间的关系,更确切的说是比较两个对象的地址是否相同。而equals是比较两个对象的值是否相等,对于基本数据类型,equal是不存在的,基本数据类型,只能使用==和!=来计较两个基本数据类型的值是否相等。
equals方法默认是比较两个地址是否相同,但是很多类都重写了equals方法,所以一般是比较两个类的的值是否相等,大多数JAVA类库都实现了equals方法,以便来比较对象的内容,而不是比较对象的引用。
b.
c.操作符
1.算数操作符
+-*/%
2.关系操作符,返回boolean
> < >= <= == !=
3.逻辑操作符
&& || ! 逻辑运算符只能连接关系操作符的boolean 也就是 boolean 逻辑运算符 boolean (bool && bool) 这样才能输出一个bool类型的常亮
4.
5.cast类型转换
6.
向上转型
7777
8.for循环内的逗号操作符,第一个分号里面能定义多个同类型的变量,并且以逗号分开
一切都是对象(2017.8.3)
a.方法重载
方法重载只能靠两个地方来辨别是否是重载函数,第一,参数类型,第二,参数的多少。最好不要使用网上所说的改变方法返回值来充当方法重载,因为当你明确一个方法返回值的时候,比如int c = f(); 这样可以调用成功,但是,如果一个方法存在没有返回值和有返回值两个重载的类型的话,你可能会直接调用 f(); 这样JAVA虚拟机并不知道你是否想返回一个类型,所以java中不能使用返回值类型不同的方法来定义两个方法重载函数。
b.类型参数提升
package test.collection.set;
class testOverLoading {
void f1(char x) { System.out.print("f1(char)"); }
void f1(byte x) { System.out.print("f1(byte)"); }
void f1(short x) { System.out.print("f1(short)"); }
void f1(int x) { System.out.print("f1(int)"); }
void f1(long x) { System.out.print("f1(long)"); }
void f1(float x) { System.out.print("f1(float)"); }
void f1(double x) { System.out.print("f1(double)"); }
void f2(byte x) { System.out.print("f2(char)"); }
void f2(short x) { System.out.print("f2(short)"); }
void f2(int x) { System.out.print("f2(int)"); }
void f2(long x) { System.out.print("f2(long)"); }
void f2(float x) { System.out.print("f2(float)"); }
void f2(double x) { System.out.print("f2(double)"); }
void f3(short x) { System.out.print("f3(short)"); }
void f3(int x) { System.out.print("f3(int)"); }
void f3(long x) { System.out.print("f3(long)"); }
void f3(float x) { System.out.print("f3(float)"); }
void f3(double x) { System.out.print("f3(double)"); }
void f4(int x) { System.out.print("f4(int)"); }
void f4(long x) { System.out.print("f4(long)"); }
void f4(float x) { System.out.print("f4(float)"); }
void f4(double x) { System.out.print("f4(double)"); }
void f5(long x) { System.out.print("f5(long)"); }
void f5(float x) { System.out.print("f5(float)"); }
void f5(double x) { System.out.print("f5(double)"); }
void f6(float x) { System.out.print("f6(float)"); }
void f6(double x) { System.out.print("f6(double)"); }
void f7(double x) { System.out.print("f7(double)"); }
void testConstVal() {
System.out.print("5 : ");
f1(5);f2(5);f3(5);f4(5);f5(5);f6(5);f7(5);System.out.println();
}
void testChar() {
char x = 'x';
System.out.print("char : ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);System.out.println();
}
void testByte() {
byte x = 0;
System.out.print("byte : ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);System.out.println();
}
void testShort() {
short x = 0;
System.out.print("short : ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);System.out.println();
}
void testInt() {
int x = 0;
System.out.print("int : ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);System.out.println();
}
void testFloat() {
float x = 0f;
System.out.print("float : ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);System.out.println();
}
void testLong() {
long x = 0L;
System.out.print("long : ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);System.out.println();
}
void testDouble() {
double x = 0;
System.out.print("double : ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);System.out.println();
}
}
public class TIJTest13 {
public static void main(String[] args) {
testOverLoading t = new testOverLoading();
//t.testConstVal();
//t.testChar();
//t.testByte();
//t.testShort();
//t.testInt();
//t.testFloat();
//t.testLong();
t.testDouble();
}
}
c.构造函数
class testOverLoading {
void f1(char x) { System.out.print("f1(char)"); }
void f1(byte x) { System.out.print("f1(byte)"); }
void f1(short x) { System.out.print("f1(short)"); }
void f1(int x) { System.out.print("f1(int)"); }
void f1(long x) { System.out.print("f1(long)"); }
void f1(float x) { System.out.print("f1(float)"); }
void f1(double x) { System.out.print("f1(double)"); }
void f2(byte x) { System.out.print("f2(char)"); }
void f2(short x) { System.out.print("f2(short)"); }
void f2(int x) { System.out.print("f2(int)"); }
void f2(long x) { System.out.print("f2(long)"); }
void f2(float x) { System.out.print("f2(float)"); }
void f2(double x) { System.out.print("f2(double)"); }
void f3(short x) { System.out.print("f3(short)"); }
void f3(int x) { System.out.print("f3(int)"); }
void f3(long x) { System.out.print("f3(long)"); }
void f3(float x) { System.out.print("f3(float)"); }
void f3(double x) { System.out.print("f3(double)"); }
void f4(int x) { System.out.print("f4(int)"); }
void f4(long x) { System.out.print("f4(long)"); }
void f4(float x) { System.out.print("f4(float)"); }
void f4(double x) { System.out.print("f4(double)"); }
void f5(long x) { System.out.print("f5(long)"); }
void f5(float x) { System.out.print("f5(float)"); }
void f5(double x) { System.out.print("f5(double)"); }
void f6(float x) { System.out.print("f6(float)"); }
void f6(double x) { System.out.print("f6(double)"); }
void f7(double x) { System.out.print("f7(double)"); }
void testConstVal() {
System.out.print("5 : ");
f1(5);f2(5);f3(5);f4(5);f5(5);f6(5);f7(5);System.out.println();
}
void testChar() {
char x = 'x';
System.out.print("char : ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);System.out.println();
}
void testByte() {
byte x = 0;
System.out.print("byte : ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);System.out.println();
}
void testShort() {
short x = 0;
System.out.print("short : ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);System.out.println();
}
void testInt() {
int x = 0;
System.out.print("int : ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);System.out.println();
}
void testFloat() {
float x = 0f;
System.out.print("float : ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);System.out.println();
}
void testLong() {
long x = 0L;
System.out.print("long : ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);System.out.println();
}
void testDouble() {
double x = 0;
System.out.print("double : ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);System.out.println();
}
}
public class TIJTest13 {
public static void main(String[] args) {
testOverLoading t = new testOverLoading();
//t.testConstVal();
//t.testChar();
//t.testByte();
//t.testShort();
//t.testInt();
//t.testFloat();
//t.testLong();
t.testDouble();
}
}
c.构造函数
创建一个类后,系统会默认给你一个无参的构造函数,如果没有构造函数,你讲无法创建实例对象。如果你手动创建一个无参或者有参的构造,那么编译器就不会再帮你创建。
阅读全文
2 0
- java笔记
- JAVA笔记
- java笔记
- java笔记
- JAVA笔记
- java笔记
- Java 笔记
- java笔记
- java 笔记
- java笔记
- java笔记
- java笔记
- Java笔记
- java笔记
- java笔记
- Java笔记
- java笔记
- java笔记
- 纯CSS实现侧边栏/分栏高度自动相等
- java NIO原理及实例
- C#利用HttpListener实现接受上传文件
- HDU6035 Colorful Tree(树形dp)
- Lambda 表达式
- java笔记
- PAT B1040. 有几个PAT
- 为何你跟着滴滴D8级前端大神撸代码,技术却依旧原地踏步?
- 阶乘之和 水
- Python3爬虫 处理分页
- HDU 1061 Rightmost Digit
- HTML5本地存储之Web Storage篇
- 在STM32上实现使用DMA+USART3传输数据
- ssh无密码登录故障解决