java知识总结(6)

JAVA开发知识合集6 Optional不是一个函数式接口,而是一个精巧的工具接口,用来防止 NullPointerException产生。这个概念在后面会显得很重要,下面我们看下Optional的工作原理。Optional是一个简单的值容器,这个值可以是null,也可以是non-null。考虑到一个方法可能会返回一个non-null的值,也可能返回一个空值。为了不直接返回null,我们在Java8中就返回一个Optionalreturn t;返回空值对象。 阅读详情

  1、Identifiers:标识符

   ①Names of class,method and variable:用于类名、方法名、变量名

  ②Begin with character,"_" or "$":标识符不能以数字开头

  ③Case sensitive:大小写敏感(区分大小写)

  ④No length limitation:长度无限制

  ⑤标识符不能是Java关键字,汉字也可以做标识符,但是不建议使用(使用汉字涉及到编码问题,跨平台时回出现问题)。

  ⑥String是Java的一个类,类名是标识符,所以String可以做标识符。

  ⑦There is no sizeof operator.Java中没有sizeof运算符,所以sizeof可以作为标识符

  ⑧关键字、保留字(const、goto、true、false、null)不能用作标识符。

复制代码
 1 public class Identifiers {
 2     public static void main(String[] args) {
 3         String $abc="abc1";
 4         String _abc="abc2";
 5         //编译错误,标识符不能以数字开头
 6         //String 8abc="abc3";  
 7         String 中国="China";
 8         String String="wanghao";
 9         int Integer=22;
10         //Java中没有sizeof运算符,所以sizeof可以作为标识符
11         String sizeof="sizeof";
12         System.out.println(String);//wanghao
13         System.out.println(Integer);//22
14     }
15 }
复制代码

 

  2、Keywords:关键字

  The goto and const keyword are not used in the Java programming.

  const 保留关键字(留儿不用)。const是从C++继承而来的,但是Java并不使用const这个关键字,由于JVM是由C++编写的,因此,虽然Java并不使用const这个关键字,但却要保留下来。和const一样goto也是保留关键字!

  关键字全部用小写表示(53个)

  Strictly speaking,the literals true,false,and null are not keywords but literals;however,the distinction is academic.

true,false,and null是保留字但不是关键字,只是3个值,不能用来做关键字。

  

   3、Primitive data types:基本数据类型

  Java强数据类型只能先声明后使用。

  boolean    Boolean literals indicating true or false

  char       Stores one 16-bit unicode character

    char 同时具备字符和整数的特征。 

  byte       8-bit integer

  short      16-bit integer

  int        32-bit integer

  long       64-bit integer

    Integer Data Types-byte,short,int and long

  float       32-bit floating-point number

  double     64-bit floating-point number

  在范围内的常数可以自动转换类型,但是变量就不一定了。

  小————》大  自动转换

  大————》小  强制类型转化

  Byte相当于截取了最后8位,前面的全部舍去

