《明解JAVA》记录
一、显示字符
语句解析:
public class(//类) MainApplication(//类名) {
public static void main(String[] args) {
// 程序从这里开始执行
System.out.(//标准输出流) println(//输出后换行)("Hello World");
// 访问命令行参数
for(String arg : args) {
System.out.println("参数: " + arg);
}
}
}

二、使用变量
1、声明语句:int x
2、
import java.util.Scanner;
class A{
public static void main (String[] args){
Scanner stdIN = new Scanner(System.in);
int x=stdIN.nextInt()//读入通过键盘输入的x的整数值
}}
Scanner stdIN = new Scanner(System.in); 从标准输入读取用户输入
典型用途:System.out.print("请输入年份:");
int year =stdIN.nextInt();//读取整数输入
三、逻辑

四、循坏
1、do语句

do语句判断要不要循坏的语句在大括号之后
2、while语句
x--结果是递减前的值
do是执行循坏体后判断,while是执行循坏体前判断
3、for

4、break和continue





五、基本类型和运算



七、方法
1、方法的声明



读入值
八、类:对字段、构造函数、方法等进行封装后的内容
将变量包装起来,形成一个集合的映射,class xx像是一个模具,通过new xx()来创建实例

private:私有的,无法从外部进行访问,原则上要将类中的字段设为私有
第一版:

Account:银行账户类
AccountTester:测试Account的类
Account adachi:adachi不是类的主体,而是用来引用主体的类类型变量
类类型变量的主体是实例
第二版:


构造函数:正确地初始化实例。名称与类相同,不能返回值

实例方法:getName,未加static的字段是属于各个实例的,即实例变量
未加static的方法是属于各个实例的,即实例方法


九、创建日期类
构造函数用this


用于获取字段值的方法称为getter方法,用于设置字段值的方法为setter方法,二者统称为访问器。


类类型变量的比较
1)day1==day2 判断二者的引用目标是否相同
2)调用getter方法,判断所有字段的值是否相同

创建比较两个日期的方法:

方法compDay在类Day的外部声明

类类型变量的数组

“2”出现错误:元素a[1]是引用Day的类类型变量,不是日期的实例(主体),需要用new运算符来另外创建实例,如下:构造函数new中必须传入三个int型参数

数组的创建
对于c:已经创建的数组类型的变量,若要将新创建的数组主体的引用赋给该变量,可以像c那样



第三版:
package org.example;
public class Day1 {
private int year=1;
private int month=1;
private int date=1;
//构造函数
public Day1() {}
public Day1(int year) {this.year=year;}
public Day1(int year,int month) {this(year);this.month=month;}
public Day1(int year,int month,int date) {this(year,month);this.date=date;}
public Day1(Day1 d) {this(d.year,d.month,d.date);}//获取年、月、日
//获取年、月、日
public int getYear(){return year;}
public int getMonth(){return month;}
public int getDate(){return date;}
//设置年、月、日
public void setYear(int year){this.year=year;}
public void setMonth(int month){this.month=month;}
public void setDate(int date){this.date=date;}
public void set(int year,int month,int date){ //设置年月日
this.year=year;
this.month=month;
this.date=date;
}
public int dayOfWeek(){
int y=year;
int m=month;
if(m==1 ||m==2){
y--;
m+=12;
}
return (y + y / 4 - y / 100 + y / 400 + (13 * m + 8) / 5 + date) % 7;
}
//与日期d相等吗
public boolean equalTo(Day1 d){
return year==d.year&&month==d.month&&date==d.date;
}
public String toString(){
String[] wd={"日","一","二","三","四","五","六"};
return String.format("%04d年%02d月%02d日(%s)",
year,month,date,wd[dayOfWeek()]);
}
}
dayOfWeek:计算星期;equalTo:判断是否相等;toString:返回字符串
类类型的字段
基本类型:int、double、boolean,直接存储值
类类型:string或Day等自定义类,存储的是对象的引用
需要实例化即需要通过new创建对象:
this.purchaseDay=new Day(purchaseDay)
不要返回引用类型的字段值(类类型),因为外部能通过该引用值间接改写值

“字符串”+类类型变量的运算中,回自动调用".toString()"
十、类变量和类方法
类变量:在字段声明时加上static,就是类中所有实例共享的数据,也称为静态字段
eg:private static int counter=1 //标识编号
public int getId(){return id;} //获取标识编号
类变量可以通过“类名.字段名"或”类类型变量名.字段名"进行访问
Id a = new Id()
访问:Id.counter() 或a.counter
一个源程序不可以声明两个以上的public类
Math类:定义了自然对数E和圆周率PI的类变量,都是double型的常量,声明都加上final
//java.lang.Math
public final class Math{
//最接近自然对数的底数e的double值
public static final double E=2.78
·····}
import java.util.Scanner;
class Circle{
public static void main(String[] args){
Scanner stdIn=new Scanner(System.in);
System.out.print("半径:");
double r=stdIn.nextDouble();

如果常量需要提供给类的使用者,需要以public且final的类变量形式进行提供
类方法



类方法的调用


因为main是类方法,所以如果想调用max方法,也得将其声明为类方法
类初始化器和实例初始化器


当以某种方式初次使用类时,该类的类初始化器就执行完毕了
十一、包:将类集中封装起来


单类型导入声明:import 完全限定名

按需类型导入声明:(不可过多使用)
import 包名.*
如import java.util.*;

在按需类型导入中,不可以导入不同层次的包中的类型名称
包的声明


十二、类的派生和多态
继承

例子:

super(),调用超类的构造函数

被折叠的 条评论
为什么被折叠?



