第二周Java学习周总结

10.31晨写

1.位运算中位异或的特点?
位异或:一个数据被另一个数据位异或两次,就是它本身!
位异或^:相同为0,不同为1

2.流程控制语句if...else...它的执行流程
格式:
    if(表达式){
        语句 1;
    }else{
        语句2;
    }

3.Java中的数据类型划分有哪些?
基本数据类型,引用数据类型:
    基本数据类型:四类八种
    整数类型:bety,short,int,long(默认 int)
    浮点类型:float,doubt(默认)
    字符类型:char
    布尔类型:boolean
    引用类型:数组,类,接口

4.有关逻辑与单&和逻辑与&&的区别?
单&逻辑语句左边是false后仍然会运行完整个语句,双&&前面是false后,右边不运行,直接运行下一个语句。
5.位运算符<<  和>>的特点?
    <<:将数据进行左移,右边不够的补0,将左移最多余的位数丢弃掉
    结论:将<<符号左边的数据乘以2的移动次幂
    >>:将数据进行右移,如果最高符号位是1,则左边补1;最高符号位是0,左边补0,右移后
多余的位数丢弃掉

11.1晨写

1.if...else 和三元运算符的区别
共同点:两种情况都可以进行批判,成立对应的内容,不成立,执行不成立的内容  
区别:三元运算符 是操作符号,属于运算符,一般都是具体的数据值,而它里面不能使用输出语句;
它相对if...else...来说,范围很小;
而if...else...是流程控制语句,它不仅仅是操作数据值,而且可以打印内容;范围大。
if语句可以的实现的三元运算符不一定可以,三元运算符可以的实现的,if语句一定可以
 
2.for循环和while循环的区别?
1)格式不同
    for(初始化语句 ;条件表达式;控制体语句){
        循环体语句;
    }
    初始化语句;
    while(条件表达式){
        循环体语句;
        控制体语句;
    }
2)是否明确循环次数
若明确循环次数,使用for循环
不明确循环次数,使用while循环
3)是否节省内存空间
for循环优于while循环的这种格式;因为for结束,里面的变量及时从内存中释放,节省内存资源消耗
3.什么是水仙花数for循环获得所有的水仙花数
百位十位个位的数字的立方根等于这个数本身

class Fortest{
    public static void main(String[]args){
    for(int x = 100 ;x<=999; x++){
        int ge = x%10';
        int shi = x /10%10';
        int bai = x/10/10%10';
    if(x == (ge*ge*ge+shi*shi*shi+bai*bai*bai)){
        System.out.println(x);
        }
    }
    }

}

4.switch语句后面的变量可以是什么数据类型?
byte,short,int,char
jdk5以后可以是枚举 enum枚举名{}
jdk7以后可以是String

传统自定义常量
    public static final 数据类型 变量名 = 值;

5.switch语句中有哪些注意事项?
switch语句
    case语句后只能是常量
     default语句可以在语句中的任何位置000000000
        如果在语句的末尾,break可以省略;
        但是在语句中,break不要省略(考点)
    switch语句的结束条件:
        1)遇见break语句结束;
        2)程序默认执行到末尾

11.2晨写

1.break中断当前循环或语句,continue直接进入下一次循环,return返回值
2.返回实数用int 返回小数用double 返回不知道的类型用void
3. public static void 方法名(参数类型1 参数名,参数类型2,变量2 ...)
4.使用同样的方法名,参数类型不同,参数个数不同,参数顺序吧不同;(与返回值无关)的方法

11.3晨写

1.什么是数组
数组是一个容器,可以存储多个元素,这多个元素必须是同一种数据类型
数组可以存储及基本数据类型 的元素,也可以存储引用数据类型的元素!
缺点:长度是固定的,不适合这种 长度一直变化的需求!

2.数组的定义格式以及初始化格式
数组的定义格式:
    数据类型[] 数组名称;
    数据类型 数组名称[];
初始化格式:创建对象的格式---动态初始化、静态初始化;
动态初始化:
    数据类型[] 数组名称 = new 数据类型[数组长度];
    数据类型 数组名称[] = new 数据类型[数组长度];
静态初始化:
    数据类型[] 数组名称 = new 数据类型[](元素1,元素2,元素3....);
    数据类型 数组名称[] = new 数据类型[](元素1,元素2,元素3....);
静态初始化的简写格式:
    数据类型[] 数组名称 = (元素1,元素2,元素3....);

