主頁 > 後端開發 > 常用類

常用類

2021-02-25 06:15:38 後端開發

常用類

包裝類

在類中查看屬性方法的快捷鍵:Ctrl+F12

java.lang包會默認匯入每個Java檔案,所以我們不需要匯入這個包,直接用包中的類就好了

  • byte Byte

    short Short

    int Integer

    long Long

    float Float

    double Double

    char Character

    boolean Boolean

  • 在Java中,類只能直接繼承一個類,但可以間接繼承多個類

  • 包裝類就是八大基本型別對應的類(前六個包裝類是直接繼承Number類,間接繼承object類,后兩個是直接繼承object類)

  • 我們為什么要引入包裝類?

    • 將基本型別包裝成為對應的包裝類,就是為了獲取某些屬性,方法
    • 集合(存放資料的)只能存放參考資料型別

我們以integer類作講解,其他都一樣:(類的學習都是使用API幫助檔案)

  • integer底層就是一個int型別的資料

  • int型別資料的最大最小值,直接類名呼叫屬性就可以了,例如:

    System.out.println(Integer.MAX_VALUE);
    System.out.println(Integer.MIN_VALUE);
    
  • integer類中沒有無參構造器

    有參(字串)構造只能是可以轉換為int型別的字串

  • 自動裝箱

    int型別轉換為integer,例如:

    Integer i1=12;
    //其實內部進行的操作是,Integer i1=Integer.valueOf(12);這步我們要通過反編譯工具才可以看到
    
  • 自動拆箱

    integer型別轉換為int型別,例如:

    int a=i1;
    
  • compareTo方法,就是比較大小,例如:

    System.out.println(i1.compareTo(i2));//這個方法的回傳值就是一個int型別
    
  • equals方法,比較是否相等,比較的是數值,例如:

    System.out.println(i1.equals(i2));
    //等于比較的是地址,就是看是否為同一個值
    System.out.println(i1==i2);
    
  • 自動裝箱的重點

    Integer i1=12;
    Integer i2=12;
    System.out.println(i1==i2);//回傳值為true,因為值在-128到127之間就直接在一個陣列中取值,所以為true
    /*
    如果不在這個范圍內就會創建一個物件,不在那個陣列里取值,而是自己創建物件存值,所以這也說明了
    自動裝箱不一定會創建物件,還有數值超出那個范圍才會創建物件
    */
    
  • intValue()方法,將integer轉換為int型別

    System.out.println(i1.intValue());
    
  • parseInt()方法,將String型別轉換為int型別,字串要可以轉換為int,不然會報例外

    int i = Integer.parseInt("12");
    
  • valueof(int i)/(String s)方法,就是將int型別轉換為integer型別/將String型別轉換為int型別

String類

從屬于java.lang包

  • String類的底層就是一個char型別的陣列

  • 創建物件時呼叫構造器就是對底層char型別陣列的賦值

    String類中有很多構造器,可以通過創建物件呼叫構造器,例如:

    String s1 = new String();
    String s2 = new String("abc");
    String s3 = new String(new char[]{'1', '2', '3'});
    

一般都是用物件名去呼叫方法

String類中的方法:

str1.length(),就是str1的長度,底層就是char型別陣列的長度(回傳結果為int值)

str1.isEmpty()判斷這個物件是否為空(回傳結果為布林值)

str1.charAt(2)得到該陣列下標(2)對應元素的值(回傳結果就是元素對應的值)

