JAVA-Day4

小類型向大類型轉換

不同類型的數據經常出現相互轉換的現象.

1, 在Java中小類型向大類型的轉換會自動完成, 即 不需要程序員編寫額外的代碼, 由JVM負責, ?自動類型轉換也叫"隱式類型轉換"

2, 自動轉換的規則: 符號位會自動擴展, 最高位負數補1, 正數補0.

3, 自動類型轉換包含以下情況: (1):byte->short->int->long->float->double ? (2):int和char類型的數據在某些情況下可以自動相互轉換

4, 整數到浮點數轉換會損失精確度

代碼例: int i = -2;

long l = i;

System.out.println(i+":"+Integer.toBinaryString(i));//-2:11111111111111111111111111111110

//long類型輸出的值, 高于32位的自動補1, 其余不變

System.out.println(l+":"+Long.toBinaryString(l));//-2:1111111111111111111111111111111111111111111111111111111111111110

5, 小類型向大類型轉換一般情況下是安全的

6, 當小類型的精度高于大類型時要注意精度丟失的隱患.

int類型轉換為float類型:

int i = 0x1000001;

float f = i;

//float類型變量在存儲int類型的變量時候丟失了最后一位: 原因是:float類型的位數是23位

System.out.println(Integer.toBinaryString(i)+":"+i);//1000000000000000000000001:16777217

// 因為Float里面沒有這個轉成二進制的方法(toBinaryString), 所以需要先強制轉換為int類型,然后再轉成二進制

System.out.println(Integer.toBinaryString((int)f)+":"+f);//1000000000000000000000000:1.6777216E7

long類型轉換為double類型

當小類型向大類型轉換時候,如果小類型的精度值大于大類型, 要注意精度丟失的問題

大類型向小類型轉換

1, 強轉類型轉換-簡稱強轉

2, 強制類型類型轉換時, 要注意邊界數風險問題

int類型與char類型的轉換

Java對char類型的數據在底層是按int類型來處理的

int類型與char類型在賦值時可自動轉換

代碼例: char c = 65;

int i = 'B';

System.out.println(c+","+i);//A,66

字符類型的數據可進行數值計算:?

代碼例: char c = 'A';

int i = c+1;

c = (char) (c+1);

System.out.println(c+":"+i);//B:66

通過args數組獲取數據

通過main方法的args數組可以從控制臺獲取一組字符串數據

案例: 給main方法的args數組輸入兩個整數, 對這兩個整數進行四則運算

注意: 在運行前先要給args數組賦值: run-run configurations-arguments-賦值即可

public static void main(String[] args) {

//parseInt把字符串轉換為int類型

int a = Integer.parseInt(args[0]);

int b = Integer.parseInt(args[1]);

System.out.println(a+"+"+b+"="+(a+b));//10+3=13

System.out.println(a+"-"+b+"="+(a-b));//10-3=7

System.out.println(a+"*"+b+"="+a*b);//10*3=30

System.out.println(a+"/"+b+"="+a/b);//10/3=3

}

通過Scanner從控制臺獲取數據

1, Scanner類用于掃描從控制臺輸入的數據, 可以接收字符串和基本數據類型的數據

2, Scanner類位于java.util.Scanner包中

Scanner類的常用方法

1, String next(); ?作用: 接收控制臺輸入的一個字符串, 以空格或回車作為一次數據輸入的結束

2, String nextLine(); ?作用: 接收控制臺輸入的一個字符串,以回車作為輸入的結束, 所以可以接收空格作為字符串的一部分

3, int nextInt(); 作用: 接收控制臺輸入的一個int類型的數據

4, double nextDouble(); 作用: 接收控制臺輸入的一個double類型的數據

5, boolean nextBoolean(); 作用: 接收控制臺輸入的一個boolean類型的數據

6, 輸入char類型的數據 : ?Scanner類型沒有提供直接輸入char類型的方法, 可以通過charAt()方法從next()或nextLine()獲取輸入的字符

char String.charAt(int index);? 作用: 從字符串中獲取指定下表的字符, 下標從0開始.? ? ? ? ? ? ? ? 例如:"abc".charAt(0)的結果是a.? "abc".charAt(1)的結果是b ? ??

