千鋒教育Java入門全套視頻教程(java核心技術(shù),適合java零基礎(chǔ),Java

第三周周四7.6
創(chuàng)建數(shù)組
存儲5個學(xué)生對象(姓名,年齡)
輸出年齡大于23的人
```java
package com.qf.zhousi;
public class Demo01 {
public static void main(String[] args) {
Student[] stu1= new Student[5];
stu1[0] = new Student("張三",18);
stu1[1] = new Student("李四",14);
stu1[2] = new Student("王五",22);
stu1[3] = new Student("趙六",34);
stu1[4] = new Student("劉二",26);
for(int i=0;i<5;i++) {
if(stu1[i].age>23)
System.out.println(stu1[i].name);
}
}
}
//學(xué)生類
class Student{
//屬性
String name;
int age;
//方法
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
```
晨考錯題
---------------------------------------------------------------------------------------
## 代碼塊
定義在方法中的代碼塊叫做局部代碼塊
自動執(zhí)行無需手動調(diào)用
能縮小數(shù)據(jù)的訪問范圍
```java
public class Demo01
public static void main(string[]args){
??//局部變星
??int num 10;
??System.out.println("HelloWorld001");
??system.out.println("HelloWorld002");
??System.out.println("HelloWorld003");
??//局部代碼塊
??//局部代碼塊可以訪問局部變量
?? System.out.println("Helloworld004===>"+num);
??//局部代碼塊中的變量
??int number 10000;
??//方法中的代碼不能訪問局部代碼塊中的變量
??//System.out.println("HelloWorld004===>"+number);
??System.out.println("HelloWorld005");
??system.out.println("Helloworld006");
??System.out.println("HelloWorld007");
```
**構(gòu)造代碼塊**
也稱為動態(tài)代碼塊
定義位置類中方法外,和構(gòu)造方法同級別
執(zhí)行時間早于構(gòu)造方法
加載時間和成員變量相同
可以把構(gòu)造方法中相同的代碼提取出來放入構(gòu)造代碼塊中
```java
class Consumer{
??String name;
??String hobby;
??{
??//動態(tài)代碼塊【構(gòu)造代碼塊】
??//System.out,println("動態(tài)代碼塊---);
??System.out.println("歡迎光臨,大爺里面請");
??}
??public Consumer(){
??public Consumer(string name){
??public Consumer(string name,string hobby){
??}
}
```
**靜態(tài)代碼塊**
使用static修飾的代碼塊成為靜態(tài)代碼塊
靜態(tài)代碼塊在類加載的時候就加載了
創(chuàng)建多個對象過程中只執(zhí)行一次
適合驅(qū)動加載等只執(zhí)行一次的內(nèi)容
靜態(tài)代碼塊只能訪問靜態(tài)數(shù)據(jù)
**程序中運行的順序**
啟動程序
開啟父類加載
父類靜態(tài) 屬性/代碼塊
開啟子類加載
子類靜態(tài) 屬性/代碼塊
進(jìn)入子類構(gòu)造
由子類構(gòu)造直接進(jìn)入父類構(gòu)造(因為父類構(gòu)造寫在子類構(gòu)造的第一行)
父類構(gòu)造代碼塊
父類構(gòu)造方法(中的局部代碼塊)
子類構(gòu)造代碼塊
子類構(gòu)造方法(中的局部代碼塊)

## 類中的內(nèi)容:
實例屬性
靜態(tài)屬性
靜態(tài)代碼塊
構(gòu)造代碼塊
構(gòu)造方法
內(nèi)部類
方法
## final
final類不能被繼承,沒有子類,其中一般都是不可改變的規(guī)則
final方法是最終方法可以被繼承不能被重寫
final變量
final修飾的基本類型變量,值不能改變,只能賦值一次
final修飾的引用類型對象,里面的值可以修改,但是地址值不能改變
final定義成員變量/實例變量
可以在創(chuàng)建時賦值,可以在構(gòu)造代碼快中賦值,可以在方法中賦值,只要在對象創(chuàng)建之前賦值就可以,只能賦值一次不能修改。
靜態(tài)最終變量是在類加載完之前賦值
# 接口
使用interface聲明的內(nèi)容稱為接口
接口是一種規(guī)范:
表明了能做的事情,沒有具體實現(xiàn)的代碼
**定義接口:**
```java
interface 接口名{
? 屬性
? ?
? 方法
}
```
**接口中的屬性**
公共開的 并且 是靜態(tài)的?最終的
**方法**
都是公開抽象方法
默認(rèn)使用 public abstract 修飾
JDk8之后可以書寫static或者Default修飾的方法(沒人用過)
**接口和抽象類對比**
?相同:
都能生產(chǎn)字節(jié)碼文件
都擁有Object中的屬性和方法?
都不能自己創(chuàng)建對象
都可以聲明為引用類型
不同:
抽象類中可以定義實例屬性、實例方法、構(gòu)造方法、代碼塊、抽象方法等
接口中屬性都是靜態(tài)抽象公開的
方法都是公開抽象的
**常量接口**
把項目中所有的常量都收集出來放入同一個接口文件中
統(tǒng)一定義和管理
## 課后作業(yè):
1、編寫代碼驗證裝箱和拆箱【類型轉(zhuǎn)換】
```java
package com.qf.day14homework;
public class Demo01 {
public static void main(String[] args) {
/**
*?1、編寫代碼驗證裝箱和拆箱【類型轉(zhuǎn)換】
*/
Person student1=new Students();//裝箱
student1.eat();//調(diào)用自己的方法
Students student2=(Students)student1;//拆箱可以調(diào)用自己的方法
student2.study();//拆箱調(diào)用自己的學(xué)習(xí)方法
}
}
//父類
class Person{
void eat() {
System.out.println("吃飯");
}
}
//子類
class Students extends Person{
void study() {
System.out.println("學(xué)習(xí)");
}
}
```
2、驗證static修飾各種數(shù)據(jù)的特點
```java
package com.qf.day14homework;
public class Demo02 {
public static void main(String[] args) {
/**
* 2、驗證static修飾各種數(shù)據(jù)的特點
*/
Animal01.eat();//靜態(tài)的方法可以直接調(diào)用
Animal01.names="二狗";//靜態(tài)屬性可以直接調(diào)用,修改后全部都受影響
Animal01 dog02=new Dog01();
System.out.println("實例屬性:"+dog02.name);
System.out.println("靜態(tài)屬性:"+dog02.names);
Dog01 dog01=new Dog01();
dog01.names="小奶狗";//修改靜態(tài)屬性
System.out.println("父類調(diào)用靜態(tài)屬性names:"+Animal01.names);
System.out.println("子類02,沒有調(diào)用dog02修改靜態(tài)屬性names:,此時的names為:"+dog02.names);
System.out.println("子類01,調(diào)用修改靜態(tài)屬性names:"+dog01.names);
}
}
//父類
class Animal01{
//實例方法
String name = "張三";
//靜態(tài)屬性
static String names = "狗蛋";
//靜態(tài)代碼塊
static {
System.out.println(names+"的靜態(tài)代碼塊");
}
//構(gòu)造代碼塊
{
System.out.println("構(gòu)造代碼塊");
}
//構(gòu)造器
public Animal01(String name) {
this.name = name;
}
public Animal01() {
}
//靜態(tài)方法
static void eat() {
System.out.println(names+"在吃飯");
}
//公開方法
void sleep(){
System.out.println(name+"在睡覺");
}
}
//子類
class Dog01 extends Animal01{
}
```
3、編寫代碼,驗證類中個各種元素加載的時機
```java
package com.qf.day14homework;
public class Demo03 {
public static void main(String[] args) {
/**
* 3、編寫代碼,驗證類中個各種元素加載的時機
*/
//創(chuàng)建對象
Son son01=new Son();
}
}
//父類
class Fater{
//實例屬性
String name="a";
//靜態(tài)屬性
static int age=1;
//靜態(tài)代碼塊
static {
System.out.println("父類靜態(tài)屬性:"+age);
System.out.println("父類靜態(tài)代碼塊");
eat();
}
//構(gòu)造代碼塊
{
sleep();
System.out.println("父類構(gòu)造代碼塊");
}
//構(gòu)造器
public Fater() {
System.out.println("父類構(gòu)造器"+name);
}
//靜態(tài)方法
static void eat() {
System.out.println("父類靜態(tài)方法");
}
//方法
void sleep() {
System.out.println("父類方法");
}
}
//子類
class Son extends Fater{
//實例屬性
String names="a";
//靜態(tài)屬性
static int ages=1;
//靜態(tài)代碼塊
static {
System.out.println("子類靜態(tài)屬性:"+ages);
System.out.println("子類靜態(tài)代碼塊");
eat();
}
//構(gòu)造代碼塊
{
sleep();
System.out.println("子類構(gòu)造代碼塊");
}
//構(gòu)造器
public Son() {
System.out.println("子類構(gòu)造器"+names);
}
//靜態(tài)方法
static void eat() {
System.out.println("子類靜態(tài)方法");
}
//方法
void sleep() {
System.out.println("子類方法");
}
}
```

4、汽車有很多功能
飛行【接口】
過河【接口】
越野【接口】
汽車類Auto【抽象類】
start
stop
run
創(chuàng)建Auto的子類,選擇性的實現(xiàn)上面的接口,使用多態(tài)方式創(chuàng)建對象,展示信息
```java
package com.qf.day14homework;
public class Demo04 {
public static void main(String[] args) {
/**
* 4、汽車有很多功能
飛行【接口】、過河【接口】、越野【接口】、汽車類Auto【抽象類】
方法:start、stop、run
創(chuàng)建Auto的子類,選擇性的實現(xiàn)上面的接口,使用多態(tài)方式創(chuàng)建對象,展示信息
*/
//接口創(chuàng)建AiCar的對象
Fly flyCar =new AiCar();
//調(diào)用接口指定的方法
flyCar.fly();
//向上轉(zhuǎn)型
AuTo autoCar = new NewEnergyVehicles();
//調(diào)用方法
autoCar.start();
autoCar.run();
autoCar.stop();
//創(chuàng)建子類對象
AiCar aiCar = new AiCar();
//調(diào)用接口方法
aiCar.fly();
aiCar.acrossTheRiver();
aiCar.crossCountry();
//調(diào)用父類方法
aiCar.stop();
}
}
//飛行接口
interface Fly{
//抽象方法
void fly();
}
//過河接口
interface AcrossTheRiver{
//抽象方法
void?acrossTheRiver();
}
//越野接口
interface CrossCountry{
//抽象方法
void?crossCountry();
}
//父類汽車類
abstract class AuTo{
//方法1
abstract void start();
//方法2
abstract void stop();
//方法3
abstract void run();
}
//子類新能源汽車
class NewEnergyVehicles extends AuTo implements AcrossTheRiver{
@Override
void start() {
System.out.println("啟動新能源汽車");
}
@Override
void stop() {
System.out.println("新能源汽車停車");
}
@Override
void run() {
System.out.println("新能源汽車正在行駛");
}
@Override
public void acrossTheRiver() {
System.out.println("新能源汽車能夠過河");
}
}
//子類人工智能汽車
class AiCar extends AuTo implements AcrossTheRiver,CrossCountry,Fly{
@Override
public void fly() {
System.out.println("人工智能汽車能飛");
}
@Override
public void crossCountry() {
System.out.println("人工智能汽車能夠越野");
}
@Override
public void acrossTheRiver() {
System.out.println("人工智能汽車能過河");
}
@Override
void start() {
System.out.println("人工智能啟動");
}
@Override
void stop() {
System.out.println("人工智能汽車成功懸停");
}
@Override
void run() {
System.out.println("人工智能汽車正在全速前進(jìn),車速達(dá)到666km/h");
}
}
```
5、手機有很多接口
耳機接口
SD卡接口
SIM卡接口
電源接口
喇叭接口
編寫實現(xiàn)類手機展示手機接口的功能
```java
package com.qf.day14homework;
import java.util.Scanner;
public class Demo05 {
//聲明全局變量
public static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
/**
* 5、 手機有很多接口
???耳機接口
?SD卡接口
?SIM卡接口
???電源接口
???喇叭接口
???編寫實現(xiàn)類手機展示手機接口的功能
*/
//聲明
//創(chuàng)建手機類的對象
Phone phone = new Phone();
System.out.println("請問你是否開機:【1.是/2.否】(輸入別的無效)");
int number=input.nextInt();
if(number==2) {//不開機就結(jié)束
return;
}else if(number==1) {
phone.swiTch=true;
}
System.out.println("你的手機已經(jīng)開機,您有以下功能可以使用");
out:while(true) {
System.out.println("-------------------------------");
System.out.println("1.耳機接口;2.SD卡接口;3.SIM卡接口;4.電源;5.調(diào)節(jié)音量");
//輸入用戶選項
int num =input.nextInt();
switch(num) {
case 1://選擇1 調(diào)用手機的耳機接口
phone.headset(phone.headset);
break;
case 2://調(diào)用SD卡
phone.sd(phone.sd);
break;
case 3://SIM
phone.SIM(phone.sim);
break;
case 4://電源
phone.powerSupply();
if(phone.swiTch==false) {
System.out.println("關(guān)機成功");
break out;
}else?
break;
case 5://調(diào)節(jié)音量
phone.horn();
break;
default:
System.out.println("您的輸入有誤,請重新輸入。");
break;
}
}
}
}
//耳機接口
interface Headset{
//屬性
static boolean headset=false;
//耳機
void headset(boolean headset);
}
//SD卡接口
interface SD{
//屬性
static boolean sd=false;
//SD
void sd(boolean sd);
}
//SIM接口
interface SIM{
static boolean sim=false;
//SIM
void SIM(boolean sim);
}
//電源接口
interface PowerSupply{
//powerSupply
void powerSupply();
}
//喇叭接口
interface Horn{
//horn
void horn();
}
//手機類
class Phone implements Headset,Horn,PowerSupply,SD,SIM{
//電源屬性
static boolean swiTch = false;
//音量屬性
static int voice=0;
@Override
public void SIM(boolean sim) {
//聲明
Scanner input = new Scanner(System.in);
System.out.println();
System.out.println("你已經(jīng)進(jìn)入SIM卡接口");
if(sim) {
System.out.println("您現(xiàn)在插有SIM卡,是否需要移除【1.是;2.否】(如果輸入其他則直接返回上一個界面)");
int a=input.nextInt();
if(a==1) {
System.out.println("您已經(jīng)移除成功");
sim=false;
}else {//不是1直接返回
System.out.println("好的,返回上個界面");
return;
}
}else {
System.out.println("您現(xiàn)在還未插SIM卡,是否需要插入【1.是;2.否】(如果輸入其他則直接返回上一個界面)");
int a=input.nextInt();
if(a==1) {
System.out.println("您已經(jīng)成功插入SD卡");
sim=true;
}else {//不是1直接返回
System.out.println("好的,返回上個界面");
return;
}
}
}
@Override
public void sd(boolean sd) {
//聲明
Scanner input = new Scanner(System.in);
System.out.println();
System.out.println("你已經(jīng)進(jìn)入SD卡接口");
if(sd) {
System.out.println("您現(xiàn)在插有SD卡,是否需要移除【1.是;2.否】(如果輸入其他則直接返回上一個界面)");
int a=input.nextInt();
if(a==1) {
System.out.println("您已經(jīng)移除成功");
sd=false;
}else {//不是1直接返回
System.out.println("好的,返回上個界面");
return;
}
}else {
System.out.println("您現(xiàn)在還未插SD卡,是否需要插入【1.是;2.否】(如果輸入其他則直接返回上一個界面)");
int a=input.nextInt();
if(a==1) {
System.out.println("您已經(jīng)成功插入SD卡");
sd=true;
}else {//不是1直接返回
System.out.println("好的,返回上個界面");
return;
}
}
}
@Override
public void powerSupply() {
//聲明
Scanner input = new Scanner(System.in);
System.out.println();
if(swiTch==true) {
System.out.println("您現(xiàn)在是開機狀態(tài)是否關(guān)機?【1.是;2.否】(如果輸入其他則直接返回上一個界面)");
int a=input.nextInt();
if(a==1) {
System.out.println("您的手機即將關(guān)機");
swiTch=false;
}else {
System.out.println("返回主界面");
}
}else {
return;
}
}
@Override
public void horn() {
//聲明
Scanner input = new Scanner(System.in);
System.out.println();
System.out.println("您現(xiàn)在的音量為:"+voice+",你可以調(diào)節(jié)音量,你要增大還是減?。骸?.增大;2.減小;最大音量為6】(如果輸入其他則直接返回上一個界面)");
int a =input.nextInt();
if(a==1&&voice<=5) {
voice++;
System.out.println("你現(xiàn)在的音量為:"+voice);
}else if(a==2&&voice>0) {
voice--;
System.out.println("你現(xiàn)在的音量為:"+voice);
}else {
System.out.println("好的,返回主界面");
return;
}
}
@Override
public void headset(boolean headset) {
//聲明
Scanner input = new Scanner(System.in);
System.out.println();
if(headset) {
System.out.println("您已經(jīng)插入耳機");
System.out.println("您是否要拔掉耳機:【1.拔掉耳機;2.不拔】(如果輸入其他則直接返回上一個界面)");
int a =input.nextInt();
if(a==1) {
System.out.println("您已經(jīng)成功拔掉耳機");
headset=false;
}
else {//如果不操作就退出耳機則直接退出
System.out.println("好的退出此界面!");
return;
}
}else {
System.out.println("您現(xiàn)在還沒插入耳機是否要插入耳機:【1.插入耳機;2.算了不用了】(如果輸入其他則直接返回上一個界面)");
int a = input.nextInt();
if(a==1) {
System.out.println("好的您已經(jīng)插入耳機成功");
headset=true;
}else {
System.out.println("好的退出此界面!");
return;
}
}
}
}
```