欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

(1):java基础知识笔记,java基础知识笔记

来源: javaer 分享于  点击 19383 次 点评:79

(1):java基础知识笔记,java基础知识笔记


一:JDK,JRE,JVM三者的区别

      JDK:(Java Development Kit)是整个Java的核心,包括了java运行环境JRE,Java工具和Java基础类库。包含JVM标准实现及java核心类库。也可以这么说吧:JDK =JRE +JVM +其他

      JRE:(Java Runtime Enviroment)java运行时环境,也就是我们说说的Java平台,所有的java程序都要在jre下才能运行,包括jvm和java核心类库和支持文件。

      JVM:Java Virtual Mechinal (Java虚拟机),它是整个Java实现跨平台的最核心的部分,所有的java程序都会首先被编译为.class字节文件,这种类文件可以在虚拟机上执行。


二:Java标识符

      标识符:用于给程序中变量,类,方法命名的符合。

      规则:必须以字母,下划线,美元符号开头,后面可以跟任意数目的字母,下划线和美元符号。不可以是48个关键字和保留字。不可以包含空格。

       类、 变量或方法的命名规则:类的命名,首字母要大写,如果由多个单词组成,那么每一个单词的首字母都要大写。----à驼峰命名法。变量和方法,第一个单词的首字母要小写,后面的要大写,常量,所有的字母要大写。


三:数据类型

      Java语言支持的类型分为二类:①:基本数据类型     ②:引用数据类型

            基本数据类型:整形类型(byte(占1个字节),short(占2个字节),int(占4个字节),long(占8个字节),char(占2个字节)),浮点类型(float(占4个字节),double(占8个字节))和boolean类型。

            引用类型:接口,数组类型,null类型,引用数据类型就是一个对象的引用,对象包括实例对象和数组。


四:数据类型之间的转换

        不同类型之间是可以相互转换的,有二种方式:

        自动类型转换:小范围的可以向大范围自动进行转换。

---->Byte à short-à int --àlongàfloat-àdouble

----->Char àint à long à float -àdouble

注意了:当任何基本数据类型和字符串进行连接时,都会将其转换为字符串类型。 将不会保存原来的基本数据类型,字符串不是基本数据类型,是一个引用类型。

        强制类型转换:大范围的也是可以向下范围的转换,需要进行强制类型转换,在小范围的类型之前加上类型。经典的二句话如下:

        所有的byte,short,char类型会自动提升为Int 类型。

整个算术表达式的类型会自动提升到最高表达式类型。


五:流程控制

  顺序结构:程序从上到下一行一行地执行,中间没有任何判断和跳转

分支结构:根据条件选择性的执行某段代码,有常见的二种,if语句和switch语句:if语句使用布尔表达式或布尔值作为分支条件来进行分支控制,if之后的括号里只能是一个逻辑表达式,也就是说表达式的返回值只能是true或false,switch语句则用于对多个整形值(jdk1.7后,支持字符串)进行匹配,从而实现了分支控制。

循环结构:根据循环条件重复执行某段代码,循环语句包含4个部分:①:初始化语句。②:循环条件。③:循环体④:迭代语句

循环结构:while循环,do while()循环,for()循环。

注意了:这里有一个很重要的知识:使用continue和Break来控制循环,二者的区别呢?

Continue是终止本次循环,接着开始下一次循环

Break:是完全终止循环。跳出循环体,开始执行循环之后的代码。

当然:这里还讲到了使用return来结束循环,我们知道return 一般是结束一个方法的,显然,方法里是可以写循环结构的,所有return 是可以结束循环的。也就是说结束一个方法也就是结束了循环。



六:数组

除了基本数据类型外,还有一种叫引用数据类型,而数组就是一种引用数据类型,数组里面只能存放一种数据元素的数据类型。

Ø  定义数组:二种方式,但一般推荐使用第一种

①  :type[]  arrayName;

②  :type  arrayName[];

注意了:因为数组是一种引用数据类型,当用数组定义一个变量时,仅仅表示定义了一个引用变量(相当于C中的指针变量),这个引用变量没有指向任何有效的内存空间(也就没有什么地址),是不能直接使用的,需要初始化后才能使用,C中的指针也是一样的,也是需要初始化后才能使用的。

 

Ø  数组的初始化

定义:就是为数组元素分配内存空间,并为每一个数组元素进行赋值

静态初始化:type []arrayName = new type[]{e1,e2,,e3…en};

动态初始化:type[]arrayName = new type[length];

遍历数组:使用foreach循环遍历数组,这个是jdk1.5后新添加的功能。

For(type  variableName:arrayName){

      System.out.println(variableName);

}

简单的for循环遍历这里就不写了。

 

 

Ø  数组在内存中的分配方式

数组是一种引用数据类型,定义了数组名仅仅是定义了一个引用变量,我们访问数组是使用这个引用变量来访问数组的。这个引用变量是分配在内存中的栈内存空间,而初始化后数组元素是在内存中的堆内存空间分配的。这一点要要知道。

当我们定义了一个这样的数组:

int [] p = new int[]{1,2,3,4};

 

 



     