复制代码
 1 public class Demo {
 2     public static void main(String[] args) {
 3         int i1 = 5;  //语句1   Right
 4         
 5         byte b1=5;   //语句2   Right
 6         byte b2=3;   //语句3   Right
 7         //byte b3=128;  //语句4  Wrong   128超出了byte的范围
 8         byte b3=(byte)128;  //语句5   Right
 9         //byte的取值范围:(-128,127)
10         byte b4=127;
11         byte b5=-128;
12         //byte b6=-129;  //-129超出了byte的范围
13         
14         long l1=5;    //语句6    Right
15         long l2=5L;   //语句7    Right
16         //b1=i1;      //语句8  Wrong   i1不能转换成b1
17         b1=(byte)i1;  //语句9  
18         l1=i1;        //语句10  Right
19         //i1=123L;    //语句11   Wrong
20         i1=(int)123L;  //语句12
21         
22         //b1=b1+b2;   //语句13   Wrong  b1+b2变成int
23         b1=(byte)(b1+b2);  //语句14
24      }
25 }
复制代码

  程序分析:

  ① 整形数据默(byte,short,int and long)认类型是int型,因此语句1正确

  ② 占用位数小的类型(简称“小类型”)向占用位数多的类型(简称“大类型”)可以自动转换,相反,大类型到小类型则要通过强制类型转换。

      如:语句6是由int---->long(自动转换)。

    语句11是由long---->int(不能进行转换,提示“可能损失精度”的错误),必须通过强制类型转换,改正后为语句12。

  ③ 语句2和语句3是由int---->byte(自动转换),这又是怎么回事呢?

    int可自动转换为byte和short而无需强制类型转换,这是因为byte和short表示的范围较小,所有小于int的整型运算,先转换为int类型,再参与运算。例如:15和20都在byte范围内但是15*20却超出了byte的表示范围,则要存放在int类型变量里面。

  ④ 既然int可以自动转换为byte和short而不需强制类型转换,那么为什么语句8会出错,需要改成语句9这样的强制类型转换呢?

    语句8表面上是int---->byte但是i1是一个int型的变量,它表示(-65535----65535)范围的整数,不能确定它的值,因此需要强制类型转换。语句4中128超出了byte的表示范围,因此不能赋值给byte变量b3需要进行强制类型转换,如语句5。

  ⑤ 强制类型转换的实质是什么呢?

    例如语句5执行的结果是:-128,这是为什么呢?

      这正是强制类型转换后的结果。int类型是32-bit,128的二进制表示形式为:00000000,00000000,00000000,10000000。Byte类型是8-bit,要把int类型强制转换成byte类型,则只截取其后8-bit,把前24-bit去除掉。因此byte b3=(byte)128;执行后的结果的二进制表示形式为:10000000,对应的整数即为-128。

  ⑥ 所有小于Int的整型运算,先转成int 再运算,因此语句13出现错误,需要进行强制类型转换,如语句14。

复制代码
 1 public class Float {
 2     public static void main(String[] args) {
 3         double d1=123.0;
 4         double d2=123.0F;
 5         //编译错误    Default data type is double
 6         //float f1=123.0; 
 7         //需要强制类型转换
 8         float f1=(float)123.0;
 9         
10         //int和long可以自动转换为float和double
11         float f2=123;
12         float f3=123L;
13         double d3=123;
14         double d4=123L;
15     }
16 }
复制代码

  Float Point Data Type-float and double

  ① Default data type is double

  ② A float data is 32-bit long

  ③ A double data is 64-bit long

  ④ A float data ends with 'f' or 'F'

  ⑤ A double data can end with 'd' or 'D'

     在计算机领域对于float和double只能表示他们的近似值。因为小数可以无限,但是计算机表示的精度是有限的。

  ⑥ int和long可以自动转换为float和double

 

  Java变量类型:

  ① 基本类型:boolean,byte,char,shot,int,long,float,double

  ② 引用类型:所有类、接口、数组、枚举、标注

  

  Recommended Naming Rules

  ① Class names begin with uppercase character

  ② Interface names begin with uppercase character

  ③ Method names begin with lowercase character

  ④ Variable names begin with lowercase character

  ⑤ Constant variable names are in uppercase character,不同单词间用“_” 隔开,例如:USER_NAME。

  ⑥ Package names are in lowercase character

  规范我们可以违背,但是我们提倡遵守,养成一种良好的习惯!

 

  4、Operators  

  Assignment operators

  =   +=   -=   %=   *=   /=    <<=     >>=     >>>=    &=    ^=      |=

复制代码
1 public class ByteDemo {
2     public static void main(String[] args) {
3         byte b1=2;
4         byte b2=3;
5         b1=(byte)(b1+b2);  // 语句1   加法,转int
6         b1+=b2;            //语句2    赋值,不转int
7     }
8 }
复制代码

  b1+=b2;是否和语句b1=b1+b2完全等价?

    答案是否定的,上面程序中的语句1和语句2给出了证明。语句1中byte类型参数与运算时要先转换为int型,因此要进行强制类型转换。而语句2中,自动进行类型转换。(我的理解:我们可以把“b11+=b2;”看做是对“b1=(byte)(b1+b2);”的优化!)

  Comparison operators

  >    >=     <     <=     instanceof

  Equality operators

  = =        !=

  Arithmetic operators

  +       -       *       /        %

  Shift operators

  >>   <<    >>>

  Bitwise operators

  &     |      ^(按位异或)   ~(按位取反)

  Logic operators

  &&  (逻辑与) &      ||  (逻辑或)  |      !(逻辑非)

  &&和&都是逻辑与,它们之间的区别:&&是短路逻辑与,有短路的效果,效率更高。

  ||和|都是逻辑或,它们之间的区别:||是短路逻辑或,有短路的效果,效率更高。

  Conditional  operators

  ? :

  Other operators

  ++    --