例如; next().charAt(0); 從控制臺輸入的字符串中獲取第一個字符

通過Scanner從控制臺接收數據的步驟:?

step1: 創建Scanner類的一個對象? 示例: Scanner scanner = new Scanner(System.in);//System.in是用來指定scanner從控制臺輸入的數據

step2, 通過scanner調用next等方法, 接收控制臺輸入的數據. ?示例: System.out.println("姓名: "); String name = scanner.next();

代碼例如: public static void main(String[] args) {

//姓名, 性別, 年齡等都需要從控制臺輸入

//步驟一. 創建Scanner對象

Scanner scanner = new Scanner(System.in);

//步驟二, 向控制臺輸出文本

System.out.println("姓名:");

String name = scanner.next();

System.out.println("性別:");

char sex = scanner.next().charAt(0);

System.out.println("年齡:");

int age = scanner.nextInt();

System.out.println("身高:");

double height = scanner.nextDouble();

System.out.println("性格:");

String type = scanner.next();

System.out.println("嗨, 大家好, 俺叫"+name+"性別是"+sex+"今年"+age+"身高是"+height+"性格比較"+type+", 希望大家能喜歡俺");}

封裝性

1, 封裝性的產生目的 ? ?保護某些屬性和方法不被外部所看見

2, 封裝的實現 ? 為屬性和方法進行封裝是通過關鍵字private聲明的

3, 封裝性 的產生目的 ? 保護某些屬性和方法不被外部所看見

4, 封裝的實現 ?為屬性和方法進行封裝是通過關鍵字private聲明的實現該屬性的set和get方法, 為外部所訪問

代碼

class Person{

private int age;

private String name;

public void tell(){

System.out.println("年齡:"+getAge()+" \n"+"姓名:"+getName());

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}}

public class ClassDemo1 {

public static void main(String[] args) {

Person per = new Person();

per.setAge(30);//設置年齡

per.setName("哈哈");

per.tell();}

匿名對象

1, 匿名對象就是沒有名字的對象, 如果程序中只是用一次改對象, 就可以使用匿名對象的方式

代碼:

class Student{

public void tell(){

System.out.println("Hello");

}

}

public class ClassDemo2 {

public static void main(String[] args) {

//正常方式訪問

// Student stu = new Student();

// stu.tell();

//匿名對象方式訪問

new Student().tell();}

構造方法

1, 格式: ?如圖

2, 注意點: 1)構造方法名稱必須要與類名一致 ?, 2)構造方法無返回值

3, 構造方法主要是為類中的屬性進行初始化

4, 每個類在實例化之后都會調用構造方法, 如果沒有構造方法, 程序在編譯的時候會創建一個無參的什么都不做的構造方法

5, 構造方法也可以進行重載 ? ? ?重載(兩個方法,同名不同參.參數個數不同)

代碼:

class Person {

int age;

String name;

//構造方法

public Person(int a, String n){

age = a;

name = n;

System.out.println("姓名"+name+"? 年齡"+age);

}

//構造方法

public Person(int a){

age = a;

System.out.println("年齡 "+age);

}

}

//上面重載: 方法同名不同參

public class ClassDemo01 {

public static void main(String[] args) {

// Person per = new Person(11,"lisi");

Person per1 = new Person(13);

}}

Java面向對象多態性

1, 多態性的體現: 方法的重載和重寫, ?對象的多態性

2, 對象的多態性: ?向上轉型: 程序會自動完成 ? 父類 ?父類對象 = 子類實例

向下轉型: 強制類型轉換 ? 子類 ?子類對象 = (子類)父類實例

代碼:

class A{

public void tell1(){

System.out.println("A-tell1");

}

public void tell2() {

System.out.println("A-tell2");

}

}

class B extends A{

public void tell1() {

System.out.println("B-tell1");

}

public void tell3() {

System.out.println("B-tell3");

}

}

public class PolDemo01 {

public static void main(String[] args) {

//向上轉型

// B b = new B();

// A a = b;

// a.tell1();

// a.tell2();

//向下轉型前必須要先向上轉型

A a = new B();

B b = (B)a;

b.tell1();

b.tell2();

b.tell3();}}

代碼:?