str5.equals(str6)判斷兩個物件值是否相等(回傳值為布林值),內部先判斷是否相等,在判斷長度是否相等,在判斷值是否相等

  • compareTo()方法

    String s4="abc";
    String s5="abcdef";
    System.out.println(s4.compareTo(s5));//回傳4,4是長度差1
    //這種情況下回傳的就是長度差,因為前三個字符是一樣的
    String s4="abc";
    String s5="defghj";
    System.out.println(s4.compareTo(s5));//回傳的是ASCII碼
    //只要前三個字符中有一個不一樣,就會回傳ASCII碼,只有前三個字串全部一樣才會回傳長度差
    
  • indexOf()方法

    System.out.println(s5.indexOf('f'));//輸出的值為元素對應的下標,是個int值
    
  • API幫助檔案提供的是我們可以使用的方法,像private修飾的方法我們就不能使用,所以API檔案也不會提供給我們

  • substring()方法,字串的截取

    String s5="abcdef";
    String substring = s5.substring(2);
    System.out.println(substring);//輸出cdef
    String substring1 = s5.substring(2, 3);//這里只能輸出一個字符,因為在Java很多地方都是包頭不包尾的
    System.out.println(substring1);//輸出c
    
  • concat()方法,就是兩個字串進行拼接

    String s4="abc";
    String s5="abcdef";
    System.out.println(s4.concat(s5));//輸出abcabcdef
    
  • replace()方法,就是將字串中的一個字符替換為另一個字符

    String s4="abc";
    System.out.println(s4.replace('a', 'p'));//輸出結果為pbc,就是將a字符替換成為p字符
    
  • 有回傳值的方法可以先回傳一個值,然后sout輸出,也可以直接sout輸出

  • toUpperCase()方法,將字串中全部字符轉換為大寫

    String s5="abcdef";
    System.out.println(s5.toUpperCase());//輸出結果為ABCDEF
    
  • toLowerCase()方法,將字串中的全部字符轉換為小寫

    String s5="AAAAAA";
    System.out.println(s5.toLowerCase());//輸出結果為aaaaaa
    
  • trim()方法,去掉首尾空格

    String s5="      AAAA          AA         ";
    System.out.println(s5.trim());//輸出結果為AAAA          AA
    
  • toString()方法,誰呼叫就回傳誰

    String s5="asdfghj";
    System.out.println(s5.toString());//輸出結果為asdfghj
    
  • valueOf()方法,將int型別的值轉換為字串

    System.out.println(String.valueOf(12));
    

String記憶體+反編譯驗證

字串定義的方式:

        String s1="abc";
        String s2="a"+"b"+"c";
        String s3="abc"+"";
        //字串拼接,會進行編譯期優化,直接拼成最終你要的字串
        String s4=s1+"";
        //變數參與運算,就會在堆中開辟空間,會創建一個StringBuilder物件
        String s5=new String("abc");
        //創建物件,會在堆中開辟空間
        System.out.println(s1==s2);//輸出true
        System.out.println(s1==s3);//輸出true
        System.out.println(s1==s4);//輸出false
        System.out.println(s1==s5);//輸出false

編譯器優化:自動將s2,s3拼接為"abc",將s4拼接為s1,直接拼成最終你要的字串

變數的記憶體地址是由第一個指向的位置決定的(我自己理解出的,不一定對)

  • s1到s5在記憶體中的存盤圖大致為:

  • 壓堆疊(入堆疊):物件名,變數名啥的都會被壓入堆疊中,具體怎么壓我現在也不知道

StringBuilder類

  • 底層最重要的兩個數是char型別的陣列和int型別的數

  • StringBuilder的無參構造會呼叫父類的構造器并給char型別陣列確定長度為16

    你要是呼叫有參構造器的話會將陣列長度確定為你傳的那個數字,例如:

    StringBuilder stringBuilder = new StringBuilder(23);//開辟長度為23的陣列
    

    你要呼叫字串有參構造的話,開辟陣列長度為字串長度加默認長度16

    StringBuilder stringBuilder1 = new StringBuilder("abc");//開辟長度為19的陣列
    

    StringBuilder底層的char陣列長度要是不夠用了,它會重新創建一個陣列,而String是不能重新創建陣列

  • String是不可變字串,StringBuilder是可變字串

StringBuilder的常用方法

StringBuilder與StringBuffer的區別聯系

利用陣列擴容原理(StringBuilder類的原理)創建一個類來模擬集合Arraylist:

注意細節:this就是呼叫本類的構造器,而super是呼叫父類的構造器

為什么我們要說一個類的底層是一個陣列或變數啥的?

因為我們可以發現所有的屬性和方法都是給那個陣列或變數進行操作,所以我們說這個類的底層就是一個陣列或變數啥的

實作代碼為:

package 包;

import java.lang.management.MemoryUsage;

