什么叫程式?
傳統程式 = 演算法 + 資料結構
程式計算時要先把資料臨時保存起來,方便程式后面代碼對其訪問進行演算法演算,
怎么保存這些資料利用率高,整數?小數?字符?字串?物件(人的資訊=姓名+年齡+生日)
根據資料的特點把他用適合結構來存盤,對應結構運算速度快(讀取,存盤速度)
現今程式 = 演算法 + 資料結構 + 框架* + 架構*
框架:ssm三大框架:springmvc+spring+mybatis
架構:nginx+redis+mycat+rabbitmq+rocketmq+docker+k8s+ hadoop+flink + kafka
java如何去保存一個資料,有對應資料結構
分成兩類:
1)基本型別:就8種基本型別,整數、小數、其它
2)參考型別:術語和c語言(最強大指標,參考誰就用指標指過去)
大白話:非基本型別就是參考型別!
從占用空間、性能觸發,優先順序:
優先使用整數,優先byte>short>int>long
小數:float>double
String>Array>Object
總結:在開發中使用區域變數優先基本型別變數,在成員變數 參考型別,
基本型別
8種基本型別
1)byte 位元組,1個位元組=8bit位元
2)short 短整型,2個位元組
3)int 整型,4個位元組,32b
4)long 長整型,8個位元組,64b
5)float 單精度浮點型,4個位元組
6)double 雙精度浮點型,8個位元組
7)char 字符型,2個位元組
ascii 1個位元組,2個位元組
unicode/16 4個位元組/utf-8 壓縮 2個位元組、3個位元組、4個位元組
8)boolean 布爾型,1位元組
它們表達數值范圍不同,一般采用所占用位元組數表達,
特點:
1)在java中基本型別都必須小寫
2)在記憶體中是連續空間,會浪費一定空間,以空間換時間
3)存盤空間不夠,空間翻倍
4)字符可以容納1~4個位元組
5)布爾型別也要占1個位元組
基本型別都有默認值
參考型別的默認值null,但是基本型別都有自己的默認值:
1)整數: 0
2)小數:0.0
3)字符:u0000x(unicode)NUL ascii
4)布爾:false
package cn.tedu.data;
import org.junit.Test;
//列印8種基本型別的默認值
public class TestBasicDataType {
//這個位置定義的變數就叫成員變數
byte b;
/*
* 加junit,@Test帽子,彈出選中JUnit4,自動導包import
* 默認值
*/
@Test
public void defaultValue() {
//規定:方法區域變數必須初始化才能列印
//成員變數不初始化,使用默認值,在類下面定義的就叫成員變數
//byte b;
//The local variable b may not have been initialized
System.out.println("byte 位元組的默認值是:" + b);
}
}
計算機怎么和人類溝通
人打鍵盤,輸入字母,底層翻譯二進制編碼,編碼規范就是ascii碼,
NUL 0 (null)
a 97
A 65
0 48
包裝型別
基本型別變數是無法直接知道它們最大值和最小值,取值范圍,
java就推出包裝型別,額外提供很多方法,其中就有MAX_VALUE最大值和MIN_VALUE最小值,
1)byte Byte
2)short Short
3)int Integer*
4)long Long
5)float Float
6)double Double
7)char Character*
8)boolean Boolean
包裝型別就把基本型別變成物件 Object
c 語言面向程序,java語言面向物件,python 面向物件
java中第一公民:物件,萬物皆物件,
基本型別存盤大小
package cn.tedu.data;
import org.junit.Test;
//列印基本型別的范圍
public class TestBasicTypeScope {
@Test
public void scope() {
//包裝型別可以直接獲取最小值和最大值 -128(-2^7)~127(2^7),總共256=2^8,中間包括0
System.out.println("Byte 范圍:" + Byte.MIN_VALUE + "~" +Byte.MAX_VALUE);
//-32768~32767,總共65536 = 64k = 64*1024
System.out.println("Short 范圍:" + Short.MIN_VALUE+"~"+Short.MAX_VALUE);
//-21億到21億
System.out.println("Integer 范圍:" + Integer.MIN_VALUE+"~"+Integer.MAX_VALUE);
System.out.println("Long 范圍:" + Long.MIN_VALUE+"~"+Long.MAX_VALUE);
//1.4E-45~3.4028235E38 科學計數法E-45,數值后面有45個0
System.out.println("Float 范圍:" + Float.MIN_VALUE+"~"+Float.MAX_VALUE);
System.out.println("Double 范圍:" +Double.MIN_VALUE+"~"+Double.MAX_VALUE);
System.out.println();
//如果寫一個整數默認型別整型
Byte b1 = 100; //java自動將整數型別強制轉換為Byte型別
System.out.println(b1);
//Type mismatch 型別不匹配: cannot convert from int to Byte
//Byte b2 = 200; //200超過byte范圍,放不進去,報錯
//System.out.println(b2);
//如果寫一個小數默認型別雙精度浮點數
//Type mismatch: cannot convert from double to Float
Float f = 1.1F; //寫1.1默認是double型別,在最后加f或者F,代表Float型別
System.out.println(f);
}
}
總結一句:
1)日常寫一個整數默認 int型別,寫一個小數默認 double型別
2)強制標識這個數值是什么型別:Long(l/L)、Float(f/F)、Double(d/D)
參考型別
陣列
基本型別或者包裝型別它們都只能表達一個值,如果想要表達一組值(多個值)怎么辦呢?
使用陣列:
int[] a = {10, 20, 30};
int[] a = new int[3];
a[0] =10;
a[1] = 20;
a[2] = 30;
package cn.tedu.data;
import java.util.Arrays;
import org.junit.Test;
//陣列
public class TestArray {
@Test
public void intArray() {
//定義int陣列,陣列有4個元素
//每個元素的值0
//陣列的定義
int[] a = new int[4];
//陣列元素值初始化
a[0] = 10;
a[1] = 20;
a[2] = 30;
System.out.println("陣列的長度:" + a.length);
//陣列通過下標進行訪問,下標起始0
System.out.println("陣列第一個元素:"+ a[0] );
System.out.println("陣列最后一個元素:" + a[3]); //不推薦
//中括號中可以支持運算式,靈活,代碼盡量不要寫死
System.out.println("陣列最后一個元素:" + a[ a.length-1 ] );
//一條代碼做2件事情,創建b陣列,同時初始化
int[] b = {10, 20, 30, 0};
//查看陣列中元素,快捷工具類寫法
System.out.println( Arrays.toString(b) );
}
}
陣列排序、總計、平均值、最大值、最小值
package cn.tedu.data;
import java.util.Arrays;
import org.junit.Test;
//陣列
public class TestArray {
@Test
public void intArray() {
//定義int陣列,陣列有4個元素
//每個元素的值0
//陣列的定義
int[] a = new int[4];
//陣列元素值初始化
a[0] = 10;
a[1] = 20;
a[2] = 30;
System.out.println("陣列的長度:" + a.length);
//陣列通過下標進行訪問,下標起始0
System.out.println("陣列第一個元素:"+ a[0] );
System.out.println("陣列最后一個元素:" + a[3]); //不推薦
//中括號中可以支持運算式,靈活,代碼盡量不要寫死
System.out.println("陣列最后一個元素:" + a[ a.length-1 ] );
//一條代碼做2件事情,創建b陣列,同時初始化
int[] b = {10, 20, 30, 0};
//查看陣列中元素,快捷工具類寫法
System.out.println( Arrays.toString(b) );
}
@Test //定義陣列、總計sum、平均值avg、最大值max、最小值min
public void doArray() {
int[] scores = {100, 99, 60, 88, 95};
//總計
int sum = 0;
sum += scores[0];
sum += scores[1];
sum += scores[2];
sum += scores[3];
sum += scores[4];
System.out.println("總計:"+sum);
//平均值=總計/陣列長度
int avg = sum / scores.length;
System.out.println("平均值:" +avg);
//先排序,正序(最小在前面),獲取第一個元素最小值,最后一個元素最大值
//Arrays.sort(a); 對陣列a進行正序,排完結果存放回陣列(原來陣列就被覆寫)
Arrays.sort(scores);
System.out.println( Arrays.toString(scores) ); //scores陣列的內容已經被排序了
//最大值(陣列的最后一個元素)
System.out.println( "最大值:" + scores[ scores.length-1 ] );
//最小值(陣列的第一個元素)
System.out.println("最小值:" + scores[0] );
}
}
陣列
1)陣列array它可以存放多個值,但必須每個值都是一個型別,
2)new關鍵字創建陣列物件,它不是基本型別,它是參考型別,
3)工具類:jdk Arrays
Arrays.toString(array); 把陣列轉換字串
Arrays.sort(array) 對array進行排序,排序后覆寫array,在sort前的陣列的內容在sort被改變,
缺點:多個值的型別只支持一個,生活中很復雜:表示一個人的資訊(姓名 String、年齡 int/short/byte、生日 date)
如果它能實作,就可以表達生活中萬物!
物件
在java中萬物皆物件 Object
1)怎么證明java中萬物皆物件
a. 所有java創建非基本型別變數都是Object的子類,
如果你自己寫的類沒有明確繼承 extends Object,java在編譯時會自動填上,任何Java類都是Object子類?
看看包裝型別它的父類是誰?Object?
package cn.tedu.data;
import java.util.Arrays;
import org.junit.Test;
//陣列
public class TestArray{
@Test
public void intArray() {
//定義int陣列,陣列有4個元素
//每個元素的值0
//陣列的定義
int[] a = new int[4];
//陣列元素值初始化
a[0] = 10;
a[1] = 20;
a[2] = 30;
System.out.println("陣列的長度:" + a.length);
//陣列通過下標進行訪問,下標起始0
System.out.println("陣列第一個元素:"+ a[0] );
System.out.println("陣列最后一個元素:" + a[3]); //不推薦
//中括號中可以支持運算式,靈活,代碼盡量不要寫死
System.out.println("陣列最后一個元素:" + a[ a.length-1 ] );
//一條代碼做2件事情,創建b陣列,同時初始化
int[] b = {10, 20, 30, 0};
//查看陣列中元素,快捷工具類寫法
System.out.println( Arrays.toString(b) );
}
@Test //定義陣列、總計sum、平均值avg、最大值max、最小值min
public void doArray() {
int[] scores = {100, 99, 60, 88, 95};
//總計
int sum = 0;
sum += scores[0];
sum += scores[1];
sum += scores[2];
sum += scores[3];
sum += scores[4];
System.out.println("總計:"+sum);
//平均值=總計/陣列長度
int avg = sum / scores.length;
System.out.println("平均值:" +avg);
//先排序,正序(最小在前面),獲取第一個元素最小值,最后一個元素最大值
//Arrays.sort(a); 對陣列a進行正序,排完結果存放回陣列(原來陣列就被覆寫)
Arrays.sort(scores);
System.out.println( Arrays.toString(scores) ); //scores陣列的內容已經被排序了
//最大值(陣列的最后一個元素)
System.out.println( "最大值:" + scores[ scores.length-1 ] );
//最小值(陣列的第一個元素)
System.out.println("最小值:" + scores[0] );
}
@Test
public void arrayType() {
int b = 10;
int[] a = new int[5];
System.out.println(b); //基本型別,直接列印值
System.out.println(a); //列印這個物件的記憶體地址 [I@7506e922(參考的指標)
System.out.println(a[0]); //列印第一個元素值 0
}
}
總結:
1)萬物皆Object物件
2)列印參考型別實體時,這個物件的toString()方法,如果這個類沒有寫這個方法,它呼叫Object.toString(),
2)創建人這個物件
人:姓名+年齡+生日
package cn.tedu.data;
import java.util.Date; //不能選擇java.sql.Date會報錯,必須選擇util
/*
* 人:類
*/
public class Person {
//成員變數:屬性
String name; //姓名
int age; //年齡
Date birthday; //生日
}
package cn.tedu.data;
import java.util.Date;
import org.junit.Test;
//測驗類
public class TestPersonCar {
@Test //測驗人
public void person() {
//格式:類名 物件實體名 = new 類名();
//男人,物件,從類去創建物件實體
Person man = new Person();
//怎么訪問物件屬性,通過.運算子
man.name = "王強";
man.age = 28;
man.birthday = new Date(); //簡便,當前日期
System.out.println("姓名:" + man.name );
System.out.println("年齡:" + man.age );
System.out.println("生日:" + man.birthday );
//女人,物件,通過類可以產生n個物件
Person woman = new Person();
woman.name = "李穎";
woman.age = 18;
woman.birthday = new Date();
System.out.println("姓名:" + woman.name );
System.out.println("年齡:" + woman.age );
System.out.println("生日:" + woman.birthday );
}
}
車:型別+顏色+價格
package cn.tedu.data;
//類:車
public class Car {
//屬性,成員變數
String type; //型別
String color; //顏色
Double price; //價格
}
package cn.tedu.data;
import java.util.Date;
import org.junit.Test;
//測驗類
public class TestPersonCar {
@Test //測驗人
public void person() {
//格式:類名 物件實體名 = new 類名();
//男人,物件,從類去創建物件實體
Person man = new Person();
//怎么訪問物件屬性,通過.運算子
man.name = "王強";
man.age = 28;
man.birthday = new Date(); //簡便,當前日期
System.out.println("姓名:" + man.name );
System.out.println("年齡:" + man.age );
System.out.println("生日:" + man.birthday );
//女人,物件,通過類可以產生n個物件
Person woman = new Person();
woman.name = "李穎";
woman.age = 18;
woman.birthday = new Date();
System.out.println("姓名:" + woman.name );
System.out.println("年齡:" + woman.age );
System.out.println("生日:" + woman.birthday );
}
@Test //測驗汽車類
public void car() {
//保時捷911、紅色、640000
//1、創建物件實體
Car car = new Car();
//2、設定屬性
car.type = "保時捷911";
car.color = "紅色";
car.price = 640000D; //通過D宣告它是一個double型別
//3、訪問屬性
System.out.println( "型別:" + car.type );
System.out.println( "顏色:" + car.color );
System.out.println( "價格:" + car.price );
}
}
知識回顧
資料型別

基本型別

包裝型別

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/280245.html
標籤:其他
上一篇:寫給Java 工程師們一封信