class A{

public void tell1() {

System.out.println("A--tell1");

}

}

class B extends A{

public void tell2() {

System.out.println("B -- tell2");

}}

class C extends A{

public void tell3() {

System.out.println("C--tell3");

}}

public class PolDemo02 {

public static void main(String[] args) {

say(new B());

say(new C());

}

public static void say(A a){

a.tell1();

}}

instanceof 關鍵字

1, 在Java中可以使用instanceof關鍵字判斷一個對象到底是不是一個類的實例 ; A a = new A(); --(a instanceof A)

面向對象抽象類應用

代碼:

//建立一個抽象類

abstract class People{

//兩個屬性

private int age;

private String name;

//連個屬性的set和get方法

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

//構造方法

public People(int a, String n){

// System.out.println("年齡:"+age+" 姓名"+name);

this.age = a;

this.name = n;

}

//共有的抽象方法

public abstract void want();

}

//Student類, 擴展自People類

class Student extends People{

private int scroe;

public int getScroe() {

return scroe;

}

public void setScroe(int scroe) {

this.scroe = scroe;

}

public Student(int a, String n, int s) {

super(a, n);

this.scroe = s;

}

@Override

public void want() {

System.out.println("姓名"+getName()+" 年齡"+getAge() + "成績" + getScroe());

}

}

//Worker類擴展自People

class Worker extends People{

private int money;

public int getMoney() {

return money;

}

public void setMoney(int money) {

this.money = money;

}

public Worker(int a, String n, int m) {

super(a, n);

this.money = m;

}

@Override

public void want() {

System.out.println("姓名"+getName()+" 年齡"+getAge() + "工資" + getMoney());

}

}

public class AbsDemo {

public static void main(String[] args) {

Student stu = new Student(10, "hh", 99);

stu.want();

Worker w = new Worker(32, "ww", 2000);

w.want();

}}

Java面向對象,接口的使用

代碼:?

//首先需要有一個公共的接口USB

interface USB{

//兩個抽象方法

void start();

void stop();

}

//定義一個電腦

class Computer{

public static void work(USB u) {

u.start();

System.out.println("工作中");

u.stop();

}

}

//創建U盤類, 擴展自USB

class USBDisk implements USB{

@Override

public void start() {

// TODO Auto-generated method stub

System.out.println("U盤開始工作");

}

public void stop() {

// TODO Auto-generated method stub

System.out.println("U盤停止工作");

}

}

//創建打印機

class Printer implements USB{

@Override

public void start() {

System.out.println("打印機開始工作");

}

@Override

public void stop() {

System.out.println("打印機停止工作");

}

}

public class InterDemo01 {

public static void main(String[] args) {

Computer.work(new USBDisk());

Computer.work(new Printer());}}

?繼承的實現

1, 繼承的基本概念 ? : 擴展父類的功能

2,Java中使用extends關鍵字完成繼承 ? ? ?class 子類 extends 父類{}

代碼:?

class Person{

private int age;

private String name;

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public void tel() {

// System.out.println("姓名"+getName()+" 年齡"+getAge());

}

}

class Student extends Person{

private int score;

public int getScore() {

return score;

}

public void setScore(int score) {

this.score = score;

}

public void want() {

System.out.println("成績"+getScore()+"姓名"+getName()+" 年齡"+getAge());

}

}

public class ExtendsDemo01 {

public static void main(String[] args) {

Student stu = new Student();

stu.setAge(13);

stu.setName("zhangsan");

stu.setScore(100);

stu.tel();

stu.want();

}

}


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Java經典問題算法大全 /*【程序1】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子...
    趙宇_阿特奇閱讀 1,916評論 0 2
  • 【程序1】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔...
    葉總韓閱讀 5,166評論 0 41
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,767評論 18 399
  • 第一章 初識javaJAVA 第一講:什么是程序?:為了讓計算機執行某些操作或解決某個問題而編寫的一系列有序指令的...
    人子日月幾點閱讀 545評論 0 1
  • 第三天了,阿澤想著,在掛網的墻邊用石頭劃了一道痕。還好,這真的不是夢。 【阿澤,快點收拾收拾,不然我們早市又要來不...
    死宅文化研究所閱讀 211評論 0 0