复制代码
 1 public class Test5 {
 2     public static void main(String [] args){
 3         int i=2;
 4         System.out.println(i++);   //2
 5         System.out.println(i);      //3
 6         int a=i++ + ++i;    //3+5=8
 7         System.out.println(a);
 8         System.out.println(i);  //5
 9         for(int j=0;j<1000;j++){
10             i=i++;
11         }
12         System.out.println(i);   //5
13     }
14 }
复制代码

  程序分析:

  为什么经过1000次循环后,i=i++;的结果仍然是5?

  (老师讲解)++的运算符优先级高于=(赋值)运算符,i++的运算结果为5,进入寄存器,这时寄存器中存放的值为5。然后i的值变为6,继续执行赋值语句,赋值时,把寄存器中的值赋5值给i,因此i的值是5和6之间来回切换的!

  (我的理解)++的运算符优先级高于=(赋值)运算符,因此这个表达式的执行顺序如下:①运算i++这个表达式的结果为5 。----> ②i的值自加1(i++先参与运算,再自加1),即i的值变为6。----> ③将i++这个表达式的值,即第①部的结果赋值给变量i。("="表达式是将右边表达式的值赋值与左边的变量,因此是将5赋于i,而不是将6赋于i)。整个循环过程i的值在5和6之间来回切换。




根据约定,在使用java编程的时候应尽可能的使用现有的类库,当然你也可以自己编写一个排序的方法,或者框架,但是有几个人能写得比JDK里的还 要好呢?使用现有的类的另一个好处是代码易于阅读和维护,这篇文章主要讲的是如何使用现有的类库对数组和各种Collection容器进行排序,(文章中的一部分例子来自《Java Developers Almanac 1.4》)

  首先要知道两个类:java.util.Arrays和java.util.Collections(注意和Collection的区 别)Collection是集合框架的顶层接口,而Collections是包含了许多静态方法。我们使用Arrays对数组进行排序,使用 Collections对结合框架容器进行排序,如ArraysList,LinkedList等。

  例子中都要加上import java.util.*和其他外壳代码,如类和静态main方法,我会在第一个例子里写出全部代码,接下来会无一例外的省略。

 

  对数组进行排序

  比如有一个整型数组:

  1. int[] intArray = new int[] {4, 1, 3, -23}; 

  我们如何进行排序呢?你这个时候是否在想快速排序的算法?看看下面的实现方法:

  1. import java.util.*;  
  2. public class Sort{  
  3.     public static void main(String[] args){  
  4.         int[] intArray = new int[] {4, 1, 3, -23};  
  5.         Arrays.sort(intArray);  
  6.     }  
  7. }  

  这样我们就用Arrays的静态方法sort()对intArray进行了升序排序,现在数组已经变成了{-23,1,3,4}.

  如果是字符数组:

  1. String[] strArray = new String[] {"z", "a", "C"}; 

  我们用:

  1. Arrays.sort(strArray); 

  进行排序后的结果是{C,a,z}

  进行排序后的结果是{C,a,z},sort()会根据元素的自然顺序进行升序排序。如果希望对大小写不敏感的话可以这样写:

  1. Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER); 

  当然我们也可以指定数组的某一段进行排序比如我们要对数组下表0-2的部分(假设数组长度大于3)进行排序,其他部分保持不变,我们可以使用:

  1. Arrays.sort(strArray,0,3); 

  注意:

 

sort(double[] a, int fromIndex, int toIndex)

参数:
a - 要排序的数组。
fromIndex - 要排序的第一个元素的索引(包括)。
toIndex - 要排序的最后一个元素的索引(不包括)。

  这样,我们只对前三个元素进行了排序,而不会影响到后面的部分,结果为{1, 3, 4, -23}。

  当然有人会想,我怎样进行降序排序?在众多的sort方法中有一个

  1. sort(T[] a, Comparator<? super T> c) 

  我们使用Comparator获取一个反序的比较器即可,Comparator会在稍后讲解,以前面的intArray[]为例:

 

