JAVA语言零基础学习笔记

大二下一门课需要以java语言为基础,所以花几天时间入门一下java编程的基本操作*
(和c不一样的地方选择记录)

1.读入

import java.util.Scanner;
Scanner in = new Scanner(System.in);//从控制台输入
System.out.println("echo:"+in.nextLine());//打印echo:输入的值
int amount = in.nextInt();

Scanner 类中的 nextInt() 方法 输入一个整数, 该方法只是接受一个 整型的数据,如果输入的是非整数数据, 将会 抛出 InputMismatchException 异常
nextLine() 输入一行数据,一般会将你输入的数据当做 字符串处理
nextDouble() 输入一个 双精度实型的 数据
nextFloat() 输入一个 单精度实型的 数据
nextByte() 输入一个字节的 数据
nextLong() 输入一个long型的 数据,
等等, 如果输入错误的话, 或者输入的东西和你 调用的方法不匹配, 都会抛出 InputMismatchException 异常

比较浮点数大小时不能用比较符
Math.abs(a-b) < 1e-6

2.判断

public class Compare {

	public static void main(String[] args) {
		final int MINOR = 35;
		System.out.print("input your age:");
		Scanner in = new Scanner(System.in);
		
		int age = in.nextInt();   //读入年龄
		
		System.out.print("your age is:" + age);
		
		if( age < MINOR )        //和C语言一样的语法
		{
			System.out.println("youth is good.");
			
		}

		System.out.println("cherrish your time!");
	}

}

else 和最近的if匹配
println是输出之后换行

swith (控制表达式){
case 常量:
语句
case 常量:
语句
...
default:
语句
...
}

如果没有break就一直运行下去。

int number = Math.random()*100//Math.random()方法生成0到1之间的随机数,乘以100得到1到100的随机数

且生成的是[0,1)之间浮点数,如果变成int,(int)强转。=9=9

3.循环
break & continue
break跳出循环
continue跳过循环这一轮剩下的语句进入下一轮

在循环体前面可以放一个标号来标识循环:

  • label

带标号的break和continue对那个循环起作用。

4.逻辑类型

boolean falg = true;//java中布尔型变量只能是true或者false 不能用0和1

辗转相除法求a,b 最大公约数
1.如果b = 0 ,计算结束,a就是最大公约数
2.否则,计算a 处除以b 的余数,让a = b, b = 余数。
3.回到第一步。

5.数组

int[] number = new int[100];//创建一个100容量的数组

数组里面的东西是相同的类型,而且不能再改变容量大小。
和c不一样的是,java中申请数组是可以用变量的

Scanner in = new Scanner(System.in);
		int cnt = 0;
		cnt = in.nextInt();
		int[] number = new int[cnt];

number.length 就是数组的长度

6.对象
字符变量

char c = 'a';//单个字符用单引号
c++;//b
int i = 'A' - 'Z';//两个字母之间的距离

逃逸字符:
\b 回退一格
\t 到下一个表格位(经常用来对齐)
\n 换行
\r 回车

包裹类型:
判断,找最大最小值,大小写变换…
Math.abs(-12); 绝对值
Math.round(); 四舍五入
Math.pow(a,b); a 的b次幂

字符串变量
new = 创建

String s = new String("a string");//创建一个String的对象

用"a string"初始化这个对象
创建管理这个对象的变量s
+链接两个字符串

比较两个字符串是否相等,要用.equals来比较
“==” 作比较是指的是是否管理同一个字符串

“=="比较的是是不是同样的东西
equals比较内容是否相等


1.类与对象

  • 对象是实体,需要被创建,可以为我们做事情
  • 类是规范,根据类的定义来创建对象

对象 = 属性 + 服务
数据:属性或者状态
操作:函数

创建对象:对象变量是对象的管理者

定义在函数内部的变量是本地变量
本地变量的生存期和作用域都是函数内部
成员变量的生存期是对象的生存期,作用域是类内部的成员函数

构造函数
这个成员函数的名字和类的名字相同,则在创建这个类的每一个对象的时候会自动调用这个函数 -> 构造函数
这个函数不能有返回类型

函数重载
一个类可以有多个构造函数,只要它们的参数表不同
创建对象的时候给出不同的参数值,就会自动调用不同的构造函数
通过this()还可以调用其他构造函数
一个类里的同名但参数不同的函数构成了重载关系