public class MyCollection {
    //底層是一個object陣列
    Object[] value;
    //計陣列中被占用的個數
    int size;
    //定義無參構造
    public MyCollection(){
        value=https://www.cnblogs.com/H-scholar/p/new Object[3];//陣列長度賦值為3
    }
    //定義有參構造,陣列長度由引數決定
    public MyCollection(int num){
        value=new Object[num];
    }
    //往陣列里放東西的方法
    public MyCollection add(Object obj){
        value[size]=obj;
        size++;
        //一旦超出范圍,我們就要進行陣列的擴容
        if (size>value.length-1){
            //擴容:創建一個新的陣列
            Object[] newObj=new Object[value.length*2+2];
            //將老陣列中的東西復制到新陣列中
            for (int i = 0; i <= value.length-1; i++) {
                newObj[i]=value[i];
            }
            //將value指向newObj,下次就是直接向新陣列中放值
            value=newObj;
        }
        return this;
    }
    //取值
    public Object get(int index){
        if (index<0||index>=size){
            throw new RuntimeException("超出邊界");
        }
        return value[index];
    }
    //計陣列長度
    public int size(){
        return size;
    }
    //重寫toString方法
    public String toString() {
        StringBuilder sb = new StringBuilder("[");
        for (int i = 0; i < size; i++) {
            sb.append(value[i]+",");

        }
        sb.setCharAt(sb.length()-1,']');
        return sb.toString();
    }
    public static void main(String[] args) {
        MyCollection mc1 = new MyCollection();//呼叫無參構造創建物件,定義陣列長度為3
        MyCollection mc2 = new MyCollection(3);//呼叫有參構造,定義陣列長度為3
        mc1.add(1);
        mc1.add("aaa");
        mc1.add(3);
        mc1.add(4);//這個陣列是能放3個,這是第四個,陣列下標越界
        mc1.add(5).add(6).add(7);
        //輸出陣列元素
        for (int i = 0; i <= mc1.size()-1; i++) {
            System.out.println(mc1.get(i));
        }
        System.out.println(mc1);
        System.out.println(mc1.toString());
    }
}

時間處理類

  • date類

            Date d = new Date();
            //列印出當前系統的世間
            System.out.println(d);
    
  • date類中的其他表示時間的方法

    Date d = new Date();
            //列印出當前系統的時間
            System.out.println(d);
            //以下是過期的列印時間的方法
            System.out.println(d.toGMTString());
            System.out.println(d.toLocaleString());
            System.out.println(d.getYear());//當前年份減去1900
            System.out.println(d.getMonth());//回傳的是0到11之間的數,5表示6月
            System.out.println(d.getDate());//月份中的某一天,值在0到31之間
            System.out.println(d.getDay());//回傳的是星期幾
    
            //以下兩個列印的都是毫秒數,但是為什么第二個是常用的吶?
            System.out.println(d.getTime());//回傳的是毫秒數
            System.out.println(System.currentTimeMillis());//因為它不用創建物件,不用導包,直接呼叫
    
    		//java.sql.Date 年月日
            //java.util.Date 年月日時分秒
            java.sql.Date sqlDate=new java.sql.Date(12122121l);
            System.out.println(sqlDate);
    		//將String型別轉換為java.sql.Date
            java.sql.Date date = sqlDate.valueOf("2019-10-10");
    
    		//java.util.Date轉換為java.sql.Date(util.Date呼叫自己的方法充當sql.Date的引數)
            java.sql.Date date1 = new java.sql.Date(new Date().getTime());
            //java.sql.Date轉換為java.util.Date(類轉類,用的是繼承關系,父類子類的關系)
            Date date2=date1
    
  • java.sql包下還有兩個時間類,Time,Timestamp類,知道有這兩個類就行了

  • String轉換為java.util.Date

    		//String----->java.util.Date
            //1. String----->java.sql.Date
            java.sql.Date date3 = java.sql.Date.valueOf(2019-1-8);
            //2. java.sql.Date----->java.util.Date
            Date date4=date3;
    

    這種方法有局限:valueOf方法中字串格式必須為:年--月--日

    實作開發作業中將String轉換為java.util.Date需要借助Dateformat類(日期格式化)

    		//創建實作類物件時需要確定日期的格式,字符可以是多個也可以是單個,例如:y-M-d h-m-s
    		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh-mm-ss");
            try {
                //parse方法的作用:String----->Date
                //這里的日期格式必須和確定的日期格式相同
                Date parse = simpleDateFormat.parse("2100-12-10 10-20-30");
                System.out.println(parse);
            } catch (ParseException e) {
                e.printStackTrace();
            }
    		//format方法的作用:Date----->String
    		//這里轉換為的String格式為創建物件時確定的日期格式
            String format = simpleDateFormat.format(new Date());
            System.out.println(format);
    