复制代码
 1 public class Sort {
 2     public static void main(String[] args) {
 3         Integer[] intArray = {4, 1, 3, -23};
 4         Arrays.sort(intArray, new Comparator<Integer>() {
 5             public int compare(Integer o1, Integer o2) {
 6                 return o2-o1;
 7             }
 8         });
 9         System.out.println(Arrays.toString(intArray));
10     }
11 }
复制代码

 

  这样,我们得到的结果就是{4,3,1,-23}。如果不想修改原有代码我们也可以使用:

  1. Collections.reverse(Arrays.asList(intArray)); 
复制代码
1 public class Sort {
2     public static void main(String[] args) {
3         Integer[] intArray = {4, 1, 3, -23};
4         Arrays.sort(intArray);
5         Collections.reverse(Arrays.asList(intArray));
6         System.out.println(Arrays.toString(intArray));
7     }
8 }
复制代码

  得到该数组的反序。结果同样为{4,3,1,-23}。

 

  现在的情况变了,我们的数组里不再是基本数据类型(primtive type)或者String类型的数组,而是对象数组。这个数组的自然顺序是未知的,因此我们需要为该类实现Comparable接口,比如我们有一个Name类:

复制代码
 1 class Name implements Comparable<Name>{  
 2     public String firstName,lastName;  
 3     public Name(String firstName,String lastName){  
 4         this.firstName=firstName;  
 5         this.lastName=lastName;  
 6     }  
 7     //实现接口 
 8     public int compareTo(Name o) {           
 9         int lastCmp=lastName.compareTo(o.lastName);  
10         return (lastCmp!=0?lastCmp:firstName.compareTo(o.firstName));  
11     }    
12     //便于输出测试  
13     public String toString(){                
14         return firstName+" "+lastName;  
15     }  
16 }
复制代码

  这样,当我们对这个对象数组进行排序时,就会先比较lastName,然后比较firstName 然后得出两个对象的先后顺序,就像compareTo(Name o)里实现的那样。不妨用程序试一试:

复制代码
 1 public class NameSort {  
 2      public static void main(String[] args) {  
 3          Name nameArray[] = {  
 4             new Name("John", "Lennon"),  
 5             new Name("Karl", "Marx"),  
 6             new Name("Groucho", "Marx"),  
 7             new Name("Oscar", "Grouch")  
 8         }; 
 9         Arrays.sort(nameArray);  
10         System.out.println(Arrays.toString(nameArray));;  
11     }  
12 } 
复制代码

  结果正如我们所愿:[Oscar Grouch, John Lennon, Groucho Marx, Karl Marx]

 

  对集合框架进行排序

  如果已经理解了Arrays.sort()对数组进行排序的话,集合框架的使用也是大同小异。只是将Arrays替换成了Collections,注意Collections是一个类而Collection是一个接口,虽然只差一个"s"但是它们的含义却完全不同。(Comparator and Comparable及Collections and Collection的用法和区别)

  假如有这样一个链表:

  1. LinkedList list=new LinkedList();  
  2. list.add(4);  
  3. list.add(34);  
  4. list.add(22);  
  5. list.add(2); 

  我们只需要使用:

  1. Collections.sort(list); 

  就可以将ll里的元素按从小到大的顺序进行排序,结果就成了:

  1. [2, 4, 22, 34] 

  如果LinkedList里面的元素是String,同样会想基本数据类型一样从小到大排序。

  如果要实现反序排序也就是从大到小排序:

  1. Collections.sort(list,Collectons.reverseOrder()); 
