经过一周对java的学习,有了不小的收获。感觉Java和C++有很多相通之处,相同的知识就不加赘述啦,在此整理一些新学到的知识。
1.Java的基本数据类型
数据类型名称 | 占用字节 | 默认 | 封装器类 |
---|---|---|---|
byte 字节型 | 1 | 0 | Byte |
short 短整型 | 2 | 0 | Short |
int 整型 | 4 | 0 | Interger |
long 长整型 | 8 | 0.0l | Long |
float 浮点型 | 4 | 0.0f | Float |
double 双精度浮点型 | 8 | 0 | Double |
char 字符型 | 2 | \u0000 | Character |
需要注意一点:
- 浮点数是不精确的,不能用浮点数进行比较
- 如果需要进行不产生误差的精确数字计算,需要使用BigDecimal类
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal bd = BigDecimal.valueOf(1.0);
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
System.out.println(bd);//0.5
System.out.println(1.0 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1);//0.5000000000000001
}
}
2.java的scanner输入
2.1 基本用法
System.out.println("请输入数据:");
String str = scanner.nextLine();
System.out.println("输出的内容:"+str);
- IO流的类最好用完就关,否则会一直占用资源
scanner.close();
2.2 next( )与nextline( )
- next( )
不能得到带有空格的字符串,输入遇到空格或换行就结束。
package Scnner;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方式接收:");
//判断用户有没有输出字符串
if (scanner.hasNext()==true) {
String str = scanner.next();
System.out.println("输出的内容为:"+str);
}
}
}
- nextline()
可以获得空白,遇到换行就结束输入。
package Scnner;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数据:");
String str = scanner.nextLine();
System.out.println("输出的内容:"+str);
scanner.close();
}
3. java初始化块
在Java中,有两种初始化块:静态初始化块和非静态初始化块。
-
非静态初始化块
非静态初始化块给所有对象进行统一初始化,对象一建立就运行,且优先于构造函数的运行。 -
静态初始化块
静态代码块用于初始化类,随着类的加载而执行,不管创建几个对象,都只执行一次,带static关键字。
需要注意:
初始化块的执行顺序是:
父类的静态初始化块->子类的静态初始化块->父类的初始化块->父类的构造函数->子类的初始化块->子类的构造函数
4.Java包机制(package)
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。
4.1包的作用
1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
3、包限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
举个例子说明包的使用:
创建一个名为 cats 的包,并在包中加入一个接口(interface):
package cats;
interface Cat {
public void eat();
public void travel();
}
接下来,在同一个包中加入该接口的实现:
package cats;
public class MammalInt implements Cat{
public void eat(){
System.out.println("Mammal eats");
}
public void travel(){
System.out.println("Mammal travels");
}
public int noOfLegs(){
return 0;
}
public static void main(String args[]){
MammalInt m = new MammalInt();
m.eat();
m.travel();
}
}
5.import语句
import可用于在 Java 程序中导入包。
举例说明:
下面的 school 包已经包含了 Student 类,接下来向 school 包中添加一个Teacher 类。Teacher 类引用 Student 类的时候可以不用使用 school 前缀。
1.Teacher 类在 school 包中
Teacher.java 文件代码:
package school;
public class Teacher
{
public void teacherStudent(Student e)
{
e.mailCheck();
}
}
2、 Teacher 类不在 school 包中
2.1使用类全名描述
school.Student
2.2用 import 关键字引入,使用通配符 *
import school.*;
3.使用 import 关键字引入 Student 类
import school.Student;
6.封装
在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。
封装的优点
- 良好的封装能够减少耦合。
- 类内部的结构可以自由修改。
- 可以对成员变量进行更精确的控制。
- 隐藏信息,实现细节。
实现Java封装的步骤:
1.修改访问权限
public class Person {
private String name;
private int age;
//name 和 age 是私有的,只能本类才能访问,由此达到信息隐藏的目的。
}
2.对每个值属性提供对外的公共方法访问。
public class Person{
private String name;
private int age;
public int getAge(){
return age;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public void setName(String name){
this.name = name;
}
}
举例说明下java封装类的实现:
public class EncapTest{
private String name;
private String idNum;
private int age;
public int getAge(){
return age;
}
public String getName(){
return name;
}
public String getIdNum(){
return idNum;
}
public void setAge( int newAge){
age = newAge;
}
public void setName(String newName){
name = newName;
}
public void setIdNum( String newId){
idNum = newId;
}
}
通过如下操作EncapTest类的变量被访问:
public class RunEncap{
public static void main(String args[]){
EncapTest encap = new EncapTest();
encap.setName("tom");
encap.setAge(18);
encap.setIdNum("123ms");
System.out.print("Name : " + encap.getName()+
" Age : "+ encap.getAge());
}
}
得运行结果:
Name : tom Age : 18
7.java数组
1.声明数组变量
==首先必须声明数组变量,才能在程序中使用数组。==下
dataType[] arrayRefVar; // 常用
dataType arrayRefVar[]; //效果相同,但使用频率少
2.创建数组
Java语言使用new操作符来创建数组
arrayRefVar = new dataType[arraySize];
或
dataType[] arrayRefVar = {value0, value1, ..., valuek};
- 数组变量的声明,和创建数组可以用一条语句完成
dataType[] arrayRefVar = new dataType[arraySize];
举例:
public class Array {
public static void main(String[] args) {
int size = 10;
double[] a = new double[size];
a[0] = 5.6; a[1] = 4.5;
a[2] = 3.3; a[3] = 15;
a[4] = 4.0; a[5] = 34.33;
a[6] = 34.0; a[7] = 11.1;
a[8] = 1.93; a[9] = 123;
double total = 0;
for (int i = 0; i < size; i++) {
total += a[i];
}
System.out.println("总和为: " + total);
}
}
这周还做了些java题目,整理在博客 java练习1里。
以上就是我这周的学习成果,感觉学到了不少新知识,满满的收获感,下周再接再厉。