3.jvm内存分配有哪些?分别作用
栈内存:存储局部变量(在方法定义中或者方法声明上),局部变量跟方法有关的;方法进栈,
方法调用完毕,里面局部变量随着调用结束而消失
堆内存:
new出来的东西(引用数据类型)存储在堆中,而且它是随着对象的创建完毕,产生堆内存
空间地址值;
方法区:
里面很多的区域:class字节码文件区域--存储字节码文件--jvm需要加载这个类,解析这个类所有的方法以及变量
(这个过程--“反射技术”)    
    static区域:--静态区域--存储跟static相关的一些方法以及变量等等
    constant pooll:常量池 里面存储常量相关的    
本地方法区:和系统相关的--创建系统资源完成系统相关的操作
寄存器: 和系统cpu有关系:电脑的核数--核数越大,高并发场景下,运行效率越高;


4.数组的遍历--代码体现
 

public static void printArrry(int[] arr){
    system.out.print("[");
    for(int  x = 0 ; x < arr.length; x++){
        if(x==arr.length - 1){
            system.out.println(arr[x]+"]");    
        }else{
            system.out.print(arr[x]+",");
        }
    }
}


5.请描述冒泡排序思想以及核心代码体现
两两比较,如果前面的元素比后面的大,将前面的元素往后放(较大的往后走),第一次比较完毕,最大值就出现在
最大索引处;依次这样比较,就可以得到一个排好序的数组!
 

public static void bubbleSort(intp[] arr){
    for(int x=0; x<arr.length-1;x++){
        for(int y =0 ;y<arr.length-1;y++){
            if(arrr[y]>arr[y+1]){
                int temp = arr[y];
                arr[y] = arr[y+1];
                arr[y+1] = temp;
}
}
}

}

11.4晨写

1.面向对象的思想特点?
1)更符合现实生活中的思想行为习惯
2)让复杂的事情简单化
3)角色发生了改变:从执行者(面向过程)--->变成指挥者(面向对象)

2.面向对象的三大特征
封装 继承 多态

3.形式参数是基本数据类型和引用类型的区别?
1)形式参数如果是基本类型 ,形式参数改变不影响实际参数(包括特殊的应用java,lang
.String)
2)形式参数如果是引用数据类型,形式参数的改变直接影响实际参数的值

4.什么是类?如何在Java中描述具体事物?
类:描述事物的一组属性和行为的集合 类和现实世界事物是一一对应的关系

5.成员变量和局部变量的区别?
1)在类中的位置不同
    成员变量 类中方法外
    局部变量 方法内或者方法声明上
2)在内存中的位置不同
    成员变量 堆内存
    局部变量 栈内存
3)生命周期不同
    成员变量 随着对象的存在而存在,随着对象的消失而消失
    局部变量 随着方法的调用而存在,随着方法的调用完毕而消失
4)初始化值不同
    成员变量 有默认的初始化值
    局部变量 没有默认的初始化值,必须先定义,赋值,才能使用。

面试题:

1.if...else...和三元运算符的区别?   

        共同点:
                 都是针对两种情况进行判断,都有表达式;  
        不同点:
            if...else...流程控制语句,范围很大,不仅仅可以操作数据值,还可以操作输出语句去完成逻辑判断;而三元运算符仅仅是运算符,操作两个具体的数据值;
        三元运算符能实现的一定能够使用if...else...流程语句 if....else....流程语句实现的,不一定能够使用三元!(流程控制语句操作 System.out.println())

2.switch语句后面的这个变量名可以是什么样的数据类型呢?

        本身能够跟的基本数据类型:byte,short,char,int
        Jdk5以后可以是枚举(引用类型) enum
        JDK7以后可以跟String类型

3.for和while循环有什么区别?

        1.从用法格式上看,格式不同,while循环的这个格式,不要忽略了控制体语句;
            for(初始化语句;条件表达式;控制体语句){
                循环体语句;
            }        
            初始化语句;
            while(条件表达式){
                循环体语句;
                控制体语句;
            }
 2.是否明确循环次数(开发中,优先使用for)
            如果需求明确了循环次数,优先使用for循环,工程上的for循环使用最多的!
            (最频繁的)
            如果不明确循环次数,使用while循环  举例: 猜数字游戏(1-100的数据)
3.从内存角度考虑,for循环更优一些,比较节省内存空间    
            从for循环本身的格式上来说,for循环结束,里面的局部变量(方法定义中的变量)就被及时的释放空间!
            while循环格式,结束之后,依然能够去访问那个变量,(比较消耗内存空间),所以相对来说whle循环没有for循环好

跳转控制语句:

break;continue;return