复制代码
 1 public class Sort2 {
 2     public static void main(String[] args) {
 3         LinkedList<Integer> list=new LinkedList<Integer>();  
 4         list.add(4);  
 5         list.add(34);  
 6         list.add(22);  
 7         list.add(2); 
 8         Collections.sort(list, Collections.reverseOrder());
 9         System.out.println(list.toString());
10     }
11 }
复制代码

  结果为:[34, 22, 4, 2]

 

  如果LinkedList里面的元素是自定义的对象,可以像上面的Name对象一样实现Comparable接口,就可以让Collection.sort()为您排序了。

  如果你想按照自己的想法对一个对象进行排序,你可以使用

  1. sort(List<T> list, Comparator<? super T> c) 

  这个方法进行排序,在给出例子之前,先要说明一下Comparator的使用,Comparable接口的格式:

  1. public interface Comparator<T> {  
  2.     int compare(T o1, T o2);  
  3. }  

  其实Comparator里的int compare(T o1,T o2)的写法和Comparable里的compareTo()方法的写法差不多。在上面的Name类中我们的比较是从LastName开始的,这是西方人的习惯,到了中国,我们想从fristName开始比较,又不想修改原来的代码,这个时候,Comparator就可以派上用场了:

  1. final Comparator<Name> FIRST_NAME_ORDER=new Comparator<Name>() {  
  2.     public int compare(Name n1, Name n2) {  
  3.          int firstCmp=n1.firstName.compareTo(n2.firstName);  
  4.          return (firstCmp!=0?firstCmp:n1.lastName.compareTo   
  5.                  (n2.firstName));  
  6.     }  
  7. };  

  这样一个我们自定义的Comparator FIRST_NAME_ORDER就写好了。

  将上个例子里那个名字数组转化为List:

  1. List<Name> list=Arrays.asList(nameArray);  
  2. Collections.sort(list,FIRST_NAME_ORDER); 

  这样我们就成功的使用自己定义的比较器设定排序。







java虚拟机内存原型

  寄存器:我们在程序中无法控制

  栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中

  堆:存放用new产生的数据

  静态域:存放在对象中用static定义的静态成员

  常量池:存放常量

  非RAM存储:硬盘等永久存储空间

 

  Java内存分配中的栈

  栈的基本单位是帧(或栈帧): 每当一个java线程运行的时候, java虚拟机会为该线程分配一个java栈。该线程在执行某个java方法的时候, 向java栈压入一个帧, 这个帧用于存储参数、局部变量、操作数、中间运算结果等。当这个方法执行完的时候, 帧会从栈中弹出。Java栈上的所有数据是私有的,其他线程都不能该线程的栈数据。

  在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。

  当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当该变量退出该作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。

 

  Java内存分配中的堆

  java虚拟机中的堆用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动的垃圾回收机制来管理堆的内存。

  简单的说和栈相对,堆主要是用来存放java对象的,栈主要是用来存放对象引用的...在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。引用变量就相当于是为数组或者对象起的一个名称。

  引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被释放。而数组和对象本身在堆中分配,即使程序运行到使用 new 产生数组或者对象的语句所在的代码块之外,数组和对象本身占据的内存不会被释放,数组和对象在没有引用变量指向它的时候,才变为垃圾,不能在被使用,但仍然占据内存空间不放,在随后的一个不确定的时间被垃圾回收器收走(释放掉)。这也是 Java 比较占内存的原因。

  实际上,栈中的变量指向堆内存中的变量,这就是Java中的指针!

  Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、 anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。

  栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量数据(int, short, long, byte, float, double, boolean, char)和对象句柄(引用)。

  栈有一个很重要的特殊性,就是存在栈中的数据可以共享。假设我们同时定义:

1 int a=3;
2 int b=3;

  编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找栈中是否有3这个值,如果没找到,就将3存放进来,然后将a指向3。接着处理int b = 3;在创建完b的引用变量后,因为在栈中已经有3这个值,便将b直接指向3。这样,就出现了a与b同时均指向3的情况。

  这时,如果再令 a=4;那么编译器会重新搜索栈中是否有4值,如果没有,则将4存放进来,并令a指向4;如果已经有了,则直接将a指向这个地址。因此a值的改变不会影响到b的值。要注意这种数据的共享与两个对象的引用同时指向一个对象的这种共享是不同的,因为这种情况a的修改并不会影响到b, 它是由编译器完成的,它有利于节省空间。而一个对象引用变量修改了这个对象的内部状态,会影响到另一个对象引用变量。

  常量池 (constant pool)

  常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值(final)还包含一些以文本形式出现的符号引用,比如:

  1、类和接口的全限定名;

  2、字段的名称和描述符;

  3、方法和名称和描述符。

  虚拟机必须为每个被装载的类型维护一个常量池。常量池就是该类型所用到常量的一个有序集和,包括直接常量(string,integer和 floating point常量)和对其他类型,字段和方法的符号引用。

  对于String常量,它的值是在常量池中的。而JVM中的常量池在内存当中是以表的形式存在的, 对于String类型,有一张固定长度的CONSTANT_String_info表用来存储文字字符串值,注意:该表只存储文字字符串值,不存储符号引用。说到这里,对常量池中的字符串值的存储位置应该有一个比较明了的理解了。

  在程序执行的时候,常量池会储存在Method Area,而不是堆中。



