Java基础操作
(一)、包装类
1.为什么要包装类?
(1).首先,Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,将每个基本数据类型设计一个对应的类进行代表,这种方式增强了Java面向对象的性质。
(2).其次,如果仅仅有基本数据类型,那么在实际使用时将存在很多的不便,很多地方都需要使用对象而不是基本数据类型。比如,在集合类中,我们是无法将int 、double等类型放进去的,因为集合的容器要求元素是Object类型。而包装类型的存在使得向集合中传入数值成为可能,包装类的存在弥补了基本数据类型的不足。
(3).此外,包装类还为基本类型添加了属性和方法,丰富了基本类型的操作。如当我们想知道int取值范围的最小值,我们需要通过运算,如下面所示,但是有了包装类,我们可以直接使用Integer.MAX_VALUE即可。
2.包装类的2种主要用途
1.java中的数据类型int,double等不是对象,无法通过向上转型获取到Object提供的方法,而像String却可以,只因为String是一个对象而不是一个类型。基本数据类型由于这样的特性,导致无法参与转型,泛型,反射等过程。为了弥补这个缺陷,java提供了包装类。
作为 和基本数据类型对应的类, 包装类存在,方便涉及到对象的操作。
包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。
3.为什么要保留基本数据类型?
我们都知道在Java语言中,用new关键字创建的对象是存储在堆里的,我们通过栈中的引用来使用这些对象,所以,对象本身来说是比较消耗资源的。对于经常用到的类型,如int等,如果我们每次使用这种变量的时候都需要new一个对象的话,就会比较笨重了。所以,Java提供了基本数据类型,这种数据的变量不需要使用new在堆上创建,而是直接在栈内存中存储,因此会更加高效。
(二)、Java的基本格式:
固定格式:
public class 文件名
{
public static void main(String []avgs){
}
};
(三)、Java的输入输出:
1.输出问题:
格式: System.out.println();
代码展示:
public class one
{
public static void main(String []avgs) //切记是大写
{
int a=3;
//系统 调用输出 调用打印
System.out.println("通过电脑屏幕打印出来的数据为:\n");
System.out.println(a);
}
} //这里没有分号
效果展示:
2.输入问题
1. 引入工具包: import java.util.Scanner;
2. 声明工具包:Scanner sc=new Scanner(System.in);
3. ==========================================================
使用工具包: i=sc.nextInt(); //输入整形
使用工具包 j=sc.nextFloat(); //输入浮点型
使用工具包 k=sc.nextDouble(); /输入double型
使用工具包 s=sc.next(); //输入字符串 String
使用工具包 c=sc.next().charAt(0); //输入字符char
4. 以上方法遇到空格 制表符\t 回车. 这些符号后数据就不会被接受了.===================
使用工具包 s=sc.nextLine() //接受字符串
6. 这个方法只有遇到回车才会结束
代码展示:
// 引入工具包
import java.util.Scanner;
public class one
{
public static void main(String []avgs)
{
//声明工具包
Scanner sc=new Scanner(System.in);
System.out.println("请您输入您要输入一个整形的数据:");
int i;
//使用工具包
i=sc.nextInt(); //仔细看 nextInt();
System.out.println(i);
float j;
System.out.println("请您输入一个浮点型数据:\n");
//使用工具包
j=sc.nextFloat(); // 仔细看 nextFloat
System.out.println(j);
double k;
System.out.println("请输入一个double型的数据:\n");
//使用工具包
k=sc.nextDouble();
System.out.println(k);
System.out.println("请输入一个字符串:\n");
String s;
//使用工具包
s=sc.next();
System.out.println(s);
System.out.println("请输入一个字符\n:");
char c;
//使用工具包
c=sc.next().charAt(0);
System.out.println(c);
}
}
效果展示:
第一套体系:输入的时候用空格分开:
(因为第一个数据接受了 1和空格,那么内存里面还有一个2,所以自动分配给了第二个接收数据.)
第二套体系:
遇到空格不会停止,只有遇到回车的时候才有问题
两个体系混用的时候(空格)
两个体系混用,回车
(三)、运算符的规则:
小空间的转化成大空间的 比如说 1L的水到进4L杯子是可行的.
运算的取值大小:
bety<short<int<long<float<double
byte short char 在运算前首先要转换成int .
(四)、 + 起到链接字符串和运算的作用
代码展示:
public class one
{
public static void main(String []avgs)
{
System.out.println("123"+123);
System.out.println(1+2+"黑马程序");
System.out.println('a'+3);
}
}
效果展示:
(五)、逻辑运算符号
1.逻辑或
| 一个为真全部为真
2.逻辑非
! 真为假,假为真.
3.逻辑且
& 一个为假全部为假
4.逻辑异或
^ 两边一样为假 两边不一样为真 (民政局)
5.短路且
&& 一个为假全部为假 (区别在于只要第一个是个确定的,
第二个我可以不看)
6.短路或
|| 一个为真 ,全部为真 (区别在于只要第一个是个确定的,
第二个我可以不看)
代码展示:
import java.util.Scanner;
public class one
{
public static void main(String []avgs)
{
// & 逻辑且 两边同时为真才为真
System.out.println(true&true);
System.out.println(true&false);
System.out.println(false&false);
// | 逻辑或,两边同时为假 才为假
System.out.println(true|true);
System.out.println(true|false); //为真
System.out.println(false|false);
// ! 逻辑非 假的为真,真的为假.
System.out.println(!true);
System.out.println(!false);
//^ 逻辑异或 相同为false 不相同为true (民政局)
System.out.println(true^true);
System.out.println(true^false); //为真
System.out.println(false^false);
//===================================以上不管真假都运行
//短路逻辑符
// && 短路且 第一个不满足条件直接短路,也就是说第二个直接跳过
System.out.println(true&&true);
System.out.println(true&&false);
System.out.println(false&&false);
System.out.println(false&&true);
//|| 短路或
System.out.println(true||true);
System.out.println(true||false); //为真
System.out.println(false||false);
Scanner sc=new Scanner(System.in);
int i,j;
System.out.println("请您输入两个整数:");
i=sc.nextInt();
j=sc.nextInt();
if(i==6||j==6||i+j==6)
{
System.out.println(true);
}
else
{
System.out.println(false);
}
}
}
效果展示:
(六)、原码、反码、补码(八位)
0 000000000(二进制)
1.原码:
定义 : 十进制的二进制表现形式,最左边是符号位,0为正,1为负
十进制:56 ---------------- 二进制: 00111000 (原码)【其中左边第一个0,是符号位。其余是数据】
十进制:-56-------------------二进制: 10111000 (原码)
55------------------------原码 : 00110111
-55-------------------------原码: 10110111;
1.1原码弊端:
主要作用是只能取正数,不能取负数.。如果进行负数运算,结果就出错。和我们预期的到结果是有区别的.
2.反码:
定义:正数的反码是其本身,负数的反码是符号位保持不变,其余位取反 。按位取反
-56----------反码为: 11000111 (表示)
都先取反码再运算
-56+1= 11001000 – ----- (-55的反码为) :11001000
2.2作用:
是为了解决源码不能计算负数的问题而出现的
2.3计算规则
正数的反码不变.负数的反码在源码的基础上,符号位不变,数值取反,0变1,1变0;
2.4反码弊端:
当反码到0的时候,0有两种形式.+0,-0;所以会误差1
3.补码:
定义: 目的是为了解决反码的误差决定的。正数的补码是其本身,负数的补码是再其反码的基础上+1;
(七)、隐形转换和强制转换原理
1个字节 占据 8个比特位 00000000
4个字节 占据32个比特位
1.隐式转换: (补齐比特位)
publci class one
{
public static void main()
{
bety a=10; //比特位 0000 1010
int b;
b=a; // 0000 0000 0000 0000 0000 0000 0000 1010
}
}
2.强制转换 : (删除比特位)
publci class one
{
public static void main()
{
int a=10; // 0000 0000 0000 0000 0000 0000 0000 1010
bety b;
b=(byte)a; // ~~0000 0000 0000 0000 0000 0000~~ 0000 1010
}
}
3. Java基本数据类型的取值范围:
4.Java的各个基本数据类型的比特位
(八)、其他逻辑运算符
1.逻辑且计算机运算视角
原理:两个为真就为1,否则为0;
publci class one
{
public static void main()
{
int a=10; // 0000 0000 0000 0000 0000 0000 0000 1010
int b=10; // 0000 0000 0000 0000 0000 0000 0000 1010
//————————————————————————————————————————————————————————
System.out.println(a&b); 1 0 1 0
//结果为 10
}
}
2.逻辑或计算视角
原理: 一个为真就为1.否则为0
publci class one
{
public static void main()
{
int a=10; // 0000 0000 0000 0000 0000 0000 0000 1010
int b=10; // 0000 0000 0000 0000 0000 0000 0000 1010
//————————————————————————————————————————————————————————
System.out.println(a|b); 1 0 1 0
//结果为 10
}
}
4.左移运算符(左移一位就是原数值*2)<<
原理: 高位(左)左移,低位补零
publci class one
{
public static void main()
{
int a=10; // 0000 0000 0000 0000 0000 0000 0000 1010
System.out.println(a<<2); //左移2位。~~00~~ 00 0000 0000 0000 0000 0000 0000 1010 00
也就是40
}
}
3.右移运算符 (右移一位原数值除2)>>
原理:向右移动,高位补0或1 .符号位要与原数据(符号)保持一致,数据位补0
publci class one
{
public static void main()
{
int a=10; // 0000 0000 0000 0000 0000 0000 0000 1010
System.out.println(a>>2); //右移2位。 00 0000 0000 0000 0000 0000 0000 0000 10 ~~10~~
也就是2
}
}
5.无符号右移(>>>)
原理:向右移动,高位只补0.
基础篇第一节 已完毕!!!!!1