public class ReturnDemo {
    public static void main(String[] args) {

        System.out.println("程序开始了...");
        for(int x = 1 ; x <=10 ; x++){
            if(x == 3){
                System.out.println("条件成立了");
              //  break ;
               // continue;
                //return很少单独用,在有返回值的方法中用的(推荐)
                return;//结束方法的
            }
            System.out.println(x);
        }

        System.out.println("程序结束了");
    }
}

当语句是break,输出1,2和三个输出语句,当语句是continue时,输出1.2.4.5.6.7.8.9和10,还有三个输出语句,当语句是return,输出1.2和程序开始了,条件成立了。

方法重载:

java提供overload方法重载:多个方法的方法名可以相同,参数列表不同,与返回值无关! 参数列表不同:可以有下面几种:1.参数类型不同2.参数个数不同3.考虑参数的先后顺序不同

public class FunctionDemo4 {
    public static void main(String[] args) {
        //调用
        //为了方便,直接输出调用
        System.out.println(sum(10,20))
        System.out.println(sum(10,20,30));
        System.out.println(sum(10,20,30,40));
    }
    //两个数据求和的方法
    public static int sum(int a,int b){
        return  a+b ;
    }
    //三个数据求和
    //public static int sum2(int a,int b ,int c){
    public static int sum(int a,int b ,int c){
        return  a+ b+ +c ;
    }
    //四个数据求和
    //public static int sum3(int a,int b,int c,int d){
    public static int sum(int a,int b,int c,int d){
        return  a+b +c+d ;
    }


    public static float sum(int a,float b){
        return  a+b ;
    }

    public static float sum(float a,int b){
        return  a+b;
    }

    public static double sum(double a,double b){
        return  a+b;
    }

    public static double SUM(double a,double b){//方法名不同
        return  a+b;
    }
}

 冒泡排序:

两两比较,将较大的值往后放,第一次比较完毕,最大值就出现在最大索引处依次这样比较,可以得到一个排好序的数组;
bubbleSort(arr);
        //在调用遍历功能,展示数据
        printArray(arr);

    }
    /*
    * 定义一个冒泡排序的方法:
    *   两个明确
    *       明确返回值类型: 没有具体返回值 --直接元素里面互换  void
    *       明确参数类型  以及参数个数
    *               指定数组,1个
    * */
    public static void bubbleSort(int[] arr){
        for(int x = 0 ; x < arr.length-1;x++){//控制比较的次数
            // arr.length-1-x:为了减少比较的次数
            for(int y = 0 ; y < arr.length-1-x; y++){
                //如果前面的元素比后面元素大
                if(arr[y]> arr[y+1]){
                    int temp = arr[y] ;
                    arr[y] = arr[y+1] ;
                    arr[y+1] = temp;
                }
            }
        }
    }

    /**
     * 遍历数组的方法
     * @param arr 对已知的数组遍历
     */
    public static void printArray(int[] arr){
        System.out.print("[");
        //遍历数组
        for(int x = 0 ; x < arr.length ; x++){
            //判断:如果是最大索引值,取到最后一个元素
            if(x== arr.length-1){
                System.out.println(arr[x]+"]");
            }else{
                //中间的元素
                System.out.print(arr[x]+", ");
            }
        }
    }
}

形式参数:

形式参数如果是基本数据类型,形式参数的改变不影响实际参数!后面特殊的引用数据类型:String,作为形式参数和基本类型数效果一致!

局部变量的生命周期:(方法定义中,或者方法声明上):局部变量随着方法调用而存在,随着方法调用结束而消失