字符代表的意思:

  • 類創建物件失敗的原因:

    1. 介面
    2. 抽象類
    3. 沒有無參構造,需要用有參構造創建物件
    4. 無參構造被private修飾
  • Calendar類(日歷)

    很強大,但是我們用得少

    注意:Calendar類本身(抽象類)不能創建物件,但我們可以讓類通過呼叫方法來創建物件,也可以創建它實作類的物件來創建物件,例如:

    		Calendar cal1 =Calendar.getInstance();
            Calendar cal2 = new GregorianCalendar();
    

    Calendar類中的方法:

    		//獲取方法:
    		System.out.println(cal1.get(Calendar.YEAR));//輸出2021
            System.out.println(cal1.get(Calendar.MONTH));//輸出的月份是當前月份減1
            System.out.println(cal1.get(Calendar.DATE));//輸出20號
            System.out.println(cal1.get(Calendar.DAY_OF_WEEK));//輸出的是一個星期中的第幾天,例如:星期六是一個星期中		   的第七天
            System.out.println(cal1.getActualMaximum(Calendar.DATE));//輸出這個月中最大的一天
            System.out.println(cal1.getActualMaximum(Calendar.MONTH));//輸出11,就是12月的意思,因為從0開始
            System.out.println(cal1.getActualMinimum(Calendar.DATE));//一個月中最小的一天肯定是1
            
    		//設定方法:
    		cal1.set(Calendar.DATE,16);//修改為16號
            cal1.set(Calendar.MONTH,9);//修改為9月
            cal1.set(Calendar.YEAR,2051);//修改為2051年
            System.out.println(cal1);
    
    • String----->Calendar,先轉換為date,在轉換為Calendar
    		Calendar cal = Calendar.getInstance();
            //String----->Calendar
            //String----->Date
            Date date = Date.valueOf("2019-2-10");
            //Date----->Calendar
            cal.setTime(date);
            System.out.println(cal);
    

    列印輸出日歷表:

    package 包;
    
    import java.sql.Date;
    import java.util.Calendar;
    import java.util.Scanner;
    
    public class Test {
        public static void main(String[] args) {
            System.out.print("請輸入你想要查看的日期:--(格式例如:2019-10-10):");
            Scanner sc=new Scanner(System.in);
            String str = sc.next();//這個方法使用來接收鍵盤輸入的,接收到資料后要回傳一個值
            //String----->Calendar  為什么要轉為Calendar型別? 答:因為這個類比較強大,只有轉化為Calendar類才可以進行后續步驟
            Date valueOf = Date.valueOf(str);
            Calendar cal = Calendar.getInstance();
            cal.setTime(valueOf);//轉換成功
            System.out.println("日\t一\t二\t三\t四\t五\t六");
            int count=0;
            //求出這個月中的最大天數
            int actualMaximum = cal.getActualMaximum(Calendar.DATE);
            //獲取當天的天數
            int nowDay = cal.get(Calendar.DATE);
            //修改
            cal.set(Calendar.DATE,1);
            //空格
            int num = cal.get(Calendar.DAY_OF_WEEK);
            for (int i = 1; i <=num-1 ; i++) {
                System.out.print("\t");
            }
            count+=(num-1);
            for (int i = 1; i <= actualMaximum; i++) {
                if (i!=nowDay){
                    System.out.print(i+"\t");
                }else{
                    System.out.print(i+"*\t");
                }
                count++;
                if (count%7==0){
                    System.out.println();
                }
            }
        }
    }
    