FPGA网络通信实战:从RGMII接口到UDP协议栈的完整设计 在嵌入式开发中,网络通信是连接硬件与外部系统的关键能力。FPGA凭借硬逻辑、低延迟和可定制特性,成为实现高速数据交换的理想平台。要构建稳定的网络通路,需从底层物理接口着手,理解RGMII信号时序、PHY芯片配置及MDIO管理机制。在此基础上,通过协议裁剪实现以太网帧解析、CRC校验、ARP应答与UDP报文收发,既满足实时性要求,又避免TCP带来的资源开销。设计数据通路时,还需解决跨时钟域缓冲、异步FIFO背压、时钟约束及字节序等工程难题。本文以千兆网口为例,系统拆解从硬件链路到协议逻辑的完整设计流程,帮助开 阅读详情

相关推荐

java每天知识3.6

假设我们的电商系统需要处理订单的创建、计算订单总金额以及判断订单是否满足优惠条件等业务逻辑。

daqsdfas的博客 1073

带你彻底认识String

很明显两个之间的引用不是指向同一个地方,我在上面也提到了,不知道大家有没有注意,使用newString创建String时会先在堆上创建字符串对象,驻留到字符串常量池,并将字符串的引用压入操作数栈,所以在将字符串驻留到常量池时发现已经有ABCD这个字符串,于是直接返回ABCD的地址,但是这个地址只是保存在堆中,栈里存放的还是堆里创建的对象地址。最后,当执行Strings2="Hydra"时,发现字符串常量池中已经驻留这个字符串,直接返回对象的引用,因此s1和s2指向的是相同的对象。.........

zhiyikeji的博客 473

【Java基础知识 6】Java异常详解