public class ArrayTest {
    public static void main(String[] args) {
        //下面代码,写成结果
        int a = 10 ;
        int b = 20 ;
        System.out.println("a:"+a) ;
        System.out.println("b:"+b) ;
        change(a,b) ;
        System.out.println("a:"+a) ;//10
        System.out.println("b:"+b) ;//20
        System.out.println("-----------------------------------");
        //String特殊引用类型,它作为形式参数和基本类型一致,形式参数的改变不影响实际参数
        String s = "helloworld" ;//String类:常用类中 是重点  (字符串是一个常量! String str ="abc";)
        System.out.println(s);//"helloworld"
        change(s);
        System.out.println(s);
    }
    public static void change(String s){//形式参数
        s += "javaEE" ;
    }
    public static void change(int a,int b){//基本类型作为形式参数 10,20
        a = b ;// a= 20
        b = a+b; //b = 20 + 20 =40
    }
}
引用类型作为形式参数,形式参数的改变是直接影响实际参数的,因为引用数据类型(数组,类,接口),是一种空间地址值进行传递,而基本数据类型只是数据值进行传递(随着方法调用存在,调用结束而消失)而引用类型---需要new--->需要在堆内存中开辟空间,对象使用完了,不会立即被回收,需要等待gc垃圾回收器空闲时刻自己回收!对象一旦被创建,永远指向那个地址值,除非重新new对象
public class ArrayTest2 {
    public static void main(String[] args) {
        //创建一个数组,静态初始化
        int[] arr = {1,2,3,4,5} ;
        System.out.println(arr[1]);//2
        change(arr) ;//----{1,4,3,8,5}
        System.out.println(arr[1]); //4
    }
    public static void change(int[] arr){//引用数据类型数组作为参数传递---空间地址值
        //遍历了数组
        for(int x= 0  ; x < arr.length ;x++){
            //获取到元素
            if(arr[x] %2==0){
                arr[x]*=2 ;
            }
        }
    }
}

匿名对象:

没有名字的对象!

有名字的对象---描述具体事物 ---创建对象格式类名 对象名 = new 类名() ;

匿名对象格式:

new 类名();

特点:

1.可以作为"参数传递"

2.实际用的过程,匿名对象不要多次,一般使用一次即可,使用完毕立即被回收!在android中匿名对象使用居多 (移动端内存小,节省内存)

//定义一个人类
class Person{
    //人都需要工作
    public void work(){
        System.out.println("爱生活,爱Java,爱高圆圆");
    }
}
//定义一个PersonDemo
class PersonDemo{
    //成员方法
    public void function(Person p){//形式参数引用类型,调用这个方法的时候,需要创建Person类对象
        p.work();
    }
}


//测试类
public class NoNameDemo {
    public static void main(String[] args) {
        //使用有名字的对象访问:
        //访问PersonDemo类中 function()方法
        PersonDemo pd = new PersonDemo() ; //创建PersonDemo类对象
        //创建Person类对象
        Person p = new Person() ;
        pd.function(p);//创建Person类对象进行实际参数传递
        System.out.println("------------------------------------------------------");
        //匿名对象的格式 :new 类名();  --可以作为参数传递
        //访问PersonDemo类中 function()方法
        PersonDemo pd2 = new PersonDemo() ;
        pd2.function(new Person());

        System.out.println("------------------------------------------------------");
        //链式编程 (实际开发中:不推荐这种,自己去使用可以用这种格式)
        //访问PersonDemo类中 function()方法
        new PersonDemo().function(new Person());
    }
}

私有化类的调用

public class information {
    private String name;

    public void setName(String n){
        name = n ;
    }
}
public class phonetest {
    public static void main(String[] args) {

        information  information = new information() ;

        information.setName("小米");
      
            System.out.println("手机的品牌是:"+ information.getName());
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
进展记录 第一进展记录: 本主要的任务是研究和了解图书管理系统的基本架构和设计。我开始查阅相关文献,查看各种资料和网上资源,总结出一个简单的系统架构。在本的时间内,我主要学习Java中的面向对象编程思想和Java的基本语法知识,以及MySQL数据库的使用。 下一步计划是根据系统架构图,开始编写代码实现基本的功能,包括登录、添加新书、查询等,同时继续学习Java和MySQL的相关知识,为后续的开发做好准备。 第二进展记录: 本主要的任务是完成系统的基本功能开发。我将之前设计的系统架构图转换为类图和流程图,根据这些图开始编写代码。在代码开发的过程中,我常常遇到各种问题,有些是语法或者逻辑出现了问题,有些则是原本设计思路有误。在遇到问题时,我通过查询资料、咨询同学等方式解决问题。在经过一的努力之后,系统已经具备了基本的功能,可以添加图书信息,查询图书信息以及删除图书信息等。 下一步计划是优化代码,增加一些高级功能,比如图书借阅管理功能等。同时,我将继续学习Java语言和MySQL数据库的相关知识,为项目的后续开发做好准备。 第三进展记录: 本主要的任务是优化代码,增加一些高级功能。我对现有的代码进行了分析,找出存在的问题,并设计了一些解决方案,优化代码结构和实现方法。同时,我增加了一些高级功能,主要是图书借阅管理功能和用户权限管理功能。在这一的时间内,我成功地实现了这些功能,并测试了其可用性。 下一步计划是进一步优化代码,增加错误处理机制,完善用户体验。同时,我将进一步学习Java语言和MySQL数据库的相关知识,为后续的开发做好准备。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值