变量、类型、赋值、运算符等等:
https://blog.csdn.net/common77zwq/article/details/81988676
1.概念:
面向对象程序设计OOP、类class、构造、实例、封装、实例域、方法、状态
对象的3各主要特性:
行为、状态、标识
类之间的关系:依赖、聚合、继承
2.Date,LocalDate用法:
import java.util.Date;//不鼓励使用Date
import java.time.LocalDate;
import.java.time.*;
https://www.cnblogs.com/jtools/p/6502999.html
3.日期:
LocalDate date = LocalDate now();//构造LocalDate类对象
LocalDate newYearsEve = LocalDate.of(1999,12,31);//构造特定日期
int year = newYearsEve.getYear();//1999
int month = newYearsEve.getMonthValue();//12
int day = newYearsEve.getDayOfMonth();//31
LocalDate aThousandDaysLater = newYearsEve.plusDays(1000);//加上1000天之后的新日期
date = date.minusDays(today-1);//将date设置为这个月的第一天
DaysOfWeek weekday = date.getDaysOfWeek();//星期几
int value =weekday.getValue();//1=Monday,...,7=Sunday
4.Employee类:
源文件的文件名必须与public类的名字一致。
一个源文件中只能有一个公有(类)public,可以有多个非共有类。
构造器:
*构造器与类同名;
*每个类可以有一个以上的构造器;
*构造器可以有0、1或多个参数;
*构造器没有返回值;
*构造器总是伴随着new操作一起调用;//Employee[] staff = new Employee("nengxiaoyuan",10000,2020,5,20)
*不要在构造器中定义与实例域重名的局部变量。
5. public:任何类的任何方法都可以调用这些方法;
private:只有该类自身的方法能够访问这些实例域;
6. 方法:用于操作对象以及存取它们的实例域,一个方法可以访问所属类的所有对象的私有数据。
隐式参数:出现在方法名前的类对象,用this表示;
显式参数:方法名后面括号中的数值
访问器方法(域访问器):只反馈实例域值
*不要编写返回引用可变对象的访问器方法;
*LocalDate类不可变(没有更改器方法),Date类可变;
*如果需要返沪一个可变对象的引用,先进行克隆.
7.final实例域(公有常量):用于基本类型域、不可变类域 //按常量定义理解
8.static静态域:属于类,不属于对象,每个类中只含有一个
9.静态常量:public static final double PI = 3.1415926...
System.out
10.静态方法:不能向对象实施操作的方法,如Math.pow,不需要使用对象调用静态方法
main方法也是一个静态方法
两种情况下使用静态方法:
一个方法不需要访问对象状态,其所需参数都是通过显式参数提供;
一个方法只需要访问类的静态域。
11.工厂方法:形如LocalDate.now、LocalDate.of、NumberFormat类等
12.方法参数:Java程序总是按值调用(方法不能修改传递给它的任何参数变量的内容)
方法参数的两种类型:
基本数据类型(数值、布尔)
对象引用
*一个方法不能修改一个基本数据类型的参数(数值型或布尔型)
*一个方法可以改变一个对象参数的状态;
*一个方法不能让对象参数引用一个新的对象。
13. 重载:多个方法有相同的名字、不同的参数
*必须明确地初始化方法中的局部变量,否则将会被自动初始化为默认值0、false、null
*很多类都包含一个无参数的构造函数
*若编写一个类时没有编写构造器,则系统会提供一个无参数构造器
*new ClassName();//构造该实例之前,需要提供一个默认的构造器:public ClassName() {}
14.显式域初始化:
执行构造器之前,先执行赋值操作
初始值不一定是常量
15.如果构造器的第一个语句形如this(...),则为调用同一个类的另一个构造器
public Employee(String n, double s) { name = n; salary = s; } public Employee(double s) { // calls the Employee(String, double) constructor this("Employee #" + nextId, s); }
16.初始化数据域的方法:
*在构造器中设置值;
*在声明中赋值;
*初始化块(建议放在域定义之后)
*调用构造器的具体步骤:
1 所有数据域被初始化为默认值(0、 false、 null)
2 按照在类声明中出现的次序,一次执行所有域初始化语句和初始化块
3 若构造器第一行调用了第二个构造器,则执行第二个构造器主体
4 执行这个构造器的主体
*静态初始化块:将代码放在一个块中,并标记为static
// static initialization block static { var generator = new Random(); // set nextId to a random number between 0 and 9999 nextId = generator.nextInt(10000); }
17.Java有自动的垃圾回收站,不需要人工回收内存,所以Java不支持析构器
18.Java允许使用包package将类组织起来:使用包来确保类名的唯一性,嵌套的包之间没有任何关系
例如:java.long、 java.util、 java.net
*一个类可以使用所属包中的所有类 和 其他包中的公有类
*两种方式访问另一个包中的公有类:
1 在每个类名前添加完整的包名(不提倡,麻烦)
2 使用import语句(首推),import语句应位于源文件的顶部、package语句的后面
19.在Eclipse中,使用菜单项Source->Organize Imports。package语句会自动扩展指定的导入列表
20.import不仅可以导入类,还可以导入静态方法和静态域
import static java.lang.System.*; import static java.lang.System.out;
21.如果没有指定public、private,该部分可以被同一个包中的所有方法访问
22.注释:以/**开始,以*/结束
-每个/**...*/文档注释在标记之后紧跟着*格式文本,标记由@开始,如@author,@param
-类注释必须放在import语句之后,类定义之前
-每一个方法注释必须在所描述的方法之前
23.类设计技巧:
1 一定要保证数据私有
2 一定要对数据初始化
3 不要在类中使用过多的基本类型
4 不是所有的域都需要独立的域访问器和域更改器
5 将职责过多的类分解
6 类名和方法名要能够提现他们的职责
7 优先使用不可变的类