列舉

  • 用enum關鍵字來表示

  • 列舉的定義

    public enum Test {
       SPRING,SUMMER,AUTUMN,WINTER;
    }
    
  • 列舉的創建

    public void test1(){
            //列舉的創建
            Test test=Test.SPRING;
        }
    
  • 列舉的常用方法

    //values()方法,將列舉直接變成陣列,屬性就是元素,型別就是列舉名
    public class TestEnum {
        @Test
        //加上這個注釋就可以直接執行,不需要main方法
        public void test(){
            Season[] values = Season.values();
            for (Season value : values) {
                System.out.println(value);
            }
        }
    }
    //ordinal()方法
    Season[] values = Season.values();
            for (Season value : values) {
                System.out.println(value.ordinal());
            }
    
  • 用列舉來做一個交通信號燈的實體

    import org.junit.Test;
    
    public class TestEnum {
        TrafficLight light=TrafficLight.RED;
        public void test(){
            switch (light){
                case RED:
                    this.light=TrafficLight.GREEN;break;
                case GREEN:
                    this.light=TrafficLight.YELLOW;break;
                case YELLOW:
                    this.light=TrafficLight.RED;break;
            }
        }
        @Test
        public void test1(){
    
            for (int i = 0; i < 11; i++) {
                test();
                System.out.println(light);
            }
        }
    }
    
  • 列舉的構造方法只能用private修飾

  • 只有創建了構造器,列舉的屬性后才會有括號

    @Test
        public void test5(){
            //創建列舉  列舉屬性中的值會直接傳到構造器中,可以用構造器來給列舉的屬性賦值
            Orientation north = Orientation.NORTH;
            System.out.println(north.getcity());
        }
    
  • EnumMap是一個類(要求所有的鍵都來自同一個列舉) 是Map的子類

    @Test
        public void test9(){
            //EnumMap
            EnumMap<Orientation,String> map=new EnumMap<>(Orientation.class);//括號中要寫鍵的class
            //第二個尖括號中的泛型可以不寫
            map.put(Orientation.NORTH,"beijing");
            map.put(Orientation.SOUTH,"nanjing");
            map.put(Orientation.WEST,"xizang");
            map.put(Orientation.EAST,"shanghai");
            //先獲取他們所有的鍵
            for (Orientation o:map.keySet()){
                System.out.println(o+":"+map.get(o));
            }
        }
    

Math,Random類

  • Math類從屬于java.lang包,無參構造被private修飾

    Math類下的一些靜態的屬性與方法

    package 包;
    
    import java.sql.Date;
    import java.util.Calendar;
    import java.util.Scanner;
    import static java.lang.Math.*;//靜態匯入:將Math類中的靜態的東西全部匯入
    public class Test {
        public static void main(String[] args) {
            //圓周率
            System.out.println(PI);
            //次冪
            System.out.println(pow(3.0,2.0));
            //開平方
            System.out.println(Math.sqrt(9.0));
            //向上取值
            System.out.println(Math.ceil(9.1));
            //向下取值
            System.out.println(Math.floor(9.9));
            //四舍五入
            System.out.println(Math.round(5.1));
            //亂數   范圍[0.0,1.0)之間
            System.out.println(Math.random());
            //絕對值
            System.out.println(Math.abs(-9.2));
            //取小
            System.out.println(Math.min(2.0,9.8));
            //取大
            System.out.println(Math.max(2.0,9.6));
        }
            //如果本類中有相同的方法,那么優先走本類中的,本類中沒有,就去靜態匯入類中找
            public static double sqrt(double d){
                return 8.8;
        }
    }
    
  • Random類

    		//只要你給的數是一個值,它產生的亂數就永遠是那些,例如:你傳入了5,輸出的亂數就只會是那些
            //你要想讓這些亂數變,就必須一直改變引數
            Random r = new Random(5);
            for (int i = 1; i <= 10; i++) {
                System.out.println(r.nextInt());
            }
    		//可以通過這個方式來改變亂數
    
    		Random r = new Random(System.currentTimeMillis());
            for (int i = 1; i <= 10; i++) {
                System.out.println(r.nextInt());
            }
    
    		//也可以通過這樣的方式來改變亂數
    
    		public static void main(String[] args) {
            //因為無參構造內部呼叫的是納秒,所以無參構造的亂數是一直變的
            Random r = new Random();
            for (int i = 1; i <= 10; i++) {
                //還可以是nextDouble/nextBoolean/nextInt
                System.out.println(r.nextBoolean());
                /*
                呼叫nextDouble方法默認亂數范圍是0.0到1.0之間,取0.0不取1.0
               我們可以在nextInt方法內指定范圍,指定數字是多少,范圍就是0到多少
               例如:指定引數為10,亂數的范圍就是0到10,取0不取10
                 */
            }
        }
    

    要想讓亂數一直都是變的:1. 要么是一直改變有參構造的引數(通過呼叫毫秒等),2. 要么是直接通過無參構造創建物件

    學習random類的原因是:Math呼叫亂數的底層是呼叫random類的nextDouble方法,所以Math.random的范圍是在0.0--1.0之間

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/263198.html

標籤:Java

上一篇:手把手教你Spring Boot整合Mybatis Plus 代碼生成器

下一篇:Java中zip的壓縮和解壓縮

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more