java第九天学习笔记
一、面向对象(长方形案例练习)(掌握)
A:案例演示
需求:
定义一个长方形(Rectangle)类,定义求周长(length)和面积(area)的方法,
然后定义一个测试类Test,进行测试。
public static void main(String[] args) {
Rectangle rectangle = new Rectangle();
rectangle.setWidth(50);
rectangle.setHeight(20);
double area = rectangle.getArea();
double perimeter = rectangle.getPerimeter();
System.out.println("面积:"+area);
System.out.println("周长:"+perimeter);
System.out.println("========================================");
Rectangle rectangle1 = new Rectangle(20, 60);
System.out.println("面积:" + rectangle1.getArea());
System.out.println("周长:" +rectangle1.getPerimeter());
}
面向对象(员工类案例练习)(掌握)
A:案例演示
需求:定义一个员工(Employee)类,自己分析出几个成员,然后给出成员变量,构造方法,getXxx()/setXxx()方法,
以及一个显示所有成员信息的方法。并测试。
###面向对象(static关键字的引入)(掌握)
A:案例演示
通过一个案例引入static关键字。
人类:Person。每个人都有国籍,中国。
static:静态的 可以修饰成员变量也可以修饰成员方法
static修饰成员变量,此变量就为一个共享变量,会被该类的 所有对象所共享。
面向对象(static的内存图解)(理解)
A:画图演示: 带有static的内存图
面向对象(static关键字的特点)(掌握)
A:static关键字的特点
a:随着类的加载而加载
b:优先于对象存在 对象是你后来new出来
c:被类的所有对象共享
举例:咱们班级的学生应该共用同一个班级编号。
其实这个特点也是在告诉我们什么时候使用静态?
如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。
举例:
饮水机(用静态修饰)
水杯(不能用静态修饰)
d:可以通过类名调用
其实它本身也可以通过对象名调用。
推荐使用类名调用。
静态修饰的内容一般我们称其为:与类相关的,类成员
B:案例演示
static关键字的特点
//对于静态所修饰的成员,推荐使用类名调用。
//被静态修饰的成员属于类,推荐使用类名直接调用。无需new对象来调用。当然对象可以调用,但是不推荐。
面向对象(static的注意事项)(掌握)
A:static的注意事项
a:在静态方法中是没有this关键字的
如何理解呢?
静态是随着类的加载而加载,this是随着对象的创建而存在。
静态比对象先存在。
b:静态方法只能访问静态的成员变量和静态的成员方法
简单记:静态只能访问静态,非静态可以访问静态的也可以访问非静态的
B:案例演示
static的注意事项
class Student{
String name="张三";
static int num=100;
//非静态方法中,既能访问静态的,也可以访问非静态的
public void show(){
System.out.println(name);
System.out.println(num); }
//静态方法
//静态的方法中,访问不到非静态的数据,静态方法中只能访问静态修饰的成员。
//静态修饰的成员,随着类的加载而加载,优先于对象存在。先存在,访问不到后存在的。
public static void test() {
// System.out.println(name); 访问不到
System.out.println(num); }
//非静态的方法中,既可以调用非静态方法,也可以调用静态
public void hehe(){
System.out.println("呵呵");
this.show();
test(); }
//静态方法中,只能访问静态变量,也只能调用静态方法
public static void haha() {
System.out.println("哈哈");
System.out.println(num);
// show();
test(); }
public static void haha2() {
System.out.println("哈哈2");
System.out.println(num);
//静态方法中不能出现this
//this 代表一个对象,对象是后来才有的,静态是优先于对象而存在的 。
// System.out.println(this.name);
// this.show(); }
}
面向对象(静态变量和成员变量的区别)(理解)
A:所属不同
静态变量属于类,所以也称为类变量
成员变量属于对象,所以也称为实例变量(对象变量)
B:内存中位置不同
静态变量存储于方法区的静态区
成员变量存储于堆内存
C:内存出现时间不同
静态变量随着类的加载而加载,随着类的消失而消失
成员变量随着对象的创建而存在,随着对象的消失而消失
D:调用不同
静态变量可以通过类名调用,也可以通过对象调用,推荐使用类名调用
成员变量只能通过对象名调用
局部变量和成员变量的区别?
//成员变量和静态变量的的区别
//成员变量属于对象,随着对象的创建而产生,随着对象的销毁而销毁 成员变量 也叫做实例变量,对象变量
//静态变量属于类。随着类的加载而产生的,随着类的销毁而销毁 静态变量也叫做类变量
//成员变量,存储在堆内存,静态变量存储在方法区的静态区。
//成员变量,通过对象来调用。 静态变量,通过类名来调用,当然静态变量可以通过对象来调用。但是不推荐。
###面向对象(如何使用JDK提供的帮助文档)(掌握)
A:找到文档,打开文档
B:点击显示,找到索引,出现输入框
C:你应该知道你找谁?举例:Scanner
D:看这个类的结构(需不需要导包)
java.lang包下的内容不需要我们手动导入
其它包下的内容需要我们手动导入
类 API文档
成员变量 字段摘要
构造方法 构造方法摘要
成员方法 方法摘要
E:看这个类的说明(简单的了解一下)
F:看开始版本
G:看构造方法
H:看成员方法
看左边:
是否是static的,如果是我们就不需要创建对象,直接可以使用类名调用该方法;看返回值,返回值是什么我就使用什么接收
看右边:
看参数列表: 参数的个数 , 参数的类型 ; 要什么参数我是用的时候,就传递什么参数
I:然后使用
面向对象(学习Math类的随机数功能)(掌握)
打开JDK提供的帮助文档学习
A:Math类概述
类包含用于执行基本数学运算的方法
B:Math类特点
由于Math类在java.lang包下,所以不需要导包。
没有构造方法,因为它的成员全部是静态的。
C:获取随机数的方法
public static double random():返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
D:我要获取一个1-100之间的随机数,肿么办?
int number = (int)(Math.random()*100)+1;
public static void main(String[] args) {
//查看JDK文档,Java给我们提供了一些编写好的类,我们要看这个类怎么使用可以查看JDK文档
// Math是一个关于数学运算方面的一个类,他的成员变量和成员方法,全部是static修饰的,使用类名就可以直接调用。
//Student.show();
//随机生成一个小数 范围 大于 0 小于 1
/* for (int i = 0; i < 100; i++) {
double num = Math.random();
System.out.println(num); }*/
//我们想要生成随机整数 范围 1---100 包含1 也包含 100
//int num = (int) ((Math.random()*100)+1);
for (int i = 0; i < 1000; i++) {
int num = (int) ((Math.random() * 100) + 1);
System.out.println(num); }
}
###面向对象(猜数字小游戏案例)(理解)
A:案例演示: 需求:猜数字小游戏(数据在1-100之间)
public static void main(String[] args) {
int num = (int) ((Math.random() * 100) + 1);
//不知道这个循环次数,我们while 但是你要知道这个循环结束的条件
//你给我写成给用户5次机会,而且还得提示剩余次数。
Scanner sc = new Scanner(System.in);
while (true){
System.out.println("请猜一个整数 1---100");
int unum = sc.nextInt();
if (unum > num) {
System.out.println("猜大了");
} else if (unum < num) {
System.out.println("猜小了");
} else {
System.out.println("恭喜你!猜对了");
break;}
}
}
static int num=100;
double aa=200;
//主方法是静态修饰的,主方法里面你可以直接调用静态方法,
public static void main(String[] args) {
MyTest2.show();
show();
//show2();
MyTest2 myTest2 = new MyTest2();
myTest2.show2();
System.out.println(num);
System.out.println(myTest2.aa);
//主类,他只是为程序提供一个入口,一般不会在主类里面提供成员变量,成员方法 }
public static void show() {
System.out.println("show方法"); }
public void show2() {
System.out.println("show方法222"); }
二、面向对象(代码块的概述和分类)(掌握)
A:代码块概述
在Java中,使用{}括起来的代码被称为代码块。
B:代码块分类
根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解)。
C:常见代码块的应用
a:局部代码块
在方法中出现;限定变量生命周期,及早释放,提高内存利用率
b:构造代码块
在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
c:静态代码块
在类中方法外出现,加了static修饰
在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次。
面向对象(代码块的面试题)(掌握)
A:看程序写结果
class Student {
static {
System.out.println("Student 静态代码块");} //3
{
System.out.println("Student 构造代码块");} //4 //6
public Student() {
System.out.println("Student 构造方法");} //5 //7
}
class StudentDemo {
static {
System.out.println("StudentDemo的静态代码块");} //1
public static void main(String[] args) {
System.out.println("我是main方法"); //2
Student s1 = new Student();
Student s2 = new Student();}
}
public static void main(String[] args) {
//代码块:就是被一对{}所括起来的内容
//代码块根据定义位置的不同可以分为:局部代码块,构造代码块,静态代码块 同步代码块(后面说)
//定义在方发中的代码块
int num2 = 20;{
/* a:局部代码块 在方法中出现;限定变量生命周期,及早释放,提高内存利用率*/
int num = 20;
Scanner scanner = new Scanner(System.in);
System.out.println("局部代码块");
System.out.println(num2); }
System.out.println("============================");
//我们在创建对象时,就会调用构造代码块。而且构造代码块,是优先于构造方法执行的。
//每次创建对象 ,构造代码代码块都会执行。
Student student = new Student(); }
public Student() {
System.out.println("构造方法执行了"); }
//跟构造方法同级的代码块
{ System.out.println("构造代码块执行了"); }
//静态代码块
//静态修饰的,是随着类的加载而加载 Student.class
//用于给类进行初始化,在加载的时候就执行,并且只执行一次。
static {
System.out.println("我们在类加载的时候,就可以在静态代码块里面,编写代码,做一些准备工作。");
System.out.println("静态代码块"); }