第三单元 如何使用数据类型与变量*
第一部分 基本类型
一、如果在Eclipse中出现某个工程上有粗的感叹号如何解决?
- 右键点击该工程–Build Path–Configure Build Path —然后按下图提示即可解决。
二、准确口述(面试点)
(一)变量-标识符-关键字
-
1.什么是变量?成员变量与局部变量有什么区别?
- 定义:变量是指没有固定的值,可以改变的数;变量以非数字的符号来表达。变量包括成员变量和局部变量。
- 区别:成员变量(属性);局部变量(local variable-方法内部定义):在使用前必须赋值,它没有默认值。
-
2.什么是标识符?标识符的命名规则是?
- 定义:标识符就是名字,包括属性名、变量名、方法名。
- 命名规则:以_、 、 字 母 开 头 , 后 面 可 以 是 数 字 、 、 、字母开头,后面可以是数字、_ 、 、字母开头,后面可以是数字、、、字母,不能是关键字。
- 以下合法的标识符的是?
- A. _ 是 (下划线)
- B. TURE 是
- C. String 是
- D. 23name 不是 (数字开头)
- E. *p 不是 (*开头)
- F. for 不是 (关键字)
- G. Hello World 不是(不能有空格)
- J. 学生 是合法
-
3.什么是关键字?它有什么特点?共有多少个?
-
定义:关键字(keyword)要全小写,一共53个关键字
-
以下哪些是关键字?true、false、null、goto、const
- 答:纸上作答时:true、false、null也要选,它们可能看起来像关键字,但它们实际上是自变量;goto 和const是关键字,但不能使用。
-
(二)基本类型
-
1.Java中的数据类型分类?分别是什么?
- 分类:8种基本类型,3种引用类型,共11种
- (1).布尔类型(boolean):取值:true或false-长度不明确
- (2).字节型(byte):一个字节8位;范围:-128~+127;
- byte age = 130是不正确的,超出范围。
- (3).字符型(char):2个字节16位;范围:0-65535;字符编码:Unicode编码;
- 一个汉字几个字符?Java中一个汉字一个字符,在C/C++中不成立。
- (4).短整型(short):2个字节:16位;范围:-32768~+32767
- (5).整型(int):4个字节:32位;范围:-2^(n-1) ~2^(n-1)-1;
- (6).长整型(long):8个字节:64位;
- long类型什么情况下必须加L或l?
- 答:如果值超过了int的最大值了,L是必须加的;大小写都可以,推荐大写容易区分。
- long类型什么情况下必须加L或l?
- (7).浮点型(float):4个字节:32位;
- .314f代表0.314,314.f代表314.0。
- float数据F或f能省略吗?
- 答:不能,必须加。
- (8).double:8个字节:64位;D可加可不加,默认值就是double类型,加上是为了区分数据类型。
-
2.搜字符编码,UNICODE、UTF-8、ISO-8859、GB2312、GBK
https://baike.baidu.com/item/字符编码/8446880?fr=aladdin
-
3.Java中转义字符:https://www.cnblogs.com/qinning/p/11006380.html
-
4.String是不是内置数据类型?
- 答:不是关键字也不是内置数据类型,它可以当变量名使用。
-
5、20和9.8的默认数据类型是什么?
- 答:20的默认为int类型,9.8的默认为double类型;小数默认为double类型,整数默认为int类型。
-
6.boolean类型数据的长度是多少?
-
7.基本的数据类型转换规则?
-
答:有一种类型不能转换–boolean类型,其他的都可以
-
转换规则 :低级类型转高级类型-自动,高级类型转低级类型-必须强制;但是byte short char 不需要加相应的强制转换,因为这些计算是要先转到int 。
-
-
面试题:Java语言各种数据类型长度会不会随平台变化?
-
答:不会,否则Java就无法平台无关了。
-
从左往右由低级到高级:byte char short在运算时都会转成int型
- char int long float double
- byte short int long float double
-
格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本放大的数据
-
面试题
int y = 'A' + 2; //67 System.out.println(y); char z = 'A' + 2; //C System.out.println(z); short x5 = 90; //x5=x5+1 x5 += 1; short y4 = 100; y4 = y4 + 1;//不正确
-
三、动手任务
编写Teacher类,提供8个属性,使用8种数据类型
- Teacher类属性:教师年龄(byte)、教师月薪(short)、教师年薪(int)、 教师工号(long)、教师体重(float)、教师身高(double)、教师性别(char)、是否是教授(boolean)
- 覆盖知识点:标识符、关键字和基本类型;标识符命名规则(面试题)、给每个属性提供setter/getter方法
第二部分 引用类型
一、准确口述
- 1.如何理解引用(复合)类型?共3种,包括类、数组和接口
注:类(类型):类名的首字母大写;变量名的首字母小写;如果多个单词构成,中间单词首字母大写。首字母大写有两种情况:类或接口。
- 2.内存(放数据)的逻辑划分是什么?各自的作用是什么?
- (1).栈:放的是局部变量(用完之后就消失),所有的局部变量都会入栈。
- 作用:用于频繁的数据交换
- 特点:先进后出
- 栈区的管理者:由操作系统(OS)管理
- (2).堆:放的是对象 new出来的东西放堆区
- 堆区比栈区大
- (3).全局数据区:全局变量,static变量
- (4).代码段:放代码
- (1).栈:放的是局部变量(用完之后就消失),所有的局部变量都会入栈。
示例1:
public class Worker {
int grade = 4;
String name = "zhangsan";
public static void main(String[] args) {
Worker w1 = new Worker();
int age = 21;
Worker w2;
}
}
上边代码对应的内存里程序的变化图示:内存单元都有唯一的编号
示例2:
public class Worker {
int grade = 4;
String name = "zhangsan";
public static void main(String[] args) {
new Worker();
}
}
上边代码对应的内存里程序的变化图示如下:
- 3.基本类型值传递和引用类型值传递的区别?
- 值传递就是值的复制过程
- 两种类型的值传递示例:
public class ValueTrasfer {
/**
基本类型值传递:
@param age 年龄
@return 折半的值
*/
public int harf(int age) {
//20
System.out.println(age);
int result = age / 2;
age--;
//20
System.out.println(age);
//10
return result;
}
public void change(Worker wx) {
wx.grade = 100;
wx.name = "王宇";
}
public static void main(String[] args) {
ValueTrasfer valueTrasfer = new ValueTrasfer();
int x = 20;
int result = valueTrasfer.harf(x);
//20
System.out.println(x);
//10
System.out.println(result);
Worker xa = new Worker();
valueTrasfer.change(xa);
System.out.println(xa.grade);
System.out.println(xa.name);
}
}
上边代码对应的内存里程序的变化图示如下:
- 4.说明Java的垃圾回收机制(GC(Garbage Collector)机制)?
- (1).垃圾就是无用对象,尽快离开堆区,不然浪费内存单元
- (2).内存泄漏:无用的对象还在内存中存在
- (3).Java中自动垃圾回收机制,C/C++需要程序员来完成垃圾回收
- 面试题:
- (1).Java语言有没有可能产生内存泄漏?答:有可能。
- (2).Sysytem.gc()方法能否强迫JVM进行垃圾回收机制?
- 答:不能,gc方法只是建议JVM进行垃圾回收。
- (3).gc方法一使用,JVM就立刻工作回收垃圾?不一定。
- (4).Object: finalize()在正式垃圾回收前它可被执行,做一些收尾工作。
- (5).程序员能否深度干预垃圾回收?答:不能,只能建议。
二、动手做任务
编写Person类,提供Address属性和name、age属性
- Address类属性(家庭地址、工作单位地址)
- Person类属性:Address、name和age;方法有:设置地址、获得地址、设置姓名和获取姓名;
三、独立任务
实现两个整数的交换
- 1.不用中间变量实现两个整数交换
- 2.用中间变量实现两个整数交换
package com.ychs.corejava.unit3;
/**
* 实现两个整数的交换
* @author zhaobiao
* @version 1.0
*/
public class Change {
public static void main(String[] args) {
//第一种方法,使用中间变量进行两个整数的交换
int a = 10;
int b = 20;
int temp = 0;
System.out.println("交换前:");
System.out.println("a = " + a);
System.out.println("b = " + b);
//把a的值赋给temp
temp = a;
a = b;
b = temp;
System.out.println("交换后:");
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("------------");
//第二种方法:不使用中间变量进行两个整数的交换
int x = 5;
int y = 2;
System.out.println("交换前:");
System.out.println("x = " + x);
System.out.println("y = " + y);
//x = 7, y = 5
x = x + y;
//x = 12, y = 7
y = x - y;
//x = 12, y = 7
x = x - y;
System.out.println("交换后:");
System.out.println("x = " + x);
System.out.println("y = " + y);
System.out.println("------------");
//第三种方法,不使用中间变量进行两个整数的交换(考虑异或运输符)
int m = 8;
int n = 3;
System.out.println("交换前:");
System.out.println("m = " + m);
System.out.println("n = " + n);
m = m^n;
n = m^n;
m = m^n;
System.out.println("交换后:");
System.out.println("m = " + m);
System.out.println("n = " + n);
}
}