Java基础概念1

时间:2022-07-28 20:50:57

一、Java数据类型

1、byte 字节型

1byte = 8bit 表示数范围:-2^7~2^7-1(-128~127);

2、short 短整型

2 byte = 16bit 表示数范围:-2^15~2^15-1(-32788~32787);

3、int 整型

4byte =32bit 表示数范围:-2^31~2^31-1(-2147483648~2147483647);

4、long 长整型

8byte = 64 bit 表示数范围:-2^63~2^63-1

5、char 字符型

2byte =16bit 表示数范围:0~2^16(0~65535)

既是字符,又是数字;使用特定字符编码,表示不同的字符;表示方式如下:

char c1 ='A';    c1 ='B';    c1 ='@';   c1 ='中‘;

6、字符编码:

ASCII码  美国 1byte中7bit 表示数范围:0~127

十进制      48        49        65         66         97          98

十六进制   ox30   ox31     ox41      ox42      ox61     ox62

字符         ‘0’        '1'        ‘A’           ‘B’          ‘a’        'b'

ISO8859-1(latin-1)  1byte中8bit 表示数范围:0~256

GBK编码  2byte  16bit

UTF-8编码是Unicode编码的一种,目前项目中用得多。英文 1byte存储一个字符;中午 3byte存储一个字符。

Java中的char使用Unicode编码,2byte存储,65536种数字对应不同的字符。全球化支持大多是国家的字符。

7、char类型写法:2byte =16bit

char c1 =‘A’;

char c2 ='\u0041’;

Unicode表达法:‘\u四位十六进制’。

技巧:获取中文Unicode jdk\bin,jdk提供了native2ascii。exe

步骤:

1)在d:\新建1.txt——打开编辑——中国——保存;

2)d:\>native2ascii 1.txt   2.txt,生成2.txt文件;

3)打开d:\的2.txt得到编码。

8、区分字符和字符串

char c1 = ‘a’; 只能写一个字符 ,基本类型;

String s1 =“abc”;任意写多个字符,引用类型。

9、float 单精度浮点型,有精度误差,二进制数无法精确表示0.1;

4byte = 32bit,能够表示2.0E30,科学计数法(2.0*10^30);

底层存储:高3个字节保存数据,底1个字节保存位权;

00000000 00000000 00000010 00011110

10、double双精度浮点型,有精度误差,二进制数无法精确表示0.1;

8byte =64bit

底层存储:高6个字节保存数据,底2个字节保存位权;

11、boolean布尔型,最多1byte中的1bit;Java:只有两个字面值true、false。

用途:表示两种状态,常用于条件判断;

boolean flag = true;//表示好天气

if(flag){

打印出去玩;

}else{

打印继续学习;

}

练习:求出9的99次方,得到精确的结果。

基本类型:int、long、double;引用类型:String、Scanner、System等;

使用java.math.BigInteger类,大整数类;内存有多大,就能表示多大。

12、引用数据类型(主要关注底层存储结构)又称为复杂类型、对象类型

底层存储:引用变量 —>内存对象

按照表现形式分5种:

类class、接口interfac、数组String[]/int[]、枚举、标注

13、计算机主要硬件设备:

磁盘(程序)    内存(进程)    CPU(指令)

JVM内存的三大区域:

1)Stack栈区:存放局部变量(临时变量)—定义在方法中的变量;

栈是一种先进后出的数据结构。FILO(First In,Last Out)

2)Heap堆区:存放对象

3)Code方法区:存放类的信息、静态资源

以class为例,说明引用类型的结构。

(1)JDK中已定义的引用类型class

java.lang.String 类  字符串类

java.lang.System类  系统类

java.lang.Integer类  int包装类

java.lang.Long类 long包装类

java.until.Scanner类  扫描器类

java.math.BigInteger类  大整数类

(2)自定义引用类型calss

类是对象的一种抽象、模板、蓝图        水果   动物

对象是类的具体实例(具体化)       某个苹果 具体个体

练习:

设计一个学生类,并表示成一些对象

基本思路:需要表示学生数据,找学生类,创建对象,赋予属性值,使用方法功能;

(1)定义出一个类,类名Student

package day04;

public class Studeng{//类体

//有什么?数据抽象、属性

String name;

int age;

char hobby;

//会什么?功能抽象、方法

//学习 study,参数course表示课程的名称

public void  study (String course){

System.out.println(name+"学习"+course);

}

}

(2)使用Student类创建对象,调用方法;

psckage day04;

public class TestStudent{

public static void main(String[] args){

Student stu1 = new Student();

stu1.name = "tom";

stu1.age = 29;

stu1.study("JavaSE");//调用方法

}

}

15、void无返回值类型

只能用在方法返回值类型,表示无需返回结果

16、数据类型的转换

1)自动类型转换

(1)常数在表数范围内能够自动转型

byte b1 = 123;  //int->byte [-128,127];

char c1 = 65;    //int->char  [0,65535];

char c2 = 'A' + 1;//int->char;

(2)范围小的自动向范围大的转型

byte->short(2)->int(4)->long(8)->float(4)->double(8)

char(2)

int n1 ='A';       //char->int  65

double d1 =123;  //int->double

double d2 = 123.5 +5;  //double + int,自动类型提升为double(就大);

(3)引用类型子类能够自动转化为父类

java.lang.Object类,是所有类的父类;

Student stu1 =new Student();

Object obj = stu1;  //Student ->Object