那么为什么会有栈内存和堆内存呢?我们访问堆内存中的数组元素是通过p [index]的形式来访问的。P指向的是堆内存空间的首地址。

当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐一放进这块栈内存中(也就是说栈内存通常用来存放变量)。随着方法的执行结束,这个方法的内存栈也将自然销毁。当我们在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复使用(对象的创建成本大),这个运行时数据区就是堆内存,堆内存的对象不会随方法的结束而销毁,即使方法结束后,这个对象还肯能被另一个引用变量所引用(方法的参数传递),则这个对象依然不会被销毁,只有当一个对象没有任何引用时,系统的垃圾回收机制才会在合适的时候进行回收。

Ø  引用类型数组的初始化

引用类型数组的数组元素是引用,每个数组元素里存储的还是引用,它指向另一块内存。这块内存里存储了有效的数据元素。

这里将列举一个例子:

定义一个Person类(所有的类都是引用类型),代码如下;

public class Person {

   private int age;

   private double height;

  

   public void info(){

      System.out.println("Person:"+age+";"+height);

   }

}

接下来定义一个Person[] person数组,并动态初始化这个person数组,并为数组中的元素赋值。

public classTestPerson {

   public static voidmain(String[] args) {

      Person[] person = newPerson[2];//定义一个person数组变量,类型是Person[],并给它动态初始化

     

      Person person1 = new Person();//创建一个Person实例,并把这个Person实例赋给person1引用变量。

      person1.setAge(20); //person1引用变量所指向的Person对象的属性赋值

      person1.setHeight(175.0);

     

      Person person2 = new Person();//创建一个Person实例,并把这个Person实例赋给person2这个引用变量

      person2.setAge(22);//person2引用变量所指向的Person对象的属性赋值

      person2.setHeight(180.0);

     

      person[0] = person1; //person1变量的值赋给第一个数组元素

      person[1] = person2; //person2变量的值赋给第二个数组元素

     

      //下面的结果是一样的,person1person[0]指向的是同一个Person实例对象

      person1.info();

      person[0].info();

     

   }

}

①  :执行Person []person = new Person[2];

 

 

 

②  :Person  person1 = new Person(),Person person2 = new Person()后,

也就是说定义了person1和person2二个Person实例对象,此时在栈中定义了二个引用变量,在堆中存储了二个Person()对象的实例。

 

 


③  :此时,person数组中的二个元素依然是null,直到person[0] =person1,person[1] =person2; person数组里面的二个元素才指向有效的内存空间。

 

 

 


④  :person1和person[0]指向的是同一块内存空间,所以结果都是一样的。


 

Ø  二维数组

定义:采用 type[][]arrayName的形式来定义二维数组,但它的实质还是一维数组,只是其数组元素也是引用,数组元素里保存的引用指向一维数组。

看下面的程序,将可以彻底明白二维数组到底是怎么一回事。

public class TestErWei{

   public static voidmain(String[] args) {

      int [][]a;

      a = new int[3][];

      for(int i=0;i<a.length;i++){

         System.out.println(a[i]); //

      }

      a[0] = new int[2];

     

      a[0][1] = 6;

      a[1] = new int[3];

      a[1][0] = 7;

      a[1][1] = 8;

      a[1][2] = 9;

      a[2] = new int[3];

      a[2][0] = 10;

      a[2][1] = 11;

      a[2][2] = 12;

      for(int i=0;i<a[0].length;i++){

         System.out.println(a[0][i]);

      }

      for(int i=0;i<a[1].length;i++){

         System.out.println(a[1][i]);

      }

      for(int i=0;i<a[2].length;i++){

         System.out.println(a[2][i]);

      }

   }

}

①  :定义一个二维数组并初始化 int [][] a = new int[3][];

 

 


说明:这里声明并定义了一个二维数组,但和我们的一维数组没什么二样吧,完全可以当成一维数组来处理,一维数组的长度为3。只是这三个数组元素都是引用类型,

②  :a数组的元素必须是int[]类型的数组,接下来对三个数组元素进行初始化,

int a[0 ] =  new int[2],int a[1] = new int[3], int a[2] = new int[3]。

并且依次给三个数组元素进行赋值。

 



从上面的程序中可以看出,初始化多维数组时,可以指定最左边维数的大小,当然,也是可以一次性指定每一维数组的大小。

看下面的程序吧,输出的就是3行4列了。输出的默认都是0。

int [][] b = new int[3][4];

      for(int i=0;i<b.length;i++){

         System.out.println(b);

      }

      for(int i=0;i<b[0].length;i++){

         System.out.print(b[0][i]);

      }

      System.out.println("\n");

      for(int i=0;i<b[1].length;i++){

         System.out.print(b[1][i]);

      }

      System.out.println("\n");

      for(int i=0;i<b[2].length;i++){

         System.out.print(b[2][i]);

    }

练习:



1.对下列代码,若有输出,指出输出结果int x=2;
int y=3;if(x>2)
{
if(y>2)
{ int z=x+y;
    System.out.println(“z is ”+z);
 
  }
 
}else
{
System.out.println(“x is ”+x)
};
 
  
=================================
 答案:x is 2 
