JAVA-Day4

小類型向大類型轉(zhuǎn)換

不同類型的數(shù)據(jù)經(jīng)常出現(xiàn)相互轉(zhuǎn)換的現(xiàn)象.

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

2, 自動轉(zhuǎn)換的規(guī)則: 符號位會自動擴(kuò)展, 最高位負(fù)數(shù)補(bǔ)1, 正數(shù)補(bǔ)0.

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

4, 整數(shù)到浮點(diǎn)數(shù)轉(zhuǎn)換會損失精確度

代碼例: int i = -2;

long l = i;

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

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

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

5, 小類型向大類型轉(zhuǎn)換一般情況下是安全的

6, 當(dāng)小類型的精度高于大類型時(shí)要注意精度丟失的隱患.

int類型轉(zhuǎn)換為float類型:

int i = 0x1000001;

float f = i;

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

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

// 因?yàn)镕loat里面沒有這個(gè)轉(zhuǎn)成二進(jìn)制的方法(toBinaryString), 所以需要先強(qiáng)制轉(zhuǎn)換為int類型,然后再轉(zhuǎn)成二進(jìn)制

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

long類型轉(zhuǎn)換為double類型

當(dāng)小類型向大類型轉(zhuǎn)換時(shí)候,如果小類型的精度值大于大類型, 要注意精度丟失的問題

大類型向小類型轉(zhuǎn)換

1, 強(qiáng)轉(zhuǎn)類型轉(zhuǎn)換-簡稱強(qiáng)轉(zhuǎn)

2, 強(qiáng)制類型類型轉(zhuǎn)換時(shí), 要注意邊界數(shù)風(fēng)險(xiǎn)問題

int類型與char類型的轉(zhuǎn)換

Java對char類型的數(shù)據(jù)在底層是按int類型來處理的

int類型與char類型在賦值時(shí)可自動轉(zhuǎn)換

代碼例: char c = 65;

int i = 'B';

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

字符類型的數(shù)據(jù)可進(jìn)行數(shù)值計(jì)算:?

代碼例: char c = 'A';

int i = c+1;

c = (char) (c+1);

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

通過args數(shù)組獲取數(shù)據(jù)

通過main方法的args數(shù)組可以從控制臺獲取一組字符串?dāng)?shù)據(jù)

案例: 給main方法的args數(shù)組輸入兩個(gè)整數(shù), 對這兩個(gè)整數(shù)進(jìn)行四則運(yùn)算

注意: 在運(yùn)行前先要給args數(shù)組賦值: run-run configurations-arguments-賦值即可

public static void main(String[] args) {

//parseInt把字符串轉(zhuǎn)換為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從控制臺獲取數(shù)據(jù)

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

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

Scanner類的常用方法

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

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

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

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

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

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

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

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

通過Scanner從控制臺接收數(shù)據(jù)的步驟:?

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

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

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

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

//步驟一. 創(chuàng)建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, 封裝性的產(chǎn)生目的 ? ?保護(hù)某些屬性和方法不被外部所看見

2, 封裝的實(shí)現(xiàn) ? 為屬性和方法進(jìn)行封裝是通過關(guān)鍵字private聲明的

3, 封裝性 的產(chǎn)生目的 ? 保護(hù)某些屬性和方法不被外部所看見

4, 封裝的實(shí)現(xiàn) ?為屬性和方法進(jìn)行封裝是通過關(guān)鍵字private聲明的實(shí)現(xiàn)該屬性的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);//設(shè)置年齡

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();}

構(gòu)造方法

1, 格式: ?如圖

2, 注意點(diǎn): 1)構(gòu)造方法名稱必須要與類名一致 ?, 2)構(gòu)造方法無返回值

3, 構(gòu)造方法主要是為類中的屬性進(jìn)行初始化

4, 每個(gè)類在實(shí)例化之后都會調(diào)用構(gòu)造方法, 如果沒有構(gòu)造方法, 程序在編譯的時(shí)候會創(chuàng)建一個(gè)無參的什么都不做的構(gòu)造方法

5, 構(gòu)造方法也可以進(jìn)行重載 ? ? ?重載(兩個(gè)方法,同名不同參.參數(shù)個(gè)數(shù)不同)

代碼:

class Person {

int age;

String name;

//構(gòu)造方法

public Person(int a, String n){

age = a;

name = n;

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

}

//構(gòu)造方法

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面向?qū)ο蠖鄳B(tài)性

1, 多態(tài)性的體現(xiàn): 方法的重載和重寫, ?對象的多態(tài)性