.
2.对象交互
把数据和对数据的操作放在一起 -> 封装
private 只有这个类里面的成员函数可以使用,针对类而不是针对对象。
public 任何人都可以访问
如果什么都不加,则是friendly,包内可以使用
一个单元最多有一个public的类
import.package.class 如果用到其他包的类就要import
import.package.* 引入包的所有东西(有风险,可能会重名之类的)

static 类变量,不属于成员变量

3.对象容器

泛型容器类

import java.util.ArrayList;
...
private ArrayList<String> notes = new ArrayList<String>();

容器类有两个类型:

  • 容器的类型
  • 元素的类型

ArrayList

对象数组中的每个元素都是对象的管理者而非对象本身。
对象数组的for-each循环

ArrayList<String> a = new ArrayList<String>();
		a.add("fist");
		a.add("second");
		for (String s : a) {//对a数组里面的每一个string s
			System.out.println(s);
			}

HASH表对应

//硬币名字得到机器
import java.util.Scanner;
import java.util.HashMap;
public class Coin {
	//HASH表键值对
	private HashMap<Integer,String> coinnames = new HashMap<Integer,String>();
	//创建coin的构造器
	public Coin() {
		coinnames.put(1, "penny");
		coinnames.put(10, "dime");
		coinnames.put(25, "quarter");
		coinnames.put(50, "half-dolor");
	}
	
	public String getName(int amount) {
		return coinnames.get(amount);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int amount = in.nextInt();
		Coin coin = new Coin();
		String name = coin.getName(amount);
		System.out.println(name);
	}

}

构造函数是一种特殊的函数。其主要功能是用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。构造函数与类名相同,可重载多个不同的构造函数。

4.继承与多态
子类和子类型:
类定义了类型
子类定义了子类型
子类的对象可以被当做父类的对象来使用(赋值给父类的对象,传递给需要父类对象的函数,放进存放父类对象的容器里)

子类型和容器:子类的对象可以放在存放父类对象的容器里

多态变量
当把子类的对象赋给父类的变量的时候就发生了向上构造

造型cast
子类的对象可以赋值给父类的变量,java中不存在对象对对象的赋值

向上造型
拿一个子类的对象当做父类的对象来使用
向上造型是默认的,不需要运算符
向上造型总是安全的

Object类的函数

  • toString()
  • equals()

传进来的是object形式,所以就不能直接比较了
利用向下造型使cc再次变成CD

@Override//告诉编译器有和父类相同的函数
	public boolean equals(Object arg0) {
		// TODO Auto-generated method stub
		CD cc = (CD)arg0;//向下造型,cc代表了cd
		return artist.equals(cc.artist);
	}

String words = line.split(" ");//将一行句子分成每个单词
if( words[0].equals("help")){
...}
else if( words[1].equals("go")){
...}

5.设计原则
用封装来降低耦合

  • 类与类之间的关系称作耦合
  • 耦合越低越好,保持距离是形成良好代码的关键

6.抽象与接口
抽象函数—表达概念而无法实现具体代码的函数
抽象类—表达概念而无法构造出实体的类
带有abstract修饰符的函数
有抽象函数的类一定是抽象类
抽象类不能制造对象
但是可以定义变量
任何继承了抽象类的非抽象类的对象可以付给这个变量

实现抽象函数:
继承自抽象类的子类必须覆盖父类中的函数
否则自己成为抽象类

只有c++才支持多继承

接口

  • 接口是纯抽象类
  • 所有的成员函数都是抽象函数
  • 所有的成员变量都是public static final
    接口规定了长什么样,但不管内部

实现接口

  • 类用extends,接口用implements
  • 类可以实现很多接口
  • 接口可以继承接口但是不能继承类
  • 接口不能实现接口

面向接口的编程方式

  • 程序设计时先定义接口再实现类
  • 任何需要在函数间传入传出的一定是接口而不是具体的类
  • 是java成功的关键之一,可以允许多人完成项目
  • 代码膨胀很快

7.控制反转

Swing

匿名类

  • 在new对象的时候给出的类的定义形成了匿名类
  • 匿名类可以继承某类,也可以实现某接口
  • Swing的消息机制广泛使用匿名类

8.异常和流

你可能感兴趣的:(JAVA语言零基础学习笔记)