==================================


2.使用switch语句改写下列if语句:
 
  int a = 3;
  
int x = 100;
  
if(a==1) x+=5;

else if(a==2)

x+=10;

else if(a==3)
x+=16;

else if(a==4)

x+=34;
 
else

x += 100;
===========================================
int a = 3;
int x = 100;
switch(a){
case 1:
 x+= 5;
 break;
case 2:
 x+= 10;
 break;
case 3:
 x+= 16;
 break;
case 4:
 x+= 34;
 break;
default:
 x+=100;
 break;


}


==================================================

3.编写程序:从键盘上读入一个学生成绩,存放在变量score中,根据score的值输出其对应的成绩等级:
score>=90           等级:A
70=<score<90     等级 :  B
60=<score<70     等级:  C


score<60              等级:D


======================================================
import java.util.*;
public class TestScore{
public static void main(String []args){
double score;
Scanner in = new Scanner(System.in);
score = in.nextInt();
if(score>=90){
       System.out.println("等级A");
}else if(70<score<90){
System.out.println("等级B");
}else if(60<score<70){
System.out.println("等级C");
}else{
System.out.println("等级D");
}
}
}

======================================================

4.编写程序:求1到100之间所有偶数的和。用do/while 、while语句分别完成。
  编写程序:从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序


=======================================================
①:while
public class TestSum{
public static void main(String []args){
int sum = 0;
int i=0;
while(i<=100){
if(i%2==0){
sum += i;
}
i++;
}
System.out.println(sum);
}
}
②:do while
public class TestSum{
public static void main(String []args){
int sum = 0;
int i = 0;
do{
if(i%2==0){
sum +=i;
}
i++;
}while(i<=100);
}
}
③:
import java.util.Scanner;
public class Test01 {
public static void main(String[] args) {
System.out.println("随便输入整数");
int num;
Scanner in = new Scanner(System.in);
num = in.nextInt();
int sum_z = 0;
int sum_y = 0;
while(num!=0){
num = in.nextInt();
if(num>0){
sum_z ++;
}else if(num<0){
sum_y++;
}else{
System.out.println("正常结束!");
}
}
System.out.println("正数的个数:"+sum_z);
System.out.println("负数的个数为:"+sum_y);

}
}


===========================================================

5.(1)定义类Pritimive,在类中定义一个有3个元素的boolean类型的数组t作为其成员变量。数组元素未赋值。
定义类Array1,在Array1的main()方法中创建Pritimive对象d,输出其成员变量t的三个元素值。
练习目的:检验基本数据类型数组创建时的自动赋值。
(2)给对象d的成员变量t赋值为{true,true,true},并输出t的三个元素值。
====================================================


①:
class Pritimive{
boolean[] t = new boolean[3];
}
public class Array1{
public static void main(String []args){
Pritimive d = new Pritimive();
for(boolean t1:t){
System.out.println(t1);
}
}
}
②:
class Pritimive{
boolean[] t = new boolean[]{true,true,true};

}
public class Array1{
public static void main(String []args){
Pritimive d = new Pritimive();
for(boolean t1:t){
System.out.println(t1);
}
}
}


====================================================


6.使用简单数组(1)创建一个名为TestArray的类,在main()方法中声明array1和array2两个变量,他们是int[]类型的数组。(2)使用大括号{},把array1初始化为8个素数:2,3,5,7,11,13,17,19。
(3)显示array1的内容。
(4)赋值array2变量等于array1,修改array2中的偶索引元素,使其等于索引值(如array[0]=0,array[2]=2)。打印出array1。


======================================================
array[0] = 0;
2,3,5,7,11,13,17,19
0 1 2 3  4  5  6 7 


public class Test04 {
public static void main(String[] args) {
int []array1 = new int[]{2,0,5,7,8,3,9,4};
int []array2 = new int[8];
for(int arr1:array1){
System.out.print(arr1);
}
System.out.println("\n");
array2 = array1;
for(int i=0;i<array2.length;i++){
if(array2[i]%2==0){
if(array2[i]<array2.length){
int s = array2[array2[i]];
array2[array2[i]] = array2[i];
array2[i] = s;
}
}
}
System.out.println("\n");

for(int i =0;i<array2.length;i++){
if(array2[i]%2==0){
System.out.println("array2[i]:"+array2[i]);
}
}
System.out.println("\n");

for(int arr1:array1){
System.out.print(arr1);
}
}
}


======================================================


7. 
求二维数组(3行3列)的对角线元素的和


 ======================================================
* * *
* * * 
* * *
1 2 3
4 5 6
7 8 9
=1+5+9(15)
=3+5+7(15)
= 30


public class Test03 {
public static void main(String[] args) {
int [][]array = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
int i=0;
int sum = 0;
for(i=0;i<3;i++){
sum = sum +array[i][i]; //斜向右下脚
}
for(i=1;i<=3;i++){
sum = sum +array[3-i][i-1]; //斜向左下脚
}
System.out.println(sum);
}
}
======================================================


相关文章

    暂无相关文章
相关栏目:

用户点评