2, 對象的多態(tài)性: ?向上轉(zhuǎn)型: 程序會自動完成 ? 父類 ?父類對象 = 子類實(shí)例

向下轉(zhuǎn)型: 強(qiáng)制類型轉(zhuǎn)換 ? 子類 ?子類對象 = (子類)父類實(shí)例

代碼:

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) {

//向上轉(zhuǎn)型

// B b = new B();

// A a = b;

// a.tell1();

// a.tell2();

//向下轉(zhuǎn)型前必須要先向上轉(zhuǎn)型

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 關(guān)鍵字

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

面向?qū)ο蟪橄箢悜?yīng)用

代碼:

//建立一個(gè)抽象類

abstract class People{

//兩個(gè)屬性

private int age;

private String name;

//連個(gè)屬性的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;

}

//構(gòu)造方法

public People(int a, String n){

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

this.age = a;

this.name = n;

}

//共有的抽象方法

public abstract void want();

}

//Student類, 擴(kuò)展自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類擴(kuò)展自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面向?qū)ο?接口的使用

代碼:?

//首先需要有一個(gè)公共的接口USB

interface USB{

//兩個(gè)抽象方法

void start();

void stop();

}

//定義一個(gè)電腦

class Computer{

public static void work(USB u) {

u.start();

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

u.stop();

}

}

//創(chuàng)建U盤類, 擴(kuò)展自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盤停止工作");

}

}

//創(chuàng)建打印機(jī)

class Printer implements USB{

@Override

public void start() {

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

}

@Override

public void stop() {

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

}

}

public class InterDemo01 {

public static void main(String[] args) {

Computer.work(new USBDisk());

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

?繼承的實(shí)現(xiàn)

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

2,Java中使用extends關(guān)鍵字完成繼承 ? ? ?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();

}

}


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末污茵,一起剝皮案震驚了整個(gè)濱河市葬项,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌襟士,老刑警劉巖嚷量,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件津肛,死亡現(xiàn)場離奇詭異,居然都是意外死亡秸脱,警方通過查閱死者的電腦和手機(jī)摊唇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來有序,“玉大人岛请,你說我怎么就攤上這事≈殉疲” “怎么了后室?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長疾层。 經(jīng)常有香客問我贡避,道長,這世上最難降的妖魔是什么舅逸? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任皇筛,我火速辦了婚禮,結(jié)果婚禮上旗笔,老公的妹妹穿的比我還像新娘拄踪。我一直安慰自己,他們只是感情好撮弧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著授舟,像睡著了一般贸辈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上擎淤,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天嘴拢,我揣著相機(jī)與錄音,去河邊找鬼炊汤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的迈倍。 我是一名探鬼主播捣域,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼迹鹅!你這毒婦竟也來了贞言?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤弟蚀,失蹤者是張志新(化名)和其女友劉穎酗失,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捶闸,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年斩启,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了醉锅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡垄琐,死狀恐怖经柴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情翻擒,我是刑警寧澤牛哺,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站巩趁,受9級特大地震影響淳附,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜别凹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一洽糟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧颁督,春花似錦浇雹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽试疙。三九已至,卻和暖如春履澳,著一層夾襖步出監(jiān)牢的瞬間怀跛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工忠蝗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留漓拾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓速种,卻偏偏與公主長得像脯颜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子栋操,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Java經(jīng)典問題算法大全 /*【程序1】 題目:古典問題:有一對兔子矾芙,從出生后第3個(gè)月起每個(gè)月都生一對兔子近上,小兔子...
    趙宇_阿特奇閱讀 1,863評論 0 2
  • 【程序1】 題目:古典問題:有一對兔子壹无,從出生后第3個(gè)月起每個(gè)月都生一對兔子,小兔子長到第三個(gè)月后每個(gè)月又生一對兔...
    葉總韓閱讀 5,133評論 0 41
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法斗锭,類相關(guān)的語法,內(nèi)部類的語法帮毁,繼承相關(guān)的語法,異常的語法烈疚,線程的語...
    子非魚_t_閱讀 31,623評論 18 399
  • 第一章 初識javaJAVA 第一講:什么是程序?:為了讓計(jì)算機(jī)執(zhí)行某些操作或解決某個(gè)問題而編寫的一系列有序指令的...
    人子日月幾點(diǎn)閱讀 517評論 0 1
  • 第三天了爷肝,阿澤想著,在掛網(wǎng)的墻邊用石頭劃了一道痕金赦。還好牧愁,這真的不是夢。 【阿澤猪半,快點(diǎn)收拾收拾,不然我們早市又要來不...
    死宅文化研究所閱讀 194評論 0 0