面向对象编程开发方法
把软件系统看成各种对象的集合,对象就是最小的子系统,接近人的思维
类 具有相同属性和行为抽象出来的模板
对象就是类的具体化,通过new
对象是唯一的
创建people
面向对象的编程步骤
1先创建类class
people
2创建对象
通过new
3操作对象的行为
p.display()
4.测试
实例代码
package com.briup.day03;
public class PeopleTest
{
public static void main(String[] args) {
People p1=new People();
p1.display();
}
}
package com.briup.day03;
public class People
{
public int id;
public String name;
public void display(){
System.out.println("我是人");
}
}//先编译
运行时数据
一个完整的java代码运行时数据会保存在内存的不同区域
方法区、代码区:存放类的信息
栈区,存放局部变量,每个线程都有自己的栈
1用来保存基本数据类型的值
2保存类的实例,即堆区对象的引用
堆区:存放动态数据,由new所产生的数据
常量池:存放常量。常量池就是用到常量的一个集合,也是在堆区存放
pc寄存器;存放下一条要执行的指令
nwe操作在内存分配做了哪些操作
1在栈区开辟空间保存的对象的引用
2在堆区开辟空间保存对象
2将堆区的地址赋值给栈区对象的引用,引用对应的是:地址
基本数据类型变量
由基本数据类型修饰的变量
赋值时,直接赋值
内存中保存数据:栈区保存数值
引用数据类型变量
由引用数据类型修饰的变量
赋值时:使用new关键字
内存保存数据,在栈区保存对象的地址值,堆区保存对象本身的值
1实例变量和局部变量
变量:先声明后赋值
局部变量
位置:放在方法的参数列表中或者方法的{}中
作用域:从变量定义的地方到方法结束的地方有效
生命周期:从变量定义的地方到方法结束的地方结束
在内存中存放的位置:存在栈区
实例变量
位置:放在类里面,方法外面
作用域:在整个类中有效
生命周期:从对象的创建开始,到gc回收
在内存中存放的位置:存在堆区
默认会给默认值,整型0 浮点为0.0,布尔类型false ,引用类型null
byte short int long float double char boolean All reference types
0 0 0 0L 0.0f 0.0d ‘\u0000’ false null
操作符
1算数操作符+ - /*% n
主要针对基本数据类型的数据
+还可以用于字符串的拼接
int a=10,int b=20;int c=a/b=0;int c=a%b=10
2赋值操作符
int a=10;
a=a+20;
+=,-=,*=,/=
a+=20;
a+=b 做了一个隐式转换数据类型,向等号左边数据类型进行转换
a+=b,等价于a=(左边的数据类型)(a+b);
short a=0;
int b=123456;
a=a+b
3比较操作符 结果true false
=< <
instanceof 判断一个引用类型的对象是否是类的实例
obect 超类。(所有类的父类)
4等操作符—true/false
"==!="
equals
比较基本数据类型的数据
比较引用数据类型的数据
==比较的是对象的地址是否相同,比较的是栈区
equals ()方法,对象调用
他是属于Object类的,比较的也是地址值,但后期可以自己制定规则
`int a=20 int b=10;
string s1="hello";
string s2="hello"
string s3=new string("hello"); (有几个对象 1个或2个 如果常量池创建过hello 就是一个`S3 如果没有就是两个 )
`string s4=new string("hello");
位移操作符
有符号位右移,最高位补符号位。(高位负数补1正数补0)低位抛弃
无符号右移,最高位补0
<<无符号左移,最低位补0
10>>2-------2 10有符号的右移两位
10的二进制为 0000…1010 去掉后两位
0000…0010转换为10进制为2
10>>>2-----2
0000.0010 把1变成0
10<<2------40
0000…1010
000.101000转换为二进制为40
-10>>2------- -3
0000…1010 取反加1
1111…0101 取反
1111…0110 加1
右移两位 1111…1101 然后减一取反
1111…1100 减一
1000…0011 取反 符号位不变
-10>>>2---- 1073741821
0000…1010 取反加1
1111…0101 取反
1111…0110 加1
右移
0011…1101
位操作符-针对二进制
&与 0&0=0 0&1=0 1&1=1 两个二级制位均为1,结果为1,否则为0
|或 0|0=0 0|1=1 1|1=1 两个二进制均为0,结果为0,否则为1
^异或 0^0=0 0^1=1 1^1=0 两个二进制位不同,结果为1,相同则为0
-取反 -0=1 -1=0 取反,结果与原来二进制位相反,1变0 0变成1
8&2----》0
8的二进制 0000…1000&
2的二进制 0000…0010
0000…0000
8|2—》10
0000…1000 |
0000…0010
0000…1010
8^2----》10
0000…1000^
0000…0010
0000…1010
~10----》-11
0000…1010
1111…0101
当值比较大的时候减一取反符号位不变
1000…1011
1.输出任意int类型的二进制
11
0000…1011
代码
out(d);
}
//输出十进制对应的二进制
public static void out(int num){
System.out.println(num+"的二进制是\t");
for(int i=31;i>=0;i--){
System.out.print(num>>i&1);
}
System.out.println();
}
2.将任意int类型的数据的任意位置置1
10 第3位为1
0000…01010 |
0000…00100 需要这种情况 &与 两个不为就为0
0000…01110得到的结果
0000…00100 1<<2 0000…10000
num|(1<<(position-1)) position传过来要置换为1的值
代码
out(10);
int c=bitSet(-10,3);
out(c);
//将任意int类型的数据的任意位置置1
public static int bitSet(int num,int position){
return num|(1<<(position-1));
3.将任意int类型的数据的任意位置置0
10 2
0000…01010&
1111…11101 需要这种情况
0000…01000得到的结果
1111…11101
~(1<<1)
00000…001 1的二进制
00000…010 1<<1
num&(~(1<<(position-1)))
代码
int d=bitZero(10,2);
out(d);、
public static int bitZero(int num,int position){
return num & ~(1<<(position-1));
4.将任意int类型的数据的任意位置置反
?三目运算符
三目运算符的使用方法:根据?前面的条件判断进行排序。
如果为true 整个表达式的结果:前面的部分
如果为false 整个表达式结果为后面的部分
(条件要怎么写才能满足想要的情况)
int a=10; int b=20 int c=a>b?a:b;
if (a>b){
syso(a);
}else{
syso(b);
}
逻辑操作符的结果true或者false
&&:有一个条件为假,结果为假
||:有一个条件为真,结果为真
int a=20 int b=30
a>b&&a+20>b false
a>b||a+20>b
if(a>b&&(a+=20)>b)
& | 也可以做逻辑操作符
&&和||具有逻辑短路的功能,就是不走了
a++ ++a a-- --a
a++等价于a=a+1;
int a=20;
int b=a++ a=21 b=20先赋值后运算
int b=++a a=21 b=21先运算后赋值算