(4)基本类型可以和包装类型之间互相转换,Java为8种基本类型提供了对应的包装类。

原因:Java什么都是对象,基本类型也想变成对象?

包装类都在Java.jang包下:几乎都是首字母大写

基本类型:byte   short       int      long     char       float   double   boolean

包装类:   Byte   Short   Integer  Long   Chatcter   Float   Double   Boolean

int n1 = 123;

Integer in1 = n1;  //int ->Integer 自动封箱

int n2 = in1;  //Integer ->int  自动拆箱

2)强制类型转换

除了自动转型外,都使用强制转型;

语法:(数据类型)数据、变量、表达式、方法调用。。。

规则:保留低位字节,舍去高位字节。

128的二进制补码:32位:00000000 00000000 00000000 10000000

byte:8位:10000000

byte n1 = (byte)128;  -128

byte b1 =  (byte)128;

二、运算符和表达式

运算符:operator       + - * /  =

表达式:expression    1+2   a=1;

将数据使用运算符进行合理连接,形成表达式。实现实际业务操作的表达。

运算符(学习目标:先了解功能,后续不断应用)

赋值运算符Assignment operators

= 、*=、/=、%=、    += 、-=、《=、》=、  >>>= 、&=、^=、|=、

比较运算符:>、>=、<、<=、instanceo

判断是否相等运算符:==、!=

算术运算符:+、-、*、/、%(取余数)

移位运算符:>>、<<、>>>

位运算:&、|、^、~  

逻辑运算符:&&与、||或、&与 、|或

条件运算符:?:(三目运算符_?_:_)

其他运算符:++、--、(<data-type>

Java基础概念1

优先级:a+b*c、(a+b)*c;技巧:使用()可以提高优先级

结合律:相同优先级考虑

a+b-c    一般从左->右

从上往下,优先级递减:

1、

():提升优先级和提高可读性——(a+b)/(c-d)

 []:取数组小标——a[0]、a[1]...

 . : 取成员运算符   成员(属性、方法),可以理解为stu1的age——stu1.age+1      stu1.study("JabaSE")

++:自增1运算符——

int a =1;

//前++,先自加1,再取值   a = a+1;   再取a

System.out.println(++a);  //2

System.out.println(a);     //2

//后++,先取值,再自加1——先取a打印,再a = a+1;

System.out.println(a++);  //2

System.out.println(a);     //3

--:自减1运算符

&:按位与、逻辑与

^:按位异或;”同0异1“;

|:按位或;”有1则1,全0则0“;

&&:逻辑与(短路与);

条件1 && 条件2

如果条件1为true,还需判断条件2

如果条件2为true,结果为true

如果条件2为false,结果为false

如果条件1为false,无需判断条件2,结果为false

||:逻辑或(短路或 )

条件1 || 条件2

如果条件1为true,还需判断条件2

如果条件2为true,结果为true

如果条件2为false,结果为false

如果条件1为true,无需判断条件2,结果为true

用途:具体问题具体分析

&&:能够简化操作,提高效率(性能)

&:当两个条件都需要判断是使用(条件兼顾)

<boolean_axpr>?<expr1>:<expr2>:条件运算符:(三目运算符)

条件表达式?条件为真的结果:条件为假的结果

写一个程序,求出a和b的最大值

int a = 3;

int b = 5;

int max = a > b ? a : b;

打印max 5

赋值运算符:特点优先级最低

=:      *=:     /=:     %=:     +=:     -=:     <<=:     >>=:     >>>=:     &=:     ^=:     |=:

double d1 = 1+2/(a * c - b) + 100;

int a = 5;

a *= 6; //近似等价于 a = a *6;

byte b1 =1;

byte b2 =2;

byte b3 =b1 + b2;//编译无法通过,提升为int计算,需要强制类型转换;

b1 +=  b2;  //可以,近似b1 = b1 + b2 不会提升为int。

三、Java方法

3W1H:

What?是什么?核心概念——> Why?为什么使用,好处——> Where?应用领域——> How?如何应用?程序实践

1、含义:

Java的方法method,在其它语言中称为函数function。方法表示一段固定的代码,表示固定的业务逻辑;便于反复使用,易于维护。

数学的函数(function):y = f(x) = 2 * x + 1;

可以提高软件::可复用性、易维护性。

2、方法的定义和使用

(1)方法的定义(设计)

方法三要素:方法名、参数表、返回值类型;

方法只能在类体中定义,并且不能嵌套定义,方法是并列在类提中的。

具备方法体:表示方法业务代码

1)方法的声明(签名)三要素:

public static int add(int a, int b)

2)方法的实现(方法体){}:

public static int add(int a, int b){

return a + b;

}

(2)方法的使用(调用call或invoke)

原则:从哪里调用,就从哪里返回

package day05;

public class TestAdd{

public static void main(String[] args){

int a = 3;

int b = 5;

//int c = a + b;

int c = add(a,b);    //方法的调用。实际参数

int d = add(7,8);

system.out.println("C=" + c);  //8;

}

public static int add(int a ,int b){ //形式参数,临时参数,是实际参数的副本(拷贝)用完即释放

return a + b;

}

1、Stack区:局部变量分配空间

max

b=5

a=3

2、将实参a、b拷贝给形参a、b,比较形参;

b=5

a=3

max

b=5

a=3

3、释放形参后,赋值给max=5;

max

b

a

4、释放所有空间

 

Java基础概念1