一、try catch简介 大家对trycatch可能并不陌生,也都使用的非常熟练了。 当程序运行过程中发生错误时,就会抛出异常,抛出异常总比终止程序来的好的多。 也可以在已知某个错误要发生时,进行trycatch操作,异常时进行某些特有操作。 1、异常分为两种类型 未检查异常和已检查异常。 对于已检查异常,编译器将会检查是否提供了处理器。 然而,有很多常见的异常,比如空指针异常,都属于未检查异常,编译器不会发现这个地方是否会爆空指针异常。 2、简单语法 try{ //代码区 }

学Java,找哪吒 1万+

JAVA_基础语法1

一.标识符    二.关键字    三.JAVA基础数据类型 3.1. java常量    3.2. java变量      从本质上来讲,变量其实是内存里面的一小块区域,一个程序在运行的时候,实际上这个程序是位于内存里面,然后才开始运行。一个.exe文件存放在硬盘上是无法运行的,在硬盘上看到的.exe文件无非就是一个文件而已,当我们双击这个.exe文件时,运行起来的时候实际上是

GitHubClub 1144

【Java基础知识 6】Java异常有哪几种

在理想的国度,用户输入数据的格式都是正确的,选择打开的文件也都是存在的,调用的第三方接口也都是网络稳定,程序的代码也是永远都没有bug的。

学Java,找哪吒 6631

SCJP 1.6 Java基础知识全解析

本文还有配套的精品资源,点击获取 简介:SCJP(Sun Certified Programmer for the Java 2 Platform, Standard Edition 6)是Oracle公司推出的Java程序员认证考试,主要针对Java 1.6版本。本课程设计提供了SCJP 1.6考试前六章的核心知识点,包括Java历史、基础语法、数据类型、控制流、方法使用...

weixin_33239721的博客 1011

java中的String是不是关键字

只要学过一点Java知识的读者,对下面这段代码一定不陌生。 public class HelloWorld{ public static void main(String[] args){ System.out.println("Hello world"); } } 1 2 3 4 5 这里笔者想就这段代码探讨几个概念性的问题: String 是关键字...

sulaymanyf的博客 9015

ArcGIS+PLUS+InVEST三件套实战:从零搞定土地利用变化与碳储量预测(附完整数据包)

本文详细介绍了如何整合ArcGIS、PLUS模型和InVEST模型,构建土地利用变化与碳储量预测的完整研究流水线。通过多情景模拟和生态系统服务评估,提供从数据准备到结果验证的实战指南,助力研究者高效完成生态评估项目。

weixin_30399821的博客 543

MFC “string”: 未声明的标识符

//使用string要包含下面两个 #include #include using namespace std;

ToneChip的专栏,一个传统的嵌入式码农,裸机编程 9537

Ubuntu终端接入Codex:一行脚本搞定AI编程助手安装与配置

在开发者日常工作中,命令行终端是最高频的操作环境,而AI编程助手的出现正在改变传统的编码方式。通过将大模型能力与终端工具链结合,开发者无需切换窗口即可完成命令查询、代码生成、项目理解和自动执行等任务。Ubuntu作为服务器和开发机的主流系统,搭配Node.js生态和API Key认证,即可在本地闭环运行AI助手。本文从环境准备、密钥配置、权限管理到自动化脚本封装,系统拆解在终端中接入Codex的完整流程,并分享高频用法与实测排障经验,帮助开发者安全、高效地让AI融入命令行工作流。

weixin_29061041的博客 321

5分钟搞懂基因组规模代谢网络(GSMM):从数据库选择到模型构建全流程

本文详细解析基因组规模代谢网络(GSMM)构建的全流程,从数据库选择到模型优化。重点介绍MetaCyc、BiGG等主流数据库的黄金三角评估法则,对比自上而下与自下而上两种建模方法,并提供模型修剪、仿真优化的实用技巧与避坑指南,帮助研究者高效构建精准代谢网络模型。

weixin_30872157的博客 135

using namespace std

using namespace std 求助编辑百科名片 所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。 目录 二、namespace是指标识符的各种可见范围 三、简便理解 展开   一 、和和格式不

ts_rfl的专栏 1043

VS2022跨平台开发实战:SSH远程调试Linux程序全攻略

本文详细介绍了如何使用Visual Studio 2022进行跨平台开发,通过SSH协议远程调试部署在Linux服务器上的C/C++程序。文章提供了从环境搭建、连接配置、项目创建到编译调试的完整实战指南,帮助Windows开发者无缝衔接Linux环境,显著提升问题定位与开发效率。

weixin_28826521的博客 429

如何提升Java基础知识?从这6点出发

近来不少程序员小哥哥问汇智妹,如何才能提升自己的java基础?看来诸位是想着巩固java基础,准备加薪跳槽的节奏呀! 从无数“莘莘学子”java面试情况来看,现在基本上大厂或者上市公司的java基础要求主要是你的扎实基础和思维逻辑。 很多都要问java底层实现,这个对很多的初学者(面向工作学习者)来说还真有一点难度。但普通公司基本上以基础练习和理论为主,比如:多线程问题、集合结构底层实现、jvm知识等。 这里汇智妹给到6点建议: 1、熟练java基础,多练...

成都汇智动力的博客 683

幸狐RV1106开发板运行Yolo8示例

rknn_model_zoo 是瑞芯微官方提供的 RKNPU 支持的各种主流算法的部署示例,目前对 Luckfox Pico 所使用的 RV1103/RV1106 有限支持,最新的示例支持 mobilenet 模型部署和 yolo 模型部署,本章以部署 yolov8修改版本为例介绍 rknn_model_zoo 示例的使用。:可选项,用于指定 RKNN 模型的保存路径,默认保存在 ONNX 模型同一目录下,名称为 ‘yolov8.rknn’例如“rv1106”。

qq_42730522的博客 3223

【4. BSP开发指南 - [4.6. 安全启动使用说明]】

【4. BSP开发指南 - [4.6. 安全启动使用说明]】

Sugar_wolf的博客 273

初学Java该学哪些知识?这6大知识必学

目前,Java是开发人员的热宠,很多论坛都有不少热爱Java的开发人员,也有不少想成为Java程序员,但苦于不知道该如何学习Java,也不清楚该学些什么知识才能成为一个Java程序员。

xiaoxijinger的博客 2439

全志A133的AndroidSDK

本小节来学习如何下载全志安卓SDK,SDK的目录,编译和烧录提示:以下是本篇文章正文内容,下面案例可供参考以上就是整个SDK的目录和编译烧录,目的在于让初学者快速了解整个源码的目录和编译出镜像喜欢就订阅吧。

qq_24093081的博客 4054

Java不可不知的6个小知识

Java不可不知的7个小知识 1、assert用法 (1)新增关键字(语法),用于测试boolean表达式状态,可用于调试程序 (2) assert <boolean表达式>,(true)则下面的语句执行,否则抛出AssertionError。 (3)assert < boolean表达式>:<other表达式>,(true)后面的表达式忽略,否则后面表达式的值...

Bug君的博客 156

手把手教你学Simulink——基于Simulink的机械臂正运动学仿真建模示例

机械臂正运动学概述正运动学的核心在于根据每个关节的角度值,通过坐标变换(如DH参数法或齐次变换矩阵)计算出末端执行器相对于基座的位置和姿态。常用的数学工具包括旋转矩阵、平移向量以及它们组合而成的齐次变换矩阵。仿真目标设计并实现一个机械臂正运动学模型。输入关节角度,输出末端执行器的位置和姿态。分析不同关节角度下的机械臂位置变化。假设我们有一个简单的3自由度(DOF)平面机械臂,其各关节的长度分别为l1l1​、l2l2​和l3l3​。在Simulink中,可以使用。

MHD0815的博客 359

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java知识详解6~{网络}

本文主要介绍了关于Java网络的知识点,帮助初学者进行理解

Chinachen优快云的博客 1944

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java面向对象与程序设计1~6章核心知识点

理解方法的重载和递归需要一定的时间和练习,我通过实际编写代码来体会它们的工作原理,并且多参考优秀的代码示例来学习如何合理使用方法。静态成员属于类,而不是类的实例,在类加载时被初始化,且只被初始化一次。注解,它会让编译器检查是否正确重写了父类的方法,如果没有重写,编译器会报错。块中的代码都会执行,通常用于资源的释放,如关闭文件、数据库连接、网络连接等。关键字实现,子类可以继承父类的属性和方法,实现代码复用和层次化的类设计。:用于声明方法可能抛出的异常,将异常的处理责任交给调用该方法的代码。

m0_62624387的博客 815

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Java知识点6

1、集合的作用:用于存储、管理一组数据,相比数组更灵活(动态扩容、丰富操作方法 ),解决数组长度固定、操作功能有限问题。2、集合框架体系:主要包含Collection(单列集合,存储单个元素 )和Map(双列集合,存储键值对 )两大分支,还有迭代器、泛型等辅助机制。

2502_90670808的博客 741

Java基础知识(6)

(1)· 任何字符(2)\d一个数字: [0-9](3)\D非数字:[^0-9](4)\s一个空白字符:[\t\n\x0B\f\r](5)\S非空白字符: [^\s](6)\w [a-zA-Z_0-9]英文、数字、下划线(7)\W [^\w]一个非单词字符// false注意:1)\表示转义字符2)\\ 前面的\是一个转义字符,改变了后面\原本的含义,把他变成一个普普通通的\而己。(1)Calendar代表了系统当前时间的日历对象,可以单独修改、获取时间中的年,月,日.

2301_79676344的博客 1071

java基础知识【6】

java基础知识

woxinhaolei的博客 379

ES6新特性最常用的知识点总结,2024年Java知识体系总结

4.正则====1>.两种用法One:Regex r=new Regex(‘匹配规则’,’修饰’)Two:Regex r=/匹配的东西/修饰Regex 其中 I g y为修饰符2>.sticky属性 是否有修饰符Flags 返回匹配修饰符3>.支持为后行断言5.数组====1>.可以用const […a2]=a1直接进行赋值,两个变量互换也是可以的2>.利用[]可以进行多个数组合并3>.与结解构相结合例如:[a,…rest]=list list为数组6.函数====

ghfgjfg679的博客 347
上一篇: java知识总结(5)
下一篇: java知识总结(7)
freemindhack
博客等级 码龄13年 53